使用网络音频将频率映射到响度 API

Mapping frequencies to loudness using the Web Audio API

我想使用网络音频 API(使用麦克风作为输入设备)检测演奏的音符和和弦。在我分析数据之前,我需要将各个频率映射到它们的响度。我从以下片段开始:

const stream = await navigator.mediaDevices.getUserMedia({
    audio: true,
    video: false
});
const context = new AudioContext();
const source = context.createMediaStreamSource(stream);
const analyser = context.createAnalyser();

const data = new Uint8Array(analyser.frequencyBinCount);
analyser.getByteFrequencyData(data);

data 现在是 0255 之间的值数组。我现在的问题是如何将频率映射到数据数组的响度值?

理想情况下,我想要这样的对象:

{
    ...
    438: 128,
    439: 200,
    440: 255,
    441: 200,
    ...
}

感谢您的帮助。

data[k]中的值对应频率k * Nyquist/frequencyBinCount,其中Nyquist是采样频率的二分之一,AudioContext.sampleRate.

我认为这就是您的要求。如果不是请澄清。