Web音频离线上下文和分析器节点

时间:2014-08-18 17:12:21

标签: javascript web-audio

是否可以使用Analyser中的offlineAudioContext节点进行频率分析?

我发现ScriptProcessor的{​​{1}}事件仍会在onaudioprocess中触发,这是我用来调用{offlineAudioContext getByteFrequencyData的唯一事件来源1}}节点。如下:

Analyser

这里的问题是var offline = new offlineAudioContext(1, buffer.length, 44100); var bufferSource = offline.createBufferSource(); bufferSource.buffer = buffer; var analyser = offline.createAnalyser(); var scp = offline.createScriptProcessor(256, 0, 1); bufferSource.connect(analyser); scp.connect(offline.destination); // this is necessary for the script processor to start var freqData = new Uint8Array(analyser.frequencyBinCount); scp.onaudioprocess = function(){ analyser.getByteFrequencyData(freqData); console.log(freqData); // freqData is always the same. }; bufferSource.start(0); offline.startRendering(); 数组始终相同且永远不会更改。好像它只是在分析缓冲区的一部分。

我在这里做错了吗?或者freqData不打算用于Analyser

以下是具有相同代码的fiddle

2 个答案:

答案 0 :(得分:1)

分析器实际上不打算在offlineContext中使用;事实上,它最初被命名为“RealtimeAnalyser”。但更重要的是,现在您无法在脱机环境中从脚本处理器获得一致的功能。

答案 1 :(得分:1)

另一种方法是使用suspend可用的resumeOfflineAudioContext方法。暂停后,您可以使用分析器节点获取所需的时间和/或频域数据。由于上下文已停止,因此工作正常。如果您要多次这样做,则需要在下次恢复之前安排停止。

不幸的是,AFAIK,只有Chrome针对suspend

实施了OfflineAudioContext