Web Audio API中音符的频率

Rom*_* A. 7 javascript html5 html5-audio web-audio-api

我创建了audiocontext并将我的麦克风连接到分析仪:

context = new AudioContext();
microphone = context.createMediaStreamSource(stream);
analyser = context.createAnalyser();
analyser.fftSize = 2048;
microphone.connect(analyser);
Run Code Online (Sandbox Code Playgroud)

然后我得到了一些频率数组:

fFrequencyData = new Uint8Array(analyser.frequencyBinCount);
analyser.getByteFrequencyData(fFrequencyData);
Run Code Online (Sandbox Code Playgroud)

我想在麦克风前播放一些音符,然后显示它是什么音符.我如何获得音符的频率?例如,A1 = 440.00Hz,F#3 = 1480.00Hz.

谢谢!

cwi*_*lso 7

根据Brad的评论 - 您可能不想使用Realtime Analyzer.您还可以访问https://github.com/cwilso/PitchDetect - 请参阅https://github.com/cwilso/PitchDetect/blob/master/第194行中提出的准确问题,"noteFromPitch"方法.js/pitchdetect.js,会这样做.

  • 啊.那么,桶的中心在0到奈奎斯特频率范围内线性扩展; 也就是audioContext.sampleRate的一半.因此,将采样率除以2,然后除以数组的大小,这就是赫兹每个桶的"宽度". (2认同)