【发布时间】:2018-05-23 07:13:44
【问题描述】:
是否可以使用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,代码相同。
【问题讨论】: