Mid*_*ava 5 javascript web-audio-api
当我尝试执行以下javascript行时,Chrome 27 beta会抛出一个SyntatxError:
offlineContext = new webkitOfflineAudioContext(2, 7*48000, 48000);
Run Code Online (Sandbox Code Playgroud)
这符合W3C建议书,经过几小时的网络搜索,我看到了几十个显然可以使用这种形式的例子.我知道API可能会发生变化,但我找不到任何暗示.我哪里错了?
奇怪的是,当我在jsfiddle中尝试它时,它不会失败.我甚至尝试在jsfiddle中运行这个代码片段存在的整个函数,删除了几个项目.下面是我正在尝试运行的功能.执行函数时指示出现"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");
}
};
Run Code Online (Sandbox Code Playgroud)
所以问题是 OfflineAudioContext 的采样率需要设置为与常规 AudioContext 相同的值。Chris Rogers 将考虑修复这个问题,我在使用 OSX Chrome(测试版和稳定通道)时出现过这个问题,但在 CentOS 上运行的 Fedora Chrome(仅经过测试的稳定通道)则没有。但是,将两个音频上下文设置为相同的采样率后,现在一切正常。