2013-02-09 8 views
25

Ich habe die Daten aus dem FFT-Analysator-Knoten unter Verwendung des getByteFrequencyData Verfahrens in dem Web-Audio-API verwendet, um ein Spektrum Veranschaulichungseinrichtung zu schaffen, wie unten gezeigt: Ich habe 256 Bins von Daten in diesem Beispiel Was entsprechen die FFT-Daten in der Web Audio API?

Spectrum Visualizer

. Was genau entsprechen die Zahlen in diesem? Ist es der Dezibelpegel jeder Frequenzkomponente? Wenn ja, woher weiß ich, welchem ​​Wert die Häufigkeit der einzelnen Fächer entspricht?

Ich würde gerne wissen, damit ich experimentieren kann beim Erstellen eines Grafik-EQ und möchte so wissen, an welchen Stellen die Filterbänder angezeigt werden. Idealerweise würde ich gerne Frequenzen von 20 Hz bis 20 kHz darstellen und Intervalle zwischen diesen entsprechend aufzeichnen.

Danke für jede Hilfe.

Antwort

27

ja, getByteFrequencyData ergibt ein normalisiertes Array von Werten zwischen 0 und 255. (es kopiert die Daten in das Array, in das es übergeben wird).

die Frequenzbänder sind gleichmäßig aufgeteilt, so dass jedes Element von N Array entspricht:

N * samplerate/fftSize 

so das erste Fach ist 0.
und eine Samplerate von 44100 und ein <analyzerNode>.fftSize von 512 unter der Annahme, die zweite wäre: 86,13 Hz, und so weiter ...

Sie diese beiden Fragen und Antworten nützlich, auf dsp und auf SO finden:

Beachten Sie, dass die Länge Ihrer Abtastwerte die Hälfte der beträgt, wodurch der Frequenzbereich auf die Hälfte der Samplerate begrenzt wird.

+0

getByteFrequencyData gibt nichts zurück; Vielmehr kopiert es die Häufigkeitsdatenwerte (0-255) _in das vorzeichenlose Array (Uint8Array() in JavaScript), die Sie als Parameter an die Methode übergeben. [W3C-Entwurf - Web-Audio-API - getByteFrequencyData] (https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#AnalyserNode). Nur für den Fall, dass jemand erwischt wird, wenn er versucht, irgendeine Art von Rückgabewert von diesem Methodenaufruf zu verwenden ... –

+0

@fettereddingoskidney, danke, aktualisiert. – kr1

+0

Rock auf! Nicht versuchen, pingelig zu sein:] –

5

Mit 256 Bins wird jeder ~ 86 Hz auseinander liegen (44100 kHz Abtastrate/fftSize, wobei fftSize die doppelte Anzahl an Bins ist). Sie beginnen also bei Null und gehen von dort aus in 86-Hz-Schritten hoch.

Die tatsächlichen Werte in den Bins sind nur eine Darstellung davon, wie viel von jeder Frequenz in dem Signal vorhanden ist (d. H. Wie "laut" die Frequenz ist).

+0

Die Web Audio API gibt eine Anzahl von Bins zurück, die die Hälfte der fftSize beträgt. Also, IMHO sollten Sie dividieren durch 'bins.length * 2' oder besser mit' fftSize' direkt, siehe auch meine Antwort. – kr1