我正在使用来自github的这个spectrogram.js来绘制频谱图并实时获得频率值。 Github Repo
我已经写了这个额外的stopSong函数:
function stopSong() {
var analyser = audioContext.createAnalyser();
var ctx = new AudioContext();
var osc = ctx.createOscillator();
osc.connect(ctx.destination);
osc.start(0);
spectro.stop();
var freqData= new Uint8Array(analyser.frequencyBinCount);
analyser.getByteFrequencyData(freqData);
//var f = Math.round(freqData[1]);
// var text = f + ' Hz';
var idx = 0;
for (var j=0; j < analyser.frequencyBinCount; j++) {
if (freqData[j] > freqData[idx]) {
idx = j;
}
}
var frequency = idx * ctx.sampleRate / analyser.fftSize;
console.log(frequency);
//document.getElementById("frec").innerHTML = text;
}
但每次我运行它时都会输出0作为输出。任何人都可以告诉我的代码有什么问题。
答案 0 :(得分:0)
您需要将oscillator
与analyser
:
oscillator.connect(analyser);
此外,您可能需要多次致电getByteFrequencyData
,可能会在requestAnimationFrame
或类似setTimeout
。