Aufbauend auf dem letzten Sound-Beitrag mit dem Thema MP3, hier nun eine kurze Einführung in die Soundchannel-Klasse. Die Klasse dient zur Überwachung von Sound-Objekten und liefert nützliche Information wie die Abspielposition oder den Pegel. Als Beispiel habe ich eine Pegelanzeige erstellt, die wie die Anzeige auf einem Mischpult den rechten und linken Kanal einer MP3-Datei anzeigt:

Zuerst erstellt man - wie im vorigen Beitrag - ein Sound-Objekt. Als zweites kommt nun das Soundchannel-Objekt zum Zug. Damit es die Informationen von einem Sound-Objekt bekommen kann, muss eine Zuordnung zwischen Sound-Objekt und Soundchannel-Objekt vergenommen werden. Dies geschieht mit mySC = mySound.play(0, 5). Bei der 0 handelt es sicht um die Anfangsposition des MP3s in Sekunden. Die 5 legt fest, dass das MP3 fünfmal wiederholt wird.

Actionscript:
  1. // Sound laden
  2. var mySound:Sound = new Sound(new URLRequest("demo.mp3"));
  3.  
  4. // neues Soundchannel-Objekt und Sound starten
  5. var mySC:SoundChannel;
  6.  
  7.  
  8. // 0 = Startzeit   5 = Anzahl der Wiederholungen
  9. mySC = mySound.play(0, 5);

Ist die MP3-Datei geladen, wird die Funktion init() ausgeführt. Darin wird ein Timer (vgl. Archiv) gestartet. Er dient dazu, dass die Pegelanzeige ständig (alle 20ms) aktualisiert wird. (Anmerkung: Man kann den Timer prinzipiell auch sofort starten, sonst kann es sein, dass die Anzeige zu Beginn "hängt")

Actionscript:
  1. mySound.addEventListener (Event.COMPLETE, init);
  2. function init(evt:Event) {
  3.         var peakTimer = new Timer(20);
  4.         peakTimer.addEventListener(TimerEvent.TIMER, showPeak);
  5.         peakTimer.start();
  6. }

Zuletzt benötigt man die Funktion showPeak(), die vom Timer aufgerufen wird. Wie man sieht, enthält das Soundchannel die beiden Eigenschaften leftPeak und rightPeak, also die Pegel des linken und rechten Kanals eines Stereo-MP3s.

Auf der Bühne befinden sich zwei MovieClips mit den Namen myLeftPeak und myRightPeak. Es handelt sich um die beiden farbigen Balken, die in der Animation zu sehen sind. Zu Beginn sind beide jeweils komplett von einer Maske überdeckt. Die Masken werden nun abhängig vom Pegel so verschoben, dass der farbige Balken sichtbar wird. Je stärker der Ausschlag, desto mehr wird sichtbar.

Actionscript:
  1. function showPeak(evt:Event) {
  2.     myLeftMask.y = myLeftPeak.y + (300 * (1 - mySC.leftPeak));
  3.     myRightMask.y = myRightPeak.y + (300 * (1 - mySC.rightPeak));
  4. }

Link: Soundchannel-Klasse (ActionScript 3 Language Reference)
Link: Quellcode (.fla)