使用网络音频将频率映射到响度 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
现在是 0
到 255
之间的值数组。我现在的问题是如何将频率映射到数据数组的响度值?
理想情况下,我想要这样的对象:
{
...
438: 128,
439: 200,
440: 255,
441: 200,
...
}
感谢您的帮助。
data[k]
中的值对应频率k * Nyquist/frequencyBinCount
,其中Nyquist
是采样频率的二分之一,AudioContext.sampleRate
.
我认为这就是您的要求。如果不是请澄清。
我想使用网络音频 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
现在是 0
到 255
之间的值数组。我现在的问题是如何将频率映射到数据数组的响度值?
理想情况下,我想要这样的对象:
{
...
438: 128,
439: 200,
440: 255,
441: 200,
...
}
感谢您的帮助。
data[k]
中的值对应频率k * Nyquist/frequencyBinCount
,其中Nyquist
是采样频率的二分之一,AudioContext.sampleRate
.
我认为这就是您的要求。如果不是请澄清。