• beyond tellerrand – play. Register Now!
Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 12-01-2005, 22:22   #1 (permalink)
-
 
Benutzerbild von pape
 
Registriert seit: Jan 2004
Beiträge: 3.002
[TUTORIAL] MP3-Player mit XML-Fütterungszeit ;-)

Hallo!

MP3-Player mit XML-Fütterungszeit


Inhalt

0. Einleitung
1. First Steps
2. Die XML-file
3. XML-Datei in Flash einlesen
4. Die Playerfunktion
5. Der Preloader
6. Der erste Test
7. Die automatische Wiedergabeliste
8. Die Buttons
9. Das fertige ActionScript
10. Ausleitung


0. Einleitung:

Da wieder mal die Frage aufkam, wie man in Flash einen Mp3Player baut und ihn mit XML-daten füttert und mein XML-Tutorial + weitere Threadangaben nicht so richtig halfen, dachte ich es wäre vielleicht sinnvoll, das ganze mal zusammen zu tragen.

Es mag sein, dass Ähnliches schon da gewesen ist, aber eine Anleitung, wie man genau dieses Problem behandelt habe ich nicht gefunden!

Ich habe das Problemchen noch etwas erweitert und einen Preloader eingebaut.
Im nächsten Schritt (Part II... den es wahscheinlich eh nie geben wird...^^....mal schaun) könnte man ein Lauftext für die Anzeige, eine Liste mit vorhandenen Dateien, Regler für die Lautstärke usw.. einbinden!

Lasst euch nicht abschrecken von der Länge des Tutorials!
es wird zwar lang, aber dasheißt nur Arbeit für mich!
Ihr könnt es (hoffentlich) sehr schnell lesen, da ich versucht habe es möglichst genau und dennoch leicht verständlich zu erklären!
Ob das geklappt hat könnt ihr mir sehr gerne mitteilen, damit ich für die Zukunft bescheid weiß! Danke!


Also viel Spaß & Erfolg!!!

(ich werde unten nicht mehr jeden kleinen Schritt bezüglich der XML einlesung genaustens erklären! vorwissen wäre hier gut.. es reicht mein Tutoriasls über das Laden und verarbeiten von XML datein in Flash zu lesen.
Dieses kann dort: [TUTORIAL] laden und verarbeiten von XML Dateien (basics)
gefunden werden!)


1. First Steps:

Als erstes benötigen wir einen neuen Flashfilm!
Datei>neu

Nun wollen wir uns zunächst kurz um die graphische Oberfläche kümmern, um uns dann an die Scripts zu geben!

wir benötigen 4 Buttons:

1. "btn_play"
2. "btn_stop"
3. "btn_prev"
4. "btn_next"

play spielt eine Soundfile ab, wenn schon eine am spielen ist, soll sie von vorne beginnen.
stop stoppt die wiedergabe.
prev soll die vorangehende Datei abspielen und next dementsprechend die folgende Datei!

für den Play Button habe ich einen simplen dreieckspfeil gemalt, für stop ein viereck und für prev bzw. next doppelpfeile.

dann benötigen wir noch ein dynamisches Textfeld, in welchem wir später den Songtitel anzeigen lassen!
Wir nennen es "anz"

Nun erstellen wir eine neue Ebene, nennen sie "AS" und schreiben folgendes:
ActionScript:
  1. stop();
um den film direkt hier auf frame 1 anzuhalten.



2. Die XML-file:

Als nächstes brauchen wir erst einmal eine XML datei und ein Script, welches uns die Dateien einliest!

Also öffnet den edtior oder ein anderes Textprogramm und schreibt dort das als Grundstruktur rein:
Code:
<?xml version='1.0' encoding='utf-8'?>
<songs>
  <song />
</songs>
songs ist der erste ChildNode und song ist dann einer unserer später einzuladenen Songs!
..so wie es jetzt da steht genügt das natürlich nicht, da wir verscheidene Informationen über den Song benötigen:
Wir brauchen den später anzuzeigenden Namen und die dazugehörige datei.
Also geben wir jedem unserer Songs 2 attribute, sodass die XML datei z.b. so aussieht:
Code:
<?xml version='1.0' encoding='utf-8'?>
<songs>
  <song name="Lied1" file="songs/lied1.mp3" />
  <song name="Lied2" file="songs/lied2.mp3" />
</songs>
Erweitert die datei um ein paar songs und speichert sie im selben Verzeichnis wo auch die fla liegt unter "songlist.xml" ab.



3. XML-Datei in Flash einlesen:

Nun wenden wir uns dem Script in FLash wieder zu.

