我遵循API时Web Audio OfflineAudioContext语法错误

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)

Mid*_*ava 4

所以问题是 OfflineAudioContext 的采样率需要设置为与常规 AudioContext 相同的值。Chris Rogers 将考虑修复这个问题,我在使用 OSX Chrome(测试版和稳定通道)时出现过这个问题,但在 CentOS 上运行的 Fedora Chrome(仅经过测试的稳定通道)则没有。但是,将两个音频上下文设置为相同的采样率后,现在一切正常。