Увеличьте разрешение FFT с помощью AnalyserNode
Я думаю, что я могу быть немного смущен использованием AnalyserNode. В настоящее время мой поток userAudio "line-in" подключен к AnalyserNode. Затем я заполняю Uint8Array, используя getByteFrequencyData()
,
Когда я играю один тон 440 Гц, частота с самой высокой интенсивностью в моем массиве будет либо 468 Гц, либо 421 Гц (в зависимости от того, насколько сильно я ее изменяю). Есть ли способ, которым я могу увеличить разрешение вокруг этих частот, чтобы у него было больше частот между 468 и 421 Гц?
Когда я отображаю данные БПФ с тоном 440 Гц, вы можете видеть две интенсивные частоты: 468 Гц и 421 Гц. Есть ли способ усреднить данные БПФ в отдельный массив, чтобы интенсивность точек данных 468 Гц и 421 Гц (среди прочих точек) была усреднена? Я думаю, это было бы как интерполяция данных между частотами...
JSFiddle: http://jsfiddle.net/puYw3/ (я не уверен, что это действительно работает, потому что у меня нет микрофона на моем текущем компьютере).
1 ответ
Это немного поздно, но, возможно, кто-то найдет это полезным.
Вы можете увеличить "разрешение" fft с помощью свойства fftSize AnalyserNode.
Поскольку максимальное значение fftSize ограничено (я полагаю, что на момент написания этой статьи что-то около 2^15), вы все равно получите довольно неточные значения. Можно повысить точность, используя интерполяцию параболического пика