wir benötigen ein XML Objekt:
ActionScript:
  1. songliste = new XML();
dort müssen wir angeben, dass wir die Spaces und Breaks ignorieren wollen;
ActionScript:
  1. songliste.ignoreWhite=true;

Wir wollen 2 Arrays (global, um von überall auf sie zugreifen zu können ohne die pfadsorgen!) erstellen, in denen wir unsere Daten aus der XML file speichern.
Diese erstellen wir direkt in der onLoad funktion des XML objektes und füllen sie direkt(für weitere Erklärungen s. Tutorial einladen und verarbeiten von XML-dateien):
ActionScript:
  1. songliste.onLoad = function (success) {
  2.     _global.songnamen = [];
  3.     _global.songfiles = [];
  4.     if(success) {
  5.         for (var i=0; i<songliste.firstChild.childNodes.length; i++) {
  6.             _global.songnamen[i] = songliste.firstChild.childNodes[i].attributes.name;
  7.             _global.songfiles[i] = songliste.firstChild.childNodes[i].attributes.file;
  8.         }
  9.     } else {anz.text="Fehler beim Laden der XML datei"}
  10. }
danach laden wir die Datei:
ActionScript:
  1. songliste.load("songlist.xml");

so, um nun zu überprüfen, ob die Daten wirklich übergeben wurde, könnt ihr nun den Film starten!
wenn keine Fehleranzeige in dem textfeld zusehen ist, dann hats geklappt... wirklich?..
... naja.. zumindest sind keine Fehler aufgetreten beim laden, ob die daten jedoch wirklich reingeladen wurden und in den arrays gespeichert wurden, könnt ihr einfach mit einem Trace in der for schleife probieren, sodass der gesamte code bis hier in Flash so aussieht:
ActionScript:
  1. stop();//film anhalten
  2. songliste = new XML();//neues XML Objekt
  3. songliste.ignoreWhite=true;//Leerzeichen ignorieren
  4. songliste.onLoad = function (success) {//onLoad function (wird ausgeführt, wenn die daten geladen werden)
  5.     if(success) {//wenn das laden erfolgreich war
  6.         //arrays erstellen
  7.         _global.songnamen = [];
  8.         _global.songfiles = [];
  9.         for (var i=0; i<songliste.firstChild.childNodes.length; i++) {//für alle Elemente in der XMLfile
  10.             //Die attribute auslesen und in die Arrays packen
  11.             _global.songnamen[i] = songliste.firstChild.childNodes[i].attributes.name;
  12.             _global.songfiles[i] = songliste.firstChild.childNodes[i].attributes.file;
  13.             trace(songnamen[i]+"  "+songfiles[i]);//überprüfen, ob wirklich die Daten richtig übergeben wurden
  14.             //Die Ausgabe sollte z.b. so aussehen:
  15.             //Lied1  songs/lied1.mp3
  16.             //Lied2  songs/lied2.mp3
  17.         }
  18.     } else {anz.text="Fehler beim Laden der XML datei"}//falls ein Fehler auftritt beim Laden
  19. }
  20. songliste.load("songlist.xml");//Liste laden
  21.  

Geändert von pape (12-01-2005 um 22:57 Uhr)
pape ist offline   Mit Zitat antworten
Alt 12-01-2005, 22:23   #2 (permalink)
-
 
Benutzerbild von pape
 
Registriert seit: Jan 2004
Beiträge: 3.002
4. Die Playerfunktion:

Da wir nun unsere Daten in Flash haben, können wir unsere Functions bezüglich des Mp3 Player "bauen".

Zunächst einmal erstellen wir einen MovieClip, in dem wir unseren Sound legen werden:
(das script kommt direkt hinter die for schleife.. ersetzt quasi jetzt das tarcen der Arrays)
ActionScript:
  1. _root.createEmptyMovieClip("sound_mc",1);
Es sei gesagt, dass es nicht zwangsläufig notwendig ist den Sound nochmal in einen extra Mc zu packen, aber ich mache das mal aus strukturellen Übersichtlichkeits-gründen. Zudem wird es uns später für den Preloader dienen.

Nun benötigen wir ein Sound Objekt, welches wir dem MovieClip unterordnen:
ActionScript:
  1. _root.sound_mc.sound_obj = new Sound();

jetzt schreiben wir die function, die uns in unser Soundobjekt Die gewollte Datei lädt:
Wir wollen der function 2 Parameter mitgeben:
1. die zuladene File
2. den Titel des Songs

