当我尝试执行以下javascript行时,Chrome 27 beta会引发SyntatxError:

offlineContext = new webkitOfflineAudioContext(2, 7*48000, 48000);

这与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");
    }
};

最佳答案

因此,问题在于,需要将OfflineAudioContext的采样率设置为与常规AudioContext相同的值。克里斯·罗杰斯(Chris Rogers)将研究解决此问题,这对我来说适用于OSX Chrome(测试版和稳定版),但不适用于在CentOS上运行的Fedora Chrome(仅经过测试的稳定版)。但是,在将两个音频上下文设置为相同的采样率的情况下,现在一切正常。

09-17 02:14