Какому временному окну соответствуют данные в AnalyserNode.getByteFrequencyData? - PullRequest
1 голос
/ 28 июня 2019

Я хотел бы получить преобразование Фурье для небольшого временного окна (то есть ~ 1 секунда).

let audioCtx = new AudioContext();
let analyser = audioCtx.createAnalyser()
let buffer = new Uint8Array(analyser.frequencyBinCount);

//given an audio stream 'stream'
let source = audioCtx.createMediaStreamSource(stream);

setInterval(()=>{
    analyser.getByteFrequencyData(buffer);
    //Do some analysis with buffer...
},1000)

С помощью AnalyserNode в WebAPI я могу получать данные Фурье в ячейках шириной 44100/analyser.fftSize = 22050/analyser.frequencyBinCount, что позволяет указатьразрешение путем установки analyser.fftSize.Из документации мне неясно, как устанавливается временное окно.

Из API :

Рендеринг звукового графика выполняется в блоках128 образцов-кадров.Блок из 128 отсчетов-кадров называется квантом рендеринга, а размер кванта рендеринга равен 128.

Означает ли это временное окно 128/44100Hz=2.9ms?

1 Ответ

1 голос
/ 30 июня 2019

Визуализация звукового графика выполняется в блоках по 128 сэмплов-кадров.Блок из 128 отсчетов-кадров называется квантом рендеринга, а размер кванта рендеринга равен 128.

Означает ли это, что временное окно 128/44100 Гц = 2,9 мс?

Не совсем.Квантовый размер рендеринга - это количество кадров выборки, которое обрабатывается за один раз циклом рендеринга, но это не мешает узлам накапливать дополнительные выборки в буферах.В частном случае AnalyserNode последние fftSize выборок сохраняются для вычисления БПФ.Таким образом, временное окно фактически равно analyser.fftSize/sampleRate, где sampleRate - это настроенная вами частота дискретизации (которая может быть 44100, но может варьироваться в зависимости от устройства вывода).Для захвата ~ 1 секунды звука при условии частоты дискретизации 44100 Гц вам потребуется fftSize = 32768 (что приведет к временному окну ~ 0,74 секунды).

...