in ActionScript umgesetzt:
ActionScript:
  1. function (file, name) {
  2.   //...
  3. }

was muss diese function nun genau machen?
zunächst lädt sie in unser Spundobjekt die datei;
diese soll gestreamt werden:
ActionScript:
  1. sound_obj.loadSound(file,true)//true steht hier für streaming=an
  2.  

das war es eigentlich schon. der erste Song wird abgespielt, sobald wir die function mit den entsprechenden Parametern aus dem Array aufrufen!



5. Der Preloader:

Wir wollen aber noch weiter gehen und einen Preloader für den sound bauen und natürlich eine automatische Abarbeitung unserer XML liste.
Zudem soll auch noch der Name der datei angezeigt werden...

Der Preloader ist kein wirklicher Preloader...wir streamen die Datei ja schließlich.
Das heißt, dass ein gewisser Teil in den Buffer geladen wird und dann wärend der Rest der Datei geladen wird, die Wiedergabe schon startet!
Wieviel vorgeladen wird steht in der _soundbufftime.
Diese ist standardgemäß auf 5 sekunden eingestellt und kann verändert werden (s. Flash-Referenzen).
Wir belassen es einfach bei 5 sec.

Wie nun aber können wir abfragen wann diese Bufftime geladen wurde?
mit getBytesLoaded() und getBytesTotal(); können wir hier nichts wirklich anfangen...

Nein, das ist viel einfacher als man denken mag:
Jedes Soundobjekt besitzt die Eigenschaft "position".
Sie gibt die aktuelle Abspielposition des Soundobjektes in Millisec. an.
Wenn diese also größer als 0 ist, hat der Sound angefangen abzuspeieln!
ActionScript:
  1. if(sound_obj.position>0) { ...}
Diese Abfrage müssen wir natürlich ähnlich wie bei einem "normalen" Preloader mehrmals ausführen.. und zwar solange, bis der Sound angefangen hat zu spieln!

Was eignet sich da besser als ein onEnterFrame Ereignis..

SOOO... an dieser Stelle müssen wir etwas ändern! (wir müssen nicht, aber es wird hilfreich!)
Wir erinnern uns, dass wir unser Soundobjekt in einen extra Mc gelegt haben... genau... der dient jetzt für das onEnterFrame Ereignis!

Um das ganze noch einfacher zu gestalten und nicht noch einen weiteren Parameter "sound_mc" für die function zu benötigen machen wir aus unserer function einen prototypen!

Nach der Umwandlung sähe unsere derzeitige "function" so aus:
(das sound objekt liegt in diesem mc, daher von nun an this.sound_obj, da "this" sich auf den Mc bezieht)
ActionScript:
  1. MovieClip.prototype.song_starten = function (file, name) {
  2.     this.sound_obj.loadSound(file,true)//true steht hier für streaming=an
  3.     //...
  4.     if(this.sound_obj.position>0) { ...}
  5.     //...
  6. }
Nun können wir wie gesagt innerhalb des Prototypens mit "this" unseren Movieclip ansprechen und ihm so mit this.onEnterFrame = function () {...} ein onEnterFrame Ereignis zuweisen, in welchem wir abfragen ob der Sound schon gestartet ist!
Sollte das der Fall sein, so können wir das onEnterFrame mit delete this.onEnterFrame wieder löschen.
Das alles sieht dann bis jetzt so aus:
ActionScript:
  1. MovieClip.prototype.song_starten = function (file, name) {
  2.     this.sound_obj.loadSound(file,true)//true steht hier für streaming=an
  3.     this.onEnterFrame = function () {//das onEnterFrame Ereignis
  4.         if(this.sound_obj.position>0) {
  5.             delete this.onEnterFrame; // das onEnterFrame Ereignis löschen
  6.             trace("Der Song ist gestartet");
  7.         }
  8.     }
  9. }
während die Datei noch geladen wird, könnten wir in unser Textfeld ein "loading..." schreiben.
Also ergänzen wir die if-Abfrage im onEnterFrame mit einem else part:
ActionScript:
  1. if(this.sound_obj.position>0) {
  2.     delete this.onEnterFrame; // das onEnterFrame Ereignis löschen
  3.     trace("Der Song ist gestartet");
  4. } else {
  5.     this._parent.anz.text="loading..." //this._parent heißt soviel wie: dieser_mc_hier.die_übergeordnete_instanz dort liegt nämlich das textfeld.
  6. }

wenn der Song nun gestartet ist können wir in das Textfeld den Songnamen schreiben.
Das machen wir in dem wir unser trace("Der Song ist gestartet"); durch das ersetzen:
ActionScript:
  1. this._parent.anz.text=name; //name wurde als parameter übergeben
  2.  



