Sounds (aus Bibliothek nachgeladen) starten und stoppen

Wessy

Erfahrenes Mitglied
Hallo beisammen,

ich komme seit ein paar Tagen bei einem Problem schlicht nicht weiter. Es geht um Sounds welche ich mittels Flash steuern (abspielen,stoppen,...) möchte. Hört sich nicht groß an, allerdings sind dies nicht nur Sounds aus der Bibliothek sondern auch nachgeladene (keine Streams).

Letztlich soll es möglich sein dass man z.B. 3 Sounds aus der Bibliothek + 2 per .loadSound gleichzeitig abspielen lässt und dann nach Bedarf einen nachgeladenen Sound stoppt. Die restlichen sollen einfach weiterlaufen. Die Sounds aus der Bibliothek kann ich ja via .stop(sound-link-id) stoppen.

Aber wie mache ich das mit nachgeladenen Sounds welche halt keine link-id besitzen?
 
Hast du es denn schonmal Probiert? Wie genau? Vielleicht können wir dir ja sagen, was du falsch gemacht hast.

Hier in der tutorials-Sektion gibt es sonst auch einen Tutorial von Tobias, wo ein dynamischer Soundplayer erstellt wird. Kannst dir ja entsprechende Teile raussuchen.

AS2 oder AS3?
 
Hallo Jens,

sorry. Hatte ich ganz vergessen. Ich arbeite mit ActionScript 2.0. Ich habe mir das Tutorial von Tobias Menzel angesschaut. Aber bei diesem Tut geht es ja um immer einen Sound welcher gestreamt wird. Bei mir soll es jedoch um mehrere Sounds gehen welche aus der Bib oder dem .loadSound() kommen.

Im Endeffekt habe ich nur Probleme mit den nachgeladenen Sounds da ich hier ohne den Verknüpfungsbezeichner kein .stop(bezeichner) nutzen kann!

Gibt es denn eine Möglichkeit einfach den nachzuladenden Sound vor dem Abspielen mit einem Verknüpfungsbezeichner zu versehen und in die Bibliothek zu paken?

Oder gibt es eine Art .unloadSound()?


Hier mal ein Script-Beispiel wie ich es meine. Die letzte Zeile [...stop('song.mp3');] funktioniert halt nicht!

PHP:
  _global.test1=new Sound();
  _global.test2=new Sound();
  _global.test3=new Sound();
  //…………………………………
  test1.attachSound('bib_sound1');
  test2.attachSound('bib_sound2');
  test3.loadSound('song.mp3');
  test1.start();
  test2.start();
  test3.onLoad=function(success:Boolean){if(success){test3.start();}}
  //...................... und nach ein paar Sekunden.......
  test1.stop(bib_sound1);
  test2.stop(bib_sound2);
  test3.stop('song.mp3');
 
stop geht auch ohne einen Parameter, also einfach nur test3.stop();

Wieso genau möchtest du denn nicht streamen?
 
Oh man! Das Thema 'Sound' wurde aber bei den Entwicklern wohl an einem Montag angegangen! So ein Verhalten des Objektes (genauer der Funktionen attachSound und loadSound) hab ich nicht erwartet.
Dass es .stop() halt auch ohne die Parameter gibt war mir zwar schon bekannt, allerdings verhält sich dies je nach Fall unterschiedlich! Ich will es für andere Suchende hier kurz erklären:

- Wenn man einen Sound per attachSound in ein Sound-Objekt läd, muss man dass Abspielen immer per .stop('link-id'); beenden!

- Wenn man einen Sound per loadSound in ein Sound-Objekt läd, kann man dass Abspielen nur per .stop(); beenden (ob Stream oder nicht ist hier egal)!

- Sollte man jedoch .stop(); auf ein Objekt mit mehreren Sounds abfeuern so werden gleich alle Abspielungen beendet (klar, sagt uns auch die Doku).

- Ein attachSound bindet einen Sound an eine Art 'globalen Abspieler' und die Objekte test1 und test2 (aus dem obigen Beispiel) verhalten sich wie Pointer auf eben diesen. Ein test1.stop(); verhält sich demnach genau so wie ein test2.stop(); und beendet gleich alle Sounds dieses 'globalen Abspieler's!

Man kann also sagen, dass man ein Objekt nutzen kann/sollte für dass Abspielen von sämtlichen Sounds aus der Bibliothek und jeweils ein Objekt für nachgeladene oder streaming Sounds!

Das obige Beispiel sähe demnach so aus:

PHP:
  _global.globalPlayer  =new Sound();
  _global.loadingPlayer1=new Sound();
  _global.loadingPlayer2=new Sound();
  //………………………………… laden
  globalPlayer.attachSound('bib_sound1');
  globalPlayer.attachSound('bib_sound2');
  loadingPlayer1.loadSound('song1.mp3');
  loadingPlayer2.loadSound('song2.mp3');
  //………………………………… abspielen
  globalPlayer.start();
  loadingPlayer1.onLoad=function(success:Boolean){if(success){loadingPlayer1.start();}}
  loadingPlayer2.onLoad=function(success:Boolean){if(success){loadingPlayer2.start();}}
  //………………………………… beenden
  globalPlayer.stop(bib_sound1);
  globalPlayer.stop(bib_sound2);
  loadingPlayer1.stop();
  loadingPlayer2.stop();
Das Beispiel ist von der Aufteilung her etwas 'ungünstig'. Wenn man einen Sound per globalPlayer.attachSound() einbindet muss man diesen erstmal per globalPlayer.start() abspielen bevor man den nächsten Sound läd! Ist hier nur wegen der Übersichtlichkeit anders dargestellt.

Nachtrag: Das beschriebene Verhalten wirkt sich genau so auch auf setPan und setVolume aus. Stellt man für [globalPlayer] z.B. setPan(-100) ein und für [loadingPlayer1] setPan(100) wird quasi alles nur auf dem linken Lautsprecher ausgegeben. Sounds auf dem rechten Lautsprecher (loadingPlayer1) sind demnach nicht hörbar.

Das ganze etwas aufgepeppt mit einer ordentlichen Struktur, Array's und Objekten ergäbe dann was brauchbares. Danke Jens für den Denkanstoss.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück