2014-06-06 10 views
7

Die Dokumentation für beide Methoden sind beide sehr generisch, wo immer ich hinschaue. Ich würde gerne wissen, was genau ich mit den zurückgegebenen Arrays, die ich von jeder Methode bekomme, betrachte.verstehen getByteTimeDomainData und getByteFrequencyData in Web Audio

Für getByteTimeDomainData, welcher Zeitraum wird mit jedem Durchlauf abgedeckt? Ich glaube, dass die meisten Oszilloskope für jeden Durchgang eine Zeitspanne von 32 Millisekunden abdecken. Ist das auch hier abgedeckt? Für die tatsächlichen Elementwerte selbst scheint der Bereich 0 - 255 zu sein. Entspricht dies -1 - +1 Volt?

Für getByteFrequencyData basieren die abgedeckten Frequenzen auf der Abtastrate, also ist jeder Index eine tatsächliche Frequenz, aber was ist mit den tatsächlichen Elementwerten selbst? Gibt es einen dB-Bereich, der den im zurückgegebenen Array zurückgegebenen Werten entspricht?

Antwort

13

getByteTimeDomainData (und die neuere getFloatTimeDomainData) ein Array von der Größe von Ihnen angeforderte - seine frequencyBinCount, die als die Hälfte der angeforderten fftSize berechnet wird. Dieses Array ist natürlich bei der aktuellen sampleRate ausgesetzt auf der AudioContext, also, wenn es die Standardeinstellung 2048 fftSize ist, frequencyBinCount wird 1024, und wenn Ihr Gerät mit 44,1 kHz läuft, wird dies etwa 23ms Daten entsprechen.

Die Bytewerte liegen zwischen 0 und 255, und ja, das entspricht -1 bis +1, also ist 128 gleich Null. (Es handelt sich nicht um Volt, sondern um Einheiten ohne Einheit.)

Wenn Sie getFloatFrequencyData verwenden, sind die zurückgegebenen Werte in dB; Wenn Sie die Byte Version verwenden, werden die Werte basierend auf minDecibels/maxDecibels zugeordnet (siehe die minDecibels/maxDecibels Beschreibung).

+0

Wie haben Sie 2.3ms von einem frequencyBinCount von 1024 und einer Abtastrate von 44,1 kHz bekommen? –

+0

Hoppla, mal um den Faktor zehn! Ich hätte 23 Millisekunden sagen sollen. 1024 Samples geteilt durch 44100 Samples pro Sekunde (aka Hertz) entsprechen 0,023219 ... Sekunden. – cwilso

+0

Warum wird 'frequencyBinCount' als Breite der Zeitbereichsdaten verwendet? Gibt es eine Beziehung zwischen dem Zeitbereichfenster und der Häufigkeitsbinanzahl für das fft, das mir hier fehlt? – JoeRocc