6. Der erste Test:

Wenn ihr bis hierhin gekommen seid, habt ihr es verdient das ganze nun mal zu testen ob man überhaupt etwas hört!
Sorgt dafür, dass die Pfad angaben in der XML-Datei wirklich stimmen!
(oben im beispiel müsste ein Ordner namens "songs" existieren in dem die dateien "lied1.mp3" und "lied2.mp3" liegen.
Der Ordner müsste im selben Verzeichniss wie die xml und die fla sein!)

Aufgerufen wird der Prototype nun zum testen einfach mit dem ersten Song und zwar in der onLoad function (nachdem die Arrays in der for-Schleife gefüllt wurden, der sound_mc erstellt wurde und das sound Objekt erstellt wurde).
Die nötigen Parameter stehen in unseren Arrays, sodass der Aufruf so aussieht:
ActionScript:
  1. _root.sound_mc.song_starten(songfiles[0],songnamen[0]);

und das komplette bisherige Script so:
ActionScript:
  1. songliste = new XML();//neues XML Objekt
  2. songliste.ignoreWhite=true;//Leerzeichen ignorieren
  3. songliste.onLoad = function (success) {//onLoad function (wird ausgeführt, wenn die daten geladen werden)
  4.     if(success) {//wenn das laden erfolgreich war
  5.         //arrays erstellen
  6.         _global.songnamen = [];
  7.         _global.songfiles = [];
  8.         for (var i=0; i<songliste.firstChild.childNodes.length; i++) {//für alle Elemente in der XMLfile
  9.             //Die attribute auslesen und in die Arrays packen
  10.             _global.songnamen[i] = songliste.firstChild.childNodes[i].attributes.name;
  11.             _global.songfiles[i] = songliste.firstChild.childNodes[i].attributes.file;
  12.             trace(songnamen[i]+"  "+songfiles[i]);//überprüfen, ob wirklich die Daten richtig übergeben wurden
  13.             //Die Ausgabe sollte so aussehen:
  14.             //Lied1  songs/lied1.mp3
  15.             //Lied2  songs/lied2.mp3
  16.         }
  17.         _root.createEmptyMovieClip("sound_mc",1);//sound_mc erstellen
  18.         _root.sound_mc.sound_obj = new Sound();//Sound objekt erstellen
  19.         _root.sound_mc.song_starten(songfiles[0],songnamen[0]);//sound laden und starten
  20.     } else {anz.text="Fehler beim Laden der XML datei"}//falls ein Fehler auftritt beim Laden
  21. }
  22.  
  23. MovieClip.prototype.song_starten = function (file, name) {
  24.     this.sound_obj.loadSound(file,true)//true steht hier für streaming=an
  25.     this.onEnterFrame = function () {//das onEnterFrame Ereignis
  26.         if(this.sound_obj.position>0) {
  27.             delete this.onEnterFrame; // das onEnterFrame Ereignis löschen
  28.             this._parent.anz.text=name; //name wurde als parameter it übergeben
  29.         } else {
  30.             this._parent.anz.text="loading..." //this._parent heißt soviel wie: dieser_mc_hier.die_übergeordnete_instanz dort liegt nämlich das textfeld.
  31.         }
  32.     }
  33. }
  34.  
  35. songliste.load("songlist.xml");//Liste laden
  36.  

Es sollte die Datei, auf die der erste XML-knoten verweist, abgespielt werden, wenn ihr den Film testet!

Geändert von pape (12-01-2005 um 22:44 Uhr)
pape ist offline   Mit Zitat antworten
Alt 12-01-2005, 22:24   #3 (permalink)
-
 
Benutzerbild von pape
 
Registriert seit: Jan 2004
Beiträge: 3.002
7. Die automatische Wiedergabeliste:

Wie können wir jetzt eine automatische Wiedergabe der nächsten Knoten auch noch realisieren?

das Soundobjekt hat eine Methode namens "onSoundComplete".
Dieser Methode können wir eine function zuweisen, die ausgeführt werden soll, wenn der aktuelle Sound abgespielt wurde!
Wir sollten zunächst aber überlegen was wir machen wollen, wenn der Sound abgespielt wird...

Wir möchten den nächsten Sound abspielen!

