是否可以使用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。
答案 0 :(得分:1)
分析器实际上不打算在offlineContext中使用;事实上,它最初被命名为“RealtimeAnalyser”。但更重要的是,现在您无法在脱机环境中从脚本处理器获得一致的功能。
答案 1 :(得分:1)
另一种方法是使用suspend
可用的resume
和OfflineAudioContext
方法。暂停后,您可以使用分析器节点获取所需的时间和/或频域数据。由于上下文已停止,因此工作正常。如果您要多次这样做,则需要在下次恢复之前安排停止。
不幸的是,AFAIK,只有Chrome针对suspend
OfflineAudioContext