1

我正在尝试在振荡器上使用 Web Audio 的 FFT。

相关代码:

var context = new window.webkitAudioContext

var osc = context.createOscillator()
var an = context.createAnalyser()
osc.connect(an)
an.connect(context.destination)

osc.start(0)
osc.stop(context.currentTime + 2) //play sine wave for 2 seconds

var freqDomain = new Int8Array(an.frequencyBinCount)
an.getByteFrequencyData(freqDomain)
console.dir(freqDomain) //all 0's

此外,调用an.getTimeDomainData也不会返回任何内容。我究竟做错了什么?

4

1 回答 1

1

上面代码中发生的情况是,您立即尝试获取字节频率数据——但由于音频尚未开始,因此还没有数据。每当您想将数据从 AnalyserNode 复制到数组中getByteFrequencyData时,都需要调用。freqDomain

您可以使用ScriptProcessorNode,或使用简单setInterval的调用分析,例如

var freqDomain = new Int8Array(an.frequencyBinCount);

function proc () {
  an.getByteFrequencyData(freqDomain);
  console.log(freqDomain[0]); // Just output one element so we don't destroy the console
}
setInterval(proc, 22);
于 2013-09-07T20:10:23.883 回答