roelofs-hengelo
%Europe/Berlin %534 %2008, 13:49
Hallo iedereen,
Ik zit met een lastig probleem, en kom er helaas niet uit. Voordat ik het ga uitleggen, moet ik er wel bij zeggen dat ik niet heel erg bekend ben met AS. Simpele code's kan ik maken en ontcijferen, maar als het ingewikkelder word, word het voor mij ook wat lastiger. Ik heb het grootste gedeelte ook gemaakt, met behulp van tutorials. Zodra ik verder kom, zal ik deze post updaten
Ik ben nu bezig om een dynamische flash player te maken. Ik maak nu gebruik van de voglende bestanden:
playlist.php
playlist.xml
music_player.swf
playlist.php
Dit bestand leest de map uit waar de mp3's in staan, haalt de extensie .mp3 eraf, deelt de naam op in arties en nummer, en exporteerd dit naar playlist.xml. Ook word hierin de music_player.swf ingeladen. Zodat als de player word geopend, er direct word gekeken of er nieuwe/andere nummers zijn.
playlist.xml
Zoals hierboven al staat, word deze dynamisch aangemaakt door playlist.php, en de structuur is alsvolgd.
<songs>
<song id="01" file="mp3/artiest - nummer.mp3" name="Nummer" artist="Artiest"/>
</songs>
music_player.swf
Hierin word uiteraard de playlist.xml in ingeladen, en weergegeven. Ook zijn er knoppen om een ander nummer te kiezen, en het afspelen te stoppen. Dit werkt ook allemaal. Ook de preloader heb ik na een tijd aan de praat gekregen. Nu kan het debuggen beginnen, om te kijken of er ergens nog kleine fouten in zitten.
de swf is opgebouwd uit de volgende onderdelen:
textvak artiest - instance: display_txt
textvak nummer - instance: display2_txt
textvak percent - var: c
mc progressbar - instance: bar_full naam (instance of)*: bar_full
btn prev - instance: btn_rew naam (instance of)*: rewind
btn play - instance: btn_play naam (instance of)*: play
btn stop - instance: btn_stop naam (instance of)*: stop
btn next - instance: btn_fw naam (instance of)*: forward
*Weet niet of deze belangrijk zijn, dus heb ze er voor de zekerheid bij gezet.
met de volgende code:
loader = 2;
trace(loader);
// nieuwe XML aanmaken
playlist = new XML();
playlist.ignoreWhite = true;
// pad van XML
playlist.load("playlist.xml");
// als playlist word geladen, en dit is gelukt
playlist.onLoad = function(success) {
// dan de data uit de XML halen
if (success) {
_global.songfile = [];
_global.songname = [];
_global.songartist = [];
//loopje om alle gegevens binnen te halen.
for (var i = 0; i<playlist.firstChild.childNodes.length; i++) {
_global.songfile[i] = playlist.firstChild.childNodes[i].attributes.file;
_global.songartist[i] = playlist.firstChild.childNodes[i].attributes.artist;
_global.songname[i] = playlist.firstChild.childNodes[i].attributes.name;
// trace(songfile[i]+" "+songartist[i]+" "+songname[i]);
}
}
// als alles is geladen, een nieuwe MC aangemaken genaamt sound_mc
_root.createEmptyMovieClip("sound_mc",1);
// sound_mc is een geluidsbestand
_root.sound_mc.sound_obj = new Sound();
// kies een willekeurig nummer
_global.song_nr = random(songfile.length);
// maak van de gegevens een variabele?
_root.sound_mc.songStarter(songfile[song_nr],songname[song_nr],songartist[song_nr]);
};
// gedeelte hieronder heb ik niet kunnen ontcijferen, maar
// ik weet wel, dat hier de gegevens uit de XML worden ingeladen,
// mp3 word afgespeeld, en naam en artiest van nummer word weergegeven
// in de tekstvakken, leek mij ook logisch om hier de preloader in te plaatsen,
// maar om 1 of andere reden doet hij dat hier niet.
MovieClip.prototype.songStarter = function(file, name, artist) {
this.sound_obj.loadSound(file,false);
// preloader
_root.sound_mc.onEnterFrame = function() {
loaded1 = sound_mc.sound_obj.getBytesLoaded();
total1 = sound_mc.sound_obj.getBytesTotal();
// dit word weergegegeven in de text vakken
c = Math.ceil((loaded1/total1)*100)+"%";
loaded = Math.ceil(loaded1/100)*.1+" kB";
total = Math.ceil(total1/100)*.1+" kB";
var percent = loaded1/total1;
scale = 100*percent;
// Als scale meer als 20 is, geef dan de artiest, en nummer weer in de teksvakken
if (scale>20) {
this._parent.display_txt.text = artist;
this._parent.display2_txt.text = name;
bar_full._xscale = scale;
if (scale == 100) {
loader = 1;
volgende = "ja";
vorige = "ja";
delete this.onEnterFrame;
this.sound_obj.loadSound(file,true);
// Aansturen van de knoppen
i = 2;
j = 1;
trace("vorige: "+vorige);
trace("volgende: "+volgende);
btn_play.onRelease = function() {
if (i == 2) {
trace("doe niets");
} else {
this._parent.sound_mc.sound_obj.loadSound(file,tru e);
i = 2;
j = 1;
trace("start met spelen");
}
};
btn_stop.onRelease = function() {
if (j == 1) {
this._parent.sound_mc.sound_obj.stop();
trace("stop met spelen");
i = 1;
j = 2;
} else {
trace("doe niets");
}
};
btn_fw.onRelease = function() {
if (vorige == "ja" || volgende == "ja") {
(song_nr == songfile.length-1) ? _global.song_nr=0 : _global.song_nr++;
_root.sound_mc.songStarter(songfile[song_nr],songname[song_nr],songartist[song_nr]);
trace("Volgende is in gedrukt, en speeld het volgende nummer.");
volgende = "nee";
vorige = "nee";
}
if (vorige == "nee" || volgende == "nee") {
trace("Volgende is in gedrukt, en doet niets.");
}
};
btn_rev.onRelease = function() {
if (vorige == "ja" || volgende == "ja") {
(song_nr == 0) ? _global.song_nr=songfile.length-1 : _global.song_nr--;
_root.sound_mc.songStarter(songfile[song_nr],songname[song_nr],songartist[song_nr]);
trace("Vorige is in gedrukt, en speeld het vorige nummer.");
vorige = "nee";
volgende = "nee";
}
if (volgende == "nee" || vorige == "nee") {
trace("Vorige is in gedrukt, en doet niets.");
}
};
/// Knoppen houden hier op
}
// Als scale onder 20 is, geef dan "Loading..." weer in het tekstvak
} else {
this._parent.display_txt.text = "Loading...";
this._parent.display2_txt.text = " ";
bar_full._xscale = scale;
}
};
};
Tot nu toe, werkt de balk, het percentage gedeelte, en ook het afspelen, ook werken de knoppen pas, als deze nog niet eerder is ingedrukt (er is geen actie aan de play knop, als er al word afgespeeld)
Het enigste wat ik nu nog zoek, is dat de totale tijd van het nummer word weergegeven, en de tijd dat deze al bezig is met spelen.
Ik heb ook geprobeerd om zoveel mogelijk comments te gebruiken, zodat het misschien wat makkelijker is voor jullie om de code te begrijpen. *correct me if I'm wrong :)*
nu is mijn vraag aan jullie natuurlijk, of jullie weten hoe ik dit kan oplossen :)
Alvast bedankt,
Stef Roelofs
** Als deze helemaal klaar is, zal ik proberen om er een tutorial over te maken :#
Ik zit met een lastig probleem, en kom er helaas niet uit. Voordat ik het ga uitleggen, moet ik er wel bij zeggen dat ik niet heel erg bekend ben met AS. Simpele code's kan ik maken en ontcijferen, maar als het ingewikkelder word, word het voor mij ook wat lastiger. Ik heb het grootste gedeelte ook gemaakt, met behulp van tutorials. Zodra ik verder kom, zal ik deze post updaten
Ik ben nu bezig om een dynamische flash player te maken. Ik maak nu gebruik van de voglende bestanden:
playlist.php
playlist.xml
music_player.swf
playlist.php
Dit bestand leest de map uit waar de mp3's in staan, haalt de extensie .mp3 eraf, deelt de naam op in arties en nummer, en exporteerd dit naar playlist.xml. Ook word hierin de music_player.swf ingeladen. Zodat als de player word geopend, er direct word gekeken of er nieuwe/andere nummers zijn.
playlist.xml
Zoals hierboven al staat, word deze dynamisch aangemaakt door playlist.php, en de structuur is alsvolgd.
<songs>
<song id="01" file="mp3/artiest - nummer.mp3" name="Nummer" artist="Artiest"/>
</songs>
music_player.swf
Hierin word uiteraard de playlist.xml in ingeladen, en weergegeven. Ook zijn er knoppen om een ander nummer te kiezen, en het afspelen te stoppen. Dit werkt ook allemaal. Ook de preloader heb ik na een tijd aan de praat gekregen. Nu kan het debuggen beginnen, om te kijken of er ergens nog kleine fouten in zitten.
de swf is opgebouwd uit de volgende onderdelen:
textvak artiest - instance: display_txt
textvak nummer - instance: display2_txt
textvak percent - var: c
mc progressbar - instance: bar_full naam (instance of)*: bar_full
btn prev - instance: btn_rew naam (instance of)*: rewind
btn play - instance: btn_play naam (instance of)*: play
btn stop - instance: btn_stop naam (instance of)*: stop
btn next - instance: btn_fw naam (instance of)*: forward
*Weet niet of deze belangrijk zijn, dus heb ze er voor de zekerheid bij gezet.
met de volgende code:
loader = 2;
trace(loader);
// nieuwe XML aanmaken
playlist = new XML();
playlist.ignoreWhite = true;
// pad van XML
playlist.load("playlist.xml");
// als playlist word geladen, en dit is gelukt
playlist.onLoad = function(success) {
// dan de data uit de XML halen
if (success) {
_global.songfile = [];
_global.songname = [];
_global.songartist = [];
//loopje om alle gegevens binnen te halen.
for (var i = 0; i<playlist.firstChild.childNodes.length; i++) {
_global.songfile[i] = playlist.firstChild.childNodes[i].attributes.file;
_global.songartist[i] = playlist.firstChild.childNodes[i].attributes.artist;
_global.songname[i] = playlist.firstChild.childNodes[i].attributes.name;
// trace(songfile[i]+" "+songartist[i]+" "+songname[i]);
}
}
// als alles is geladen, een nieuwe MC aangemaken genaamt sound_mc
_root.createEmptyMovieClip("sound_mc",1);
// sound_mc is een geluidsbestand
_root.sound_mc.sound_obj = new Sound();
// kies een willekeurig nummer
_global.song_nr = random(songfile.length);
// maak van de gegevens een variabele?
_root.sound_mc.songStarter(songfile[song_nr],songname[song_nr],songartist[song_nr]);
};
// gedeelte hieronder heb ik niet kunnen ontcijferen, maar
// ik weet wel, dat hier de gegevens uit de XML worden ingeladen,
// mp3 word afgespeeld, en naam en artiest van nummer word weergegeven
// in de tekstvakken, leek mij ook logisch om hier de preloader in te plaatsen,
// maar om 1 of andere reden doet hij dat hier niet.
MovieClip.prototype.songStarter = function(file, name, artist) {
this.sound_obj.loadSound(file,false);
// preloader
_root.sound_mc.onEnterFrame = function() {
loaded1 = sound_mc.sound_obj.getBytesLoaded();
total1 = sound_mc.sound_obj.getBytesTotal();
// dit word weergegegeven in de text vakken
c = Math.ceil((loaded1/total1)*100)+"%";
loaded = Math.ceil(loaded1/100)*.1+" kB";
total = Math.ceil(total1/100)*.1+" kB";
var percent = loaded1/total1;
scale = 100*percent;
// Als scale meer als 20 is, geef dan de artiest, en nummer weer in de teksvakken
if (scale>20) {
this._parent.display_txt.text = artist;
this._parent.display2_txt.text = name;
bar_full._xscale = scale;
if (scale == 100) {
loader = 1;
volgende = "ja";
vorige = "ja";
delete this.onEnterFrame;
this.sound_obj.loadSound(file,true);
// Aansturen van de knoppen
i = 2;
j = 1;
trace("vorige: "+vorige);
trace("volgende: "+volgende);
btn_play.onRelease = function() {
if (i == 2) {
trace("doe niets");
} else {
this._parent.sound_mc.sound_obj.loadSound(file,tru e);
i = 2;
j = 1;
trace("start met spelen");
}
};
btn_stop.onRelease = function() {
if (j == 1) {
this._parent.sound_mc.sound_obj.stop();
trace("stop met spelen");
i = 1;
j = 2;
} else {
trace("doe niets");
}
};
btn_fw.onRelease = function() {
if (vorige == "ja" || volgende == "ja") {
(song_nr == songfile.length-1) ? _global.song_nr=0 : _global.song_nr++;
_root.sound_mc.songStarter(songfile[song_nr],songname[song_nr],songartist[song_nr]);
trace("Volgende is in gedrukt, en speeld het volgende nummer.");
volgende = "nee";
vorige = "nee";
}
if (vorige == "nee" || volgende == "nee") {
trace("Volgende is in gedrukt, en doet niets.");
}
};
btn_rev.onRelease = function() {
if (vorige == "ja" || volgende == "ja") {
(song_nr == 0) ? _global.song_nr=songfile.length-1 : _global.song_nr--;
_root.sound_mc.songStarter(songfile[song_nr],songname[song_nr],songartist[song_nr]);
trace("Vorige is in gedrukt, en speeld het vorige nummer.");
vorige = "nee";
volgende = "nee";
}
if (volgende == "nee" || vorige == "nee") {
trace("Vorige is in gedrukt, en doet niets.");
}
};
/// Knoppen houden hier op
}
// Als scale onder 20 is, geef dan "Loading..." weer in het tekstvak
} else {
this._parent.display_txt.text = "Loading...";
this._parent.display2_txt.text = " ";
bar_full._xscale = scale;
}
};
};
Tot nu toe, werkt de balk, het percentage gedeelte, en ook het afspelen, ook werken de knoppen pas, als deze nog niet eerder is ingedrukt (er is geen actie aan de play knop, als er al word afgespeeld)
Het enigste wat ik nu nog zoek, is dat de totale tijd van het nummer word weergegeven, en de tijd dat deze al bezig is met spelen.
Ik heb ook geprobeerd om zoveel mogelijk comments te gebruiken, zodat het misschien wat makkelijker is voor jullie om de code te begrijpen. *correct me if I'm wrong :)*
nu is mijn vraag aan jullie natuurlijk, of jullie weten hoe ik dit kan oplossen :)
Alvast bedankt,
Stef Roelofs
** Als deze helemaal klaar is, zal ik proberen om er een tutorial over te maken :#