web-dev-qa-db-ja.com

Web Audio APIのFFTデータは何に対応していますか?

以下に示すように、Web AudioAPIのgetByteFrequencyDataメソッドを使用してアナライザーノードからのFFTデータを使用して、スペクトルビジュアライザーを作成しました。

Spectrum Visualizer

この例では、256個のビンのデータがあります。この中の数字は正確には何に対応していますか?各周波数成分のデシベルレベルですか。もしそうなら、どのようにして各ビンの頻度の値が何に対応するかを知ることができますか?

グラフィックeqの作成を実験できるように知りたいので、どのポイントでフィルターバンドを示すかを知りたいです。理想的には、20Hzから20kHzまでの周波数を表し、それに応じてそれらの間の間隔をプロットしたいと思います。

助けてくれてありがとう。

30
RobotEyes

はい、getByteFrequencyDataは、0から255までの値の正規化された配列になります(渡された配列にデータをコピーします)。

周波数帯域は均等に分割されるため、配列の各要素Nは次の要素に対応します。

N * samplerate/fftSize

したがって、最初のビンは0です。
そして、サンプルレートが44100で<analyzerNode>.fftSizeが512であるとすると、秒は86.13Hzなどになります。

dsp[〜#〜] so [〜#〜] :で、これら2つの質問と回答が役立ちます。

サンプルデータの長さは<analyzerNode>.fftSizeの半分であり、周波数範囲をサンプルレートの半分に効果的に制限していることに注意してください。

34
kr1

256個のビンを使用すると、それぞれが最大86 Hz離れます(44100kHzサンプルレート/ fftSize、fftSizeはビンの数の2倍です)。したがって、ゼロから開始し、そこから86Hz刻みで上昇します。

ビンの実際の値は、信号に存在する各周波数の量(つまり、周波数がどれだけ「大きい」か)を表したものにすぎません。

5
Kevin Ennis