我正在尝试在振荡器上使用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
也不会返回任何内容。我做错了什么?
答案 0 :(得分: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);