Преобразование частот в громкость с помощью API Web Audio - PullRequest
0 голосов
/ 27 января 2020

Я хочу обнаруживать проигрываемые ноты и аккорды с помощью API Web Audio (используя микрофон в качестве устройства ввода). Прежде чем я смогу проанализировать данные, мне нужны отдельные частоты, сопоставленные с их громкостью. Я начал со следующего фрагмента:

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,
    ...
}

Спасибо за ваше помощь.

1 Ответ

0 голосов
/ 27 января 2020

Значение в data[k] соответствует частоте k * Nyquist/frequencyBinCount, где Nyquist - это половина частоты дискретизации, AudioContext.sampleRate.

Я думаю, это то, что вы просите. Если нет, уточните.

...