Dafür brauchen wir also eine Variable, die uns sagt, welche Song-Nummer momentan abgespielt wird.
Ich nenne sie mal "song_nr"
Wir deklarieren sie sobald die Arrays gefüllt wurden und das SoundObjekt erstellt wurde.. und zwar als globale Variable, sodass wir von überall auf sie zugreifen können.
Wenn man sie auf 0 setzt, fängt man immer beim ersten Song an, man kann natürlich auch per random einen Zufalls wert nehmen:
ActionScript:
  1. //...
  2. _global.song_nr = random(songfiles.length);
  3. //...
  4.  

wenn nun ein Song fertig abgespielt wurde, brauchen wir nur zu überprüfen, ob noch weitere Songs vorhanden sind oder ob wir von vorne anfangen müssen und ansonten brauchen wir die Variable nur immer eins hochzuzählen:
wir erweitern demenstprechend den Prototypen:
ActionScript:
  1. this.sound_obj.onSoundComplete = function () {
  2.     if (song_nr==songnamen.length-1) {//wenn die letzte Datei abgespielt wurde (-1 da song_nr bei 0 anfängt und der counter für die length bei 1)
  3.         song_nr=0 // wieder von vorne Anfangen
  4.     } else {
  5.         _global.song_nr++ //sonst einfach den nächsten Song abspielen
  6.     }
  7. }
Das ganze in der Kurzschreibweise:
ActionScript:
  1. this.sound_obj.onSoundComplete = function () {
  2.     (song_nr==songfiles.length-1)? _global.song_nr=0 : _global.song_nr++;
  3. }

jetzt noch den nächsten Song starten mit
ActionScript:
  1. _root.sound_mc.song_starten(songfiles[song_nr],songnamen[song_nr]);

der Prototyp sieht also fertig so aus:
ActionScript:
  1. MovieClip.prototype.song_starten = function (file, name) {
  2.     this.sound_obj.loadSound(file,true)//true steht hier für streaming=an
  3.     this.onEnterFrame = function () {//das onEnterFrame Ereignis
  4.         if(this.sound_obj.position>0) {//wenn der Sound startet
  5.             delete this.onEnterFrame; // das onEnterFrame Ereignis löschen
  6.             this._parent.anz.text=name; //name wurde als parameter it übergeben
  7.         } else {
  8.             this._parent.anz.text="loading..." //this._parent heißt soviel wie: dieser_mc_hier.die_übergeordnete_instanz dort liegt nämlich das textfeld.
  9.         }
  10.     }
  11.     this.sound_obj.onSoundComplete = function () {//wenn der sound fertig abgespielt wurde
  12.         (song_nr==songfiles.length-1)? _global.song_nr=0 : _global.song_nr++;//nächsten Song auswählen (-1 da song_nr bei 0 anfäng)
  13.         _root.sound_mc.song_starten(songfiles[song_nr],songnamen[song_nr]);//nächsten Song starten
  14.     }
  15. }



8. Die Buttons:

Jetzt fehlen nur noch die Buttons!

button play macht nichts weiter, als den Song der grade ausgewählt ist, also der song_nr entsprechend zu starten:
ActionScript:
  1. btn_play.onRelease = function () {
  2.     this._parent.sound_mc.song_starten(songfiles[song_nr],songnamen[song_nr]);//aktuell ausgewählten Song starten
  3. }

btn_stop stoppt die Wiedergabe:
ActionScript:
  1. btn_stop.onRelease = function() {
  2.     this._parent.sound_mc.sound_obj.stop(); //Wiedergabe stoppen
  3. }

Die function für btn_next ist mit der automatischen "nächster Song" function: onSoundComplete zu vergleichen:
ActionScript:
  1. btn_next.onRelease = function () {
  2.     (song_nr==songfiles.length-1)? _global.song_nr=0 : _global.song_nr++;//nächsten Song auswählen (-1 da song_nr bei 0 anfäng)
  3.     _root.sound_mc.song_starten(songfiles[song_nr],songnamen[song_nr]);//nächsten Song starten
  4. }
btn_prev funktioniert genauso nur anders herum:
ActionScript:
  1. btn_prev.onRelease = function () {
  2.     (song_nr==0)? _global.song_nr=songfiles.length-1 : _global.song_nr--;//vorherigen Song auswählen(song_nr--) es seiden der erste wurde grade abgespielt.. dann wieder hinten anfangen
  3.     _root.sound_mc.song_starten(songfiles[song_nr],songnamen[song_nr]);//vorherigen Song starten
  4. }

Anmerkung:
Es sei bemerkt, dass wenn die Wiedergabe gestoppt wurde und man auf next oder prev klickt die Wiedergabe beginnt!
das ist aber nicht schilmm und braucht nicht verhindert zu werden.
wer klickt auf next, wenn er nicht die Soundwiedergabe aktivieren möchte?... (jaja.. es gibt auch solche... :rolleyes)

