是否可以使用offlineAudioContext
中的Analyser
节点进行频率分析?
我发现 ScriptProcessor
的 onaudioprocess
事件仍然在 offlineAudioContext
中触发,这是我可以用来调用的唯一事件源Analyser
节点的 getByteFrequencyData
。如下:
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
不打算在 offlineContext
中使用。
这里是 fiddle使用相同的代码。
最佳答案
另一种方法是使用 OfflineAudioContext
可用的 suspend
和 resume
方法。暂停后,您可以使用分析器节点获取所需的时域和/或频域数据。由于上下文已停止,因此可以正常工作。如果您要多次执行此操作,则需要安排下一次停止,然后再继续。
不幸的是,据我所知,只有 Chrome 为 OfflineAudioContext
实现了 suspend
关于javascript - 网络音频离线上下文和分析器节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25368596/