Als weiterer Beitrag zum Thema "Sound in AS3" eine kommentierter Beispielcode, der den Befehl SoundMixer.computeSpectrum() nutzt. Mit ihm kann man in Echtzeit das Frequenzspektrum einer MP3-Datei abbilden, denn SoundMixer.computeSpectrum() liefert die aktuelle Wellenform.

ActionScript 3 Beispiel: Soundmixer.computeSpectrum()

Der Befehl lautet im konkreten Beispiel folgermaßen:

Actionscript:

  1.  

Die drei Parameter im Einzelnen:

  • byteArr: Instanzname eines Objekt vom Typ ByteArray
  • true: Die ermittelten Daten werden einer Fouriertransformation unterzogen. Dadurch erhält man ein Frequenzspektrum.
  • 0: Dehnungsfaktor der Samplingrate (0=44.1KHz; 1=22.05KHz; 2=11.025KHZ; ...)

Die Wellenform wird in einem Objekt vom Typ ByteArray abgelegt. Das abgespeicherte ByteArray-Objekt enthält immer genau 512 Gleitkommazahlen (=float). Die ersten 256 Werte gehören zum linken Kanal, die nächsten 256 zum rechten. Dabei repräsentieren jeweils die anfänglichen Werte die "Tiefen", dann folgen die "Mitten" und zuletzt die "Höhen".

Man liest nun die einzelnen Float-Werte mit dem Befehl readFloat() aus dem ByteArray aus.

Actionscript:

  1.  

Schachtelt man den Befehl in eine Schleife, wird automatisch mit jedem erneuten Aufruf die nächste Position im Datenstrom zurückgegeben. So erhält man zuerst die 256 Werte für den linken Kanal, dann die 256 Werte für den rechten Kanal.

Zuletzt gilt es, die Werte grafisch darzustellen. In meinem Beispiel habe ich ein einfaches Diagramm gewählt, bei dem die Werte auf der y-Achse aufgetragen werden. Hier sind natürlich der Kreativität keine Grenzen gesetzt (vgl. Links).

Actionscript:

  1. span style="color: #ff0000;">"demo.mp3"// neues ByteArray zum Abspeichern des Spektrums
  2. // jeweiliges aktueller Pegelwert des Spektrums
  3. // Anfangsposition der Anzeige: y
  4. // diese Variable wird in x-Richtung durchlaufen
  5. // Funktion soll jedes Frame aufgerufen werden
  6. // Grafik auf der Bühne löschen
  7. // "Zeichen-Cursor" an die Anfangsposition
  8. // Fouriertransformiertes Spektrum mit 44.1 KHz samplen
  9.     // wird im ByteArray abgelegt
  10. // Linker Kanal (= die ersten 256 Float-Werte im ByteArray)
  11. // Rechter Kanal (= die zweiten 256 Float-Werte im ByteArray)
  12. // einzelner Float-Wert auslesen
  13. // Linien-Stil festlegen (Zufallsfarbe)
  14. // Zeichen-Cursor wieder auf die "y-Achse" setzen
  15. // Linie zeichnen
  16. // Zeichen-Cursor eins nach rechts
  17.  

Link: computeSpectrum() (ActionScript 3 Reference)
Link: Sound Spectrum Contest (theflashblog.com)
Link: Quellcode .fla
Link: Revolt (Flash Spectrum Analyzer; Quellcode kann heruntergeladen werden)