Wie ihr seht, sind die Buttons das kleinste Problem, wenn man sich vorher ordentlich Gedanken gemacht hat!!!
Das sollte man grundsätzlich versuchen zu erziehelen: erst denken, dann scripten/umsetzen!



9. Das fertige ActionScript:

Das gesamte fertige ActionScript sollte nun so aussehen:
ActionScript:
  1. stop();//film anhalten
  2. songliste = new XML();//neues XML Objekt
  3. songliste.ignoreWhite=true;//Leerzeichen ignorieren
  4. songliste.onLoad = function (success) {//onLoad function (wird ausgeführt, wenn die daten geladen werden)
  5.     if(success) {//wenn das laden erfolgreich war
  6.         //arrays erstellen
  7.         _global.songnamen = [];
  8.         _global.songfiles = [];
  9.         for (var i=0; i<songliste.firstChild.childNodes.length; i++) {//für alle Elemente in der XMLfile
  10.             //Die attribute auslesen und in die Arrays packen
  11.             _global.songnamen[i] = songliste.firstChild.childNodes[i].attributes.name;
  12.             _global.songfiles[i] = songliste.firstChild.childNodes[i].attributes.file;
  13.             trace(songnamen[i]+"  "+songfiles[i]);//überprüfen, ob wirklich die Daten richtig übergeben wurden
  14.         }
  15.         _root.createEmptyMovieClip("sound_mc",1);
  16.         _root.sound_mc.sound_obj = new Sound();
  17.         _global.song_nr = random(songfiles.length); // per Zufall einen Song auswählen
  18.         _root.sound_mc.song_starten(songfiles[song_nr],songnamen[song_nr]); // song, der grade per Zufall ausgewählt wurde starten
  19.     } else {anz.text="Fehler beim Laden der XML datei"}//falls ein Fehler auftritt beim Laden
  20. }
  21.  
  22. MovieClip.prototype.song_starten = function (file, name) {
  23.     this.sound_obj.loadSound(file,true)//true steht hier für streaming=an
  24.     this.onEnterFrame = function () {//das onEnterFrame Ereignis
  25.         if(this.sound_obj.position>0) {//wenn der Sound startet
  26.             delete this.onEnterFrame; // das onEnterFrame Ereignis löschen
  27.             this._parent.anz.text=name; //name wurde als parameter it übergeben
  28.         } else {
  29.             this._parent.anz.text="loading..." //this._parent heißt soviel wie: dieser_mc_hier.die_übergeordnete_instanz dort liegt nämlich das textfeld.
  30.         }
  31.     }
  32.     this.sound_obj.onSoundComplete = function () {//wenn der sound fertig abgespielt wurde
  33.         (song_nr==songfiles.length-1)? _global.song_nr=0 : _global.song_nr++;//nächsten Song auswählen (-1 da song_nr bei 0 anfäng)
  34.         _root.sound_mc.song_starten(songfiles[song_nr],songnamen[song_nr]);//nächsten Song starten
  35.     }
  36. }
  37.  
  38. btn_play.onRelease = function () {
  39.     this._parent.sound_mc.song_starten(songfiles[song_nr],songnamen[song_nr]);//aktuell ausgewählten Song starten
  40. }
  41. btn_stop.onRelease = function() {
  42.     this._parent.sound_mc.sound_obj.stop(); //Wiedergabe stoppen
  43. }
  44. btn_next.onRelease = function () {
  45.     (song_nr==songfiles.length-1)? _global.song_nr=0 : _global.song_nr++;//nächsten Song auswählen (-1 da song_nr bei 0 anfäng)
  46.     _root.sound_mc.song_starten(songfiles[song_nr],songnamen[song_nr]);//nächsten Song starten
  47. }
  48. btn_prev.onRelease = function () {
  49.     (song_nr==0)? _global.song_nr=songfiles.length-1 : _global.song_nr--;//vorherigen Song auswählen(song_nr--) es seidenn der erste wurde grade abgespielt.. dann wieder hinten anfangen
  50.     _root.sound_mc.song_starten(songfiles[song_nr],songnamen[song_nr]);//vorherigen Song starten
  51. }
  52.  
  53. songliste.load("songlist.xml");//Liste laden
  54.  



10. Ausleitung:

So das wars auch schon!
Wenn ihr alles richtig gemacht habt, dann solltet ihr jetzt, wie verpsrochen, einen funktionsfähigen Mp3Player haben, den ihr mit Xmldaten füttern könnt!

