【发布时间】:2013-06-23 10:27:22
【问题描述】:
当我尝试执行以下 javascript 行时,Chrome 27 beta 会引发 SyntatxError:
offlineContext = new webkitOfflineAudioContext(2, 7*48000, 48000);
这符合 W3C 建议,经过数小时的网络搜索后,我看到了几十个显然适用于这种确切形式的示例。我知道 API 可能会发生变化,但我找不到任何提示。我哪里错了?
奇怪的是,当我在 jsfiddle 中尝试时它并没有失败。我什至尝试在 jsfiddle 中运行这个 sn-p 存在的整个函数,删除几个项目。下面是我试图运行的功能。当函数执行时,会出现“SyntaxError Dom Exception 12”。
我有一个可以工作的音频应用程序,我只是想添加后台处理,以便以后使用 OfflineAudioContext 进行渲染。如果我在我的 init 函数中定义 OfflineAudoiContext,我不会在那里得到语法错误。但是我需要在 createRenderData() 函数中定义它,因为我需要为每个媒体源设置长度和采样率,如果我不带参数调用 OfflineAudioContext 构造函数,我会得到一个 TypeError。此外,我在 API 中看不到任何方法来设置现有 OfflineAudioContext 的长度和采样率。
AudioUI.createRenderData = function() {
var url = BGAudioUI.renderQueue.pop();
if (url) {
BGAudioUI.media = new Audio(url);
BGAudioUI.media.addEventListener('durationchange', function() {
console.log("background duration: " + BGAudioUI.media.duration);
BGAudioUI.duration = BGAudioUI.media.duration;
//BGAudioUI.allData = new Float32Array(Math.floor((AudioUI.context.sampleRate.toFixed() / AudioUI.downsampleFactor.toFixed() * BGAudioUI.duration)) + 1);
//console.log("calculated sample rate: " + Math.floor(AudioUI.context.sampleRate / AudioUI.downsampleFactor.toFixed()));
//console.log("duration: " + BGAudioUI.duration);
BGAudioUI.offlineContext = new webkitOfflineAudioContext(2, 7*48000, 48000); //SyntaxError DOM Exception 12 occurs here
BGAudioUI.mediaSource = BGAudioUI.offlineContext.createMediaElementSource(BGAudioUI.media);
BGAudioUI.offlineContext.oncomplete = function(buffer) {
data = buffer.getChannelData(0);
console.log(data.length + " records processed offline");
};
BGAudioUI.offlineContext.startRendering();
BGAudioUI.media.play();
console.log("created background media source for " + BGAudioUI.media.src);
}, false);
BGAudioUI.media.load();
console.log("created background media object for " + BGAudioUI.media.src);
} else {
alert("Background rendering complete");
}
};
【问题讨论】:
-
更正:当我在 init 函数中调用构造函数时,我也会收到 SyntaxError。以前一定错过了。
-
您是否有机会使用 Windows 计算机?它适用于我的 Mac。也许他们还没有为 Win/Chrome 实现它。
-
它在 OSX 上失败了,但在 CentOs(Chrome 的 Fedora 发行版)上没有。但是,我发现了问题所在。事实证明,OfflineAudioContext 的采样率必须与常规 AudioContext 的设置相同。