Co odpowiadają dane FFT w Web Audio API?

Użyłem danych FFT z węzła analizatora za pomocą metody getByteFrequencyData W Web Audio API do utworzenia wizualizera widma, jak pokazano poniżej:

Wizualizer Widma

W tym przypadku mam 256 pojemników danych. Co dokładnie odpowiadają tym liczbom? Jest to poziom decybelowy każdego składnika częstotliwości. Jeśli tak, to skąd mam wiedzieć, jaka jest wartość częstotliwości każdego pojemnika?

Chciałbym wiedzieć, aby móc eksperymentować w budowaniu graficznego eq i tak chciałbym wiedzieć, w których punktach wskazać pasma filtrów. Idealnie chciałbym reprezentować częstotliwości od 20Hz do 20kHz i odpowiednio wykreślić odstępy między nimi.

Dzięki za pomoc.
Author: RobotEyes, 2013-02-09

2 answers

Tak, getByteFrequencyData daje znormalizowaną tablicę wartości z zakresu od 0 do 255. (kopiuje dane do tablicy, którą otrzymuje).

Pasma częstotliwości są dzielone równo, więc każdy element N tablicy odpowiada:

N * samplerate/fftSize

Więc, pierwszy Kosz to 0.
przy założeniu, że częstotliwość próbkowania wynosi 44100 i <analyzerNode>.fftSize 512, sekunda wynosi: 86.13 Hz, i tak dalej...

Znajdziesz te dwa pytania i odpowiedzi przydatne, na dsp i na więc :

Uwaga że długość twojego sampledata wynosi połowę <analyzerNode>.fftSize, skutecznie ograniczając zakres częstotliwości do połowy samplerate.

 28
Author: kr1,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:55:07

Z 256 pojemnikami, każdy z nich będzie oddalony od siebie o ~86 Hz (częstotliwość próbkowania 44100 kHz / fftSize, gdzie fftSize jest dwa razy większa niż liczba pojemników). Więc zaczynasz od zera, a stamtąd idziesz w górę z częstotliwością 86 Hz.

Rzeczywiste wartości w pojemnikach są tylko reprezentacją tego, jak wiele z każdej częstotliwości jest obecnych w sygnale(tj. jak "głośna" jest częstotliwość).

 5
Author: Kevin Ennis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-09 16:35:55