Anmerkungen:
Wenn ihr dieses script für eure Filme benutzen wollt, dann könnt ihr einfach eine datei anlegen, in der ihr den Player schreibt!
Passt dann aber auf nur relative Pfade zu benutzen (ich habe oben mit _root gearbeitet.. dass solltet ihr dann vermeiden, wenn ihr die Datei in einen Movieclip eures Hauptfilmes laden wollt!).

Im Anhang sind noch die zum Tutorial gehörigen Dateien!
Damit Sie auch wirklich funktionieren, müsst ihr Die Xml-Datei so anpassen, dass die Pfade zu euren Mp3-Datein stimmen.

noch was in eigener Sache: Ich hoffe, dass nirgendwo etwas unsinniges steht.. aber bei so langen Tutorials kann das leider schon mal vorkommen, dass man unten was ändert und es oben vergisst.. falls ihr so etwas entdeckt, so schreibt es bitte. danke!



Mit freundlichen Grüßen,
Robert


P.s.: Ich freue mich immer über Feedback!


mod edit: hier entlang gehts zu Part II:
MP3-Player mit XML-Fütterungszeit - Part II
Angehängte Dateien
Dateityp: zip tutorial_Mp3Player-Xml.zip (4,1 KB, 1653x aufgerufen)

Geändert von salazar (30-07-2006 um 23:51 Uhr) Grund: kaputte files ersetzt
pape ist offline   Mit Zitat antworten
Alt 12-01-2005, 22:28   #4 (permalink)
Neuer User
 
Registriert seit: Apr 2003
Beiträge: 644
HAMMER!!! Vielen dank, werde es mir morgen mal genauer anschauen und versuchen einen mp3 player damit zu bauen

Achja, in deinem "noch was in eigener Sache" steht statt "dass" , "adss" und bisle dadrüber "erpsrochen", nene scherz, will net alles aufzählen, passt ja so, versteht man schon...

mfg jonny

Geändert von jonny-noob (12-01-2005 um 22:29 Uhr)
jonny-noob ist offline   Mit Zitat antworten
Alt 12-01-2005, 22:50   #5 (permalink)
-
 
Benutzerbild von pape
 
Registriert seit: Jan 2004
Beiträge: 3.002
jo, bitte!

Hab noch so ca. 20 Reschtchraibpfela korrigiert!
grz
pape
pape ist offline   Mit Zitat antworten
Alt 12-01-2005, 23:06   #6 (permalink)
Pending…
 
Benutzerbild von psyk
 
Registriert seit: Jul 2002
Ort: Hamburg
Beiträge: 3.866
Thumbs up Muy bien, muy bien.

Respekt.
Werd mir mal ne Woche freinehme und das durch ackern.
__________________
:: Warum einfach, wenn's auch kompliziert geht! ::
psyk ist offline   Mit Zitat antworten
Alt 13-01-2005, 09:29   #7 (permalink)
Neuer User
 
Registriert seit: Sep 2003
Beiträge: 41
ohhh..fett ich fang gleich an...mach dein tut und optimiere dann meinen player! fett fett ..danke danke!
tayfunde ist offline   Mit Zitat antworten
Alt 13-01-2005, 16:11   #8 (permalink)
Neuer User
 
Registriert seit: Sep 2003
Beiträge: 41
ja fett! bni fertig! und es hat alles geklappt! DANKE pape!
jetzt znur noch so oft reinzerren bis ich den code auswendig kann und dasnn ist gut!
tayfunde ist offline   Mit Zitat antworten
Alt 13-01-2005, 16:38   #9 (permalink)
-
 
Benutzerbild von pape
 
Registriert seit: Jan 2004
Beiträge: 3.002
Zitat:
Zitat von tayfunde
jetzt znur noch so oft reinzerren bis ich den code auswendig kann und dasnn ist gut!
^^ ich empfehl eher zu versuchen den code zu verstehen als ihnm auswendig zu lernen!
wenn du ihn verstehst, kannst du ihn auf andere Dinge anwenden!
...

naja, danke für die Lobe

grz
pape
pape ist offline   Mit Zitat antworten
Alt 14-01-2005, 22:11   #10 (permalink)
"flashe"
 
Benutzerbild von Mindprint
 
Registriert seit: Nov 2004
Ort: Schweiz
Beiträge: 98
Thumbs up

hi pape!

