Open-source MP3 Player Class: MusicPlayer (Beta release)

Published by Ronny on December 30th, 2007 in Actionscript, Flash, Open-source, download. 7 Comments

Update: Er is een nieuwe versie van deze klasse die je hier kan vinden. De download van deze versie heb ik verwijderd om die reden.

Na lang wachten heb ik vandaag eindelijk al mijn ditjes en datjes in mijn MusicPlayer class kunnen afwerken.

De player beschikt nu over de volgende properties:

  • Autoplay
  • Playlist laden (XML)
  • De buttonacties instellen
  • 2 progress events (Vooruitgang van inladen van de track, alsook de vooruitgang van de track zelf)
  • Enkele track inladen
  • Repeat
  • ID3 ondersteuning

Wat nog op het programma staat:

  • Shuffle
  • Visualisatie module

Er zijn een aantal wijzigingen in de class gebeurd, waardoor je waarschijnlijk je code zult moeten aanpassen in je huidige projecten. Zo is de import regel iets gewijzigd, gezien de MusicPlayer class zijn eigen events nodig heeft (PlayerEvents). Ik heb de hiƫrarchie dan ook ietje gewijzigd zodat je geen meerdere imports moet uitvoeren.

De code ziet er voortaan zo uit:

  1. import com.nocreativity.playr.*;
  2. var myPlayer:Playr = new Playr();
  3. myPlayer.autoPlay=true;
  4. myPlayer.repeat = true;
  5. myPlayer.volume = 100;
  6. myPlayer.loadPlaylist("playlist.xml");
  7. myPlayer.registerPlayButton(btnPlay);
  8. myPlayer.registerStopButton(btnStop);
  9. myPlayer.registerPauseButton(btnPause);
  10. myPlayer.registerNextButton(btnNext);
  11. myPlayer.registerPreviousButton(btnPrevious);
  12. myPlayer.registerMuteButton(btnMute);
  13. myPlayer.ID3SourceEnabled =true;
  14.  
  15. myPlayer.addEventListener(PlayerEvent.SONGINFO,infoHandler);
  16. myPlayer.addEventListener(PlayerEvent.SONG_PROGRESS,songprogressHandler);
  17. myPlayer.addEventListener(PlayerEvent.LOAD_PROGRESS,loadprogressHandler);
  18.  
  19. function songprogressHandler(e:PlayerEvent):void{
  20. txtSongProgress.text = "song progress: " + e.songprogress;
  21. }
  22. function loadprogressHandler(e:PlayerEvent):void{
  23. txtLoadProgress.text = "load progress: " + e.loadprogress;
  24. }
  25.  
  26. function infoHandler(e:PlayerEvent):void{
  27. txtTrackInfo.text = myPlayer.artist;
  28. txtTrackInfo.appendText(" - " + myPlayer.trackName);
  29. txtTrackInfo.appendText(" (" +myPlayer.album+")");
  30. txtTrackInfo.appendText(" | " + myPlayer.trackDuration);
  31. }

In het bovenstaande voorbeeld is ook de ID3SourceEnabled gebruikt: deze boolean laat je kiezen of je de ID3tag van je MP3 bestanden wilt gebruiken als bron voor de artist, album en trackName eigenschappen. Als je deze waarde op true zet wordt de artist, album en title tag uit je XML bestand genegeerd, en kun je je XML bestand dus gewoon korter maken. Zet je dit op false wordt je XML bestand als bron van deze eigenschappen gebruikt. Dus als je ID3tags niet naar behoren zijn ingevuld is dit een secundaire oplossing.

Ook de XML heeft een kleine wijziging ondergaan: Er is een nieuwe tag bijgekomen (totalTime): de totale tijd (in seconden) die het betreffende liedje duurt. Dus in geval van een track van 3 minuten en 28 seconden komt dat op 208 (3*60+28) uit. Deze waarde moet handmatig ingegeven worden. Het kan ook via ID3tag maar is precies omslachtig… Als iemand de gouden tip heeft is dit welkom.

Download:

De huidige versie kun je hier downloaden.
Een voorbeeld hoe de XML er moet uitzien staat hier.
Een voorbeeld kun je hier downloaden.
De documentatie heb ik nog niet geupdate, maar dat komt er zo snel mogelijk aan.

Naamsvermelding & Gelijk delen Ik release de MusicPlayer class en de PlayerEvent class onder de Creative Commons license. Dat wil zeggen dat je alles in deze classes mag aanpassen zolang je er een verwijzing naar de originele auteur ( ik dus ;) ) in laat staan, en je deze classes met dezelfde rechten verder verdeeld.


Posts that somehow relate to this one:

popular opinion

7 others felt like sharing their feelings about this. Feel free to do so as well.

Peter @ 3:50 - December 30th, 2007

nice one Ronny! Code ziet er proper uit, als ik even mag muggenziften worden over het algemeen class packages volledig in kleine letters geschreven maar je bent daar natuurlijk vrij in.

Misschien leuk om eens te kijken naar Ben Stucki’s ID3Stream en ID3Reader — kan je ook cover image uit de ID3 van je MP3’s halen (als die er in zit natuurlijk) ;)

http://blog.benstucki.net/?p=24

Als je er ooit een AIR versie van maakt kan je trouwens ook de ID3 tags gaan wegschrijven in de MP3. Keep up the good work!

Ronny @ 12:04 - December 30th, 2007

Hey Peter,

Ik kreeg die link gisteren ook van een vriend!
De cover image is een leuke toevoeging! Wist ik niet, thx.
Goed om te weten trouwens, dat je met AIR de ID3tag kan wijzigen.
Ik hoopte namelijk om met AIR een tool te kunnen maken die de MP3 bestanden ging kunnen bewerken zodat je ID3tags klaar zijn, en je zo weinig mogelijk XML moet schrijven (en dan natuurlijk ook gewoon de XML laten genereren die nog nodig is :) )

Bedankt voor je feedback en je tips :)

Evi @ 16:42 - January 1st, 2008

Eerst en vooral vind ik dit super goed gedaan!
Maar ik heb een foutje en aangezien ik niet zo goed weg kan met Actionscript 3 dacht ik het maar eens te vragen.

Ik krijg namelijk volgende fout: Type was not found or was not a compile-time constant: Playerevent
(dit slaat dus op de code die in het fla-bestand staat – line 22, 25 en 29)

Alvast bedankt!

Ronny @ 16:58 - January 1st, 2008

Evi,

Alvast bedankt voor de ‘props’ ;)

Je zult nog de MusicPlayer class en de PlayerEvent class in je ClassPaths moeten opnemen. Als ik het bestand hier opnieuw compile krijg ik de vermelde fouten namelijke niet ;)

Gezien Flash alleen de PlayerEvent class niet herkent zul je deze nog niet op de juiste plaats hebben toegevoegd. Kijk zeker of je het bestand ‘PlayerEvent.as’ in dezelfde map hebt staan als ‘MusicPlayer.as’ ;)

Open-source MP3 Player Class: MusicPlayer at noCreativity.com @ 3:57 - January 12th, 2008

[...] Er is een nieuwe versie van deze klasse die je hier kan vinden. De download van deze versie heb ik verwijderd om die [...]

Frederik Heyninck @ 11:57 - February 24th, 2008

Als ik music.ID3SourceEnabled = false; doe dan krijg ik geen info weer.
Hij neemt niet diegene uit de xml file.

Ronny @ 12:00 - February 24th, 2008

mail me even de FLA en de XML zodat ik van dichterbij kan kijken waar het fout loopt :) (email = senderhas [at] nocreativity.com ;) )

Freedom of speech!

Whatever it is you feel: Tell me! It's for free!