2013-05-09 154 views
5

的Chrome 27测试版抛出一个SyntatxError当我尝试执行下面的JavaScript行:网络音频OfflineAudioContext语法错误,当我按照API

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"); 
    } 
}; 
+0

更正:我拿到的SyntaxError当我在init函数中调用构造函数时。之前一定错过了它。 – MidnightJava 2013-05-09 13:07:06

+0

你在Windows机器上有什么机会?它适用于我的Mac。也许他们还没有为Win/Chrome实现它。 – 2013-05-10 00:51:02

+0

它在OSX上失败,但不在CentOs上(Chrome的Fedora发行版)。然而,我发现问题在哪里。事实证明,OfflineAudioContext的采样率必须与常规AudioContext的设置相同。 – MidnightJava 2013-05-10 03:42:59

回答

4

所以问题是,需要设置为相同的值作为常规AudioContext为OfflineAudioContext采样率。克里斯罗杰斯将考虑解决这个问题,OSX Chrome(测试版和稳定版)对我来说是这样,但不是在CentOS上运行的Fedora Chrome(仅限经过测试的稳定通道)。但是,将两个音频上下文设置为相同的采样率,现在一切正常。

1

只是为了让您知道,在Chrome中输入此段(最好在about:blank以避免丢失任何东西)将输出所有有效的整数值作为比特率。

document.querySelector('body').innerHTML = ""; 
var b, sampleRate; 
for(sampleRate = 22050; 
sampleRate <= 96000; //22050 to 96000 is the minimum support according to the w3c working draft 
++sampleRate){ 
var b = true; 
try{var l = new webkitOfflineAudioContext(1,sampleRate, sampleRate);} 
catch(e){b = false} 
if(b){document.writeln(sampleRate + " is a good sample rate.");}} console.log("Complete"); 

似乎只有44100是有效的权利,但the w3c specification

的采样率参数描述在在每第二采样帧缓冲器中的线性PCM音频数据的采样率。实现必须支持采样率至少在22050至96000.

我不知道这是否已提交的Webkit /铬作为一个大坏臭虫的范围...