schönes, tutorial, gut kommentiert, leicht verständlich, man sieht dass du verstehst wovon du schreibst.
ich hab das ganze durchgearbeitet und funzt soweit, mit den buttons hab ich noch probleme aber das liegt wohl an der referenzierung, sollte kein problem sein.
hm, mache mir noch gedanken über den einbau der zeitanzeige.


wie gesagt, feine sache, danke für deine mühe, hat mir sehr geholfen

chears
mindprint
__________________
"Ein Leben ohne Musik wäre ein Irrtum"
Das geht ab: Lambchop, BoardsofCanada
Mindprint ist offline   Mit Zitat antworten
Alt 15-01-2005, 17:29   #11 (permalink)
-
 
Benutzerbild von pape
 
Registriert seit: Jan 2004
Beiträge: 3.002
Zitat:
Zitat von Mindprint
hm, mache mir noch gedanken über den einbau der zeitanzeige.
die Aktuelle position ist in der deinSound.position in Millisekunden gespeichert.
das würde sie dir dann ausgeben:
ActionScript:
  1. deineAnzeige.text=Math.round(deinSound.position/1000);

mit der Länge wirds nen bisl schwieriger, weil die sounds gestreamt werden...
Die deinSound.duration gibt nämlich nur die Länge des schon geladenen sounds zurück!
man kann zwar die Länge berechnen, aber dafür muss man die Bitrate der Mp3 kennen.
Wenn du das vorhaben solltest, dann such mal im Forum; Die dazugehörige Rechnung hab ich hier irgendwann mal gefunden.
//edit: mp3 player streaming und ladestatus //edit end
Man kann auch die Bitrate per PHP auslesen.. das wird aber recht "kompliziert"... dazu habe ich mal was bei tutorials.de im Flashbereich irgendwo gesehen.. einfach mal suchen.

grz
pape

Geändert von pape (15-01-2005 um 17:34 Uhr)
pape ist offline   Mit Zitat antworten
Alt 15-01-2005, 21:29   #12 (permalink)
"flashe"
 
Benutzerbild von Mindprint
 
Registriert seit: Nov 2004
Ort: Schweiz
Beiträge: 98
ok! thx!

werde das hier dann mal niederschreiben wenn ich weitergekommen bin
chears
mindprint
__________________
"Ein Leben ohne Musik wäre ein Irrtum"
Das geht ab: Lambchop, BoardsofCanada
Mindprint ist offline   Mit Zitat antworten
Alt 16-01-2005, 14:33   #13 (permalink)
Neuer User
 
Registriert seit: Dec 2004
Beiträge: 31
super dieses tutorial! alles funktioniert!

probleme bereitet mir jetzt noch die zeitanzeige. genauer gesagt, wieß ich nicht, wie ich an "deinsound" komme. ich bin mir zudem auch nicht sicher, wo ich das script positionieren soll.
bestboy ist offline   Mit Zitat antworten
Alt 20-01-2005, 23:25   #14 (permalink)
experience++;
 
Benutzerbild von salazar
 
Registriert seit: Jul 2002
Ort: Düsseldorf
Beiträge: 11.305
Thumbs up

super! da haste dir aber viel mühe gegeben mit! respekt.
cya, sal
__________________
Bitte keine Flashfragen an mich schicken. Dafür ist ja das Forum da! Das betrifft auch Profilnachrichten.
Chuck Norris hat den Flash Player für alle mobilen Betriebssysteme!
salazar ist offline   Mit Zitat antworten
Alt 21-01-2005, 00:40   #15 (permalink)
-
 
Benutzerbild von pape
 
Registriert seit: Jan 2004
Beiträge: 3.002
schon mal eine Sache, die ich in dem Tutorial leider nicht beachtet habe :

man muss das Sound-Objekt löschen, sobald man einen neuen Sound starten will, wenn man eine Zeitanzeige umsetzen möchte.
Wenn man dies nicht tut, so läuft die Anzeige immer weiter und wird nicht wieder auf 00:00 gesetzt...

das erkläre ich aber in Teil 2 des Tutorials, den es bald geben wird (...wenn ich genügend Zeit finde den zuende zu schreiben... angefangen habe ich schon!)

bis dann,
grz
pape

@salazar: hallo & thx!
pape ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


LinkBacks (?)
LinkBack zu diesem Thema: http://www.flashforum.de/forum/actionscript-1/tutorial-mp3-player-mit-xml-fuetterungszeit-154345.html
Erstellt von Für Art Datum Hits
Kleiner Player in Flash Dieses Thema Refback 25-11-2011 19:57 1
Flash MP3-Player - Flash • Webdesign Forum Dieses Thema Refback 26-08-2009 09:30 11


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:35 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele