Administrateur Systèmes d'Information mais aussi Développeur Web.
Passionné par plein de choses :)

Arnaud Bosquet

Administrateur Systèmes d'Information / Dev Web / Tennis

Un lecteur MP3 en AS3 (avec classes)

Même si nous avons eu que très peu de cours de Flash cette année, nous devions rendre à la fin du trimestre un lecteur MP3 codé en AS3 avec des classes.

Celui-ci devait prendre en compte une playlist gérée par à un fichier xml et pleins d’option que l’on trouve sur un tas de player identique. Je mets mes sources à disposition car j’ai bien commenté le code et je me dis que ça pourra peut être servir à quelqu’un.

Si vous voulez tester mon lecteur, c’est par là

Pour télécharger mes sources, (fichiers .as, .fla,…) c’est par ici
Les sources sont aussi dispo dans la suite…

– Fichier Main.as :

package {
 
	import flash.display.*;
	import flash.events.*;
	import flash.net.*;
	import flash.net.URLRequest.*;
 
	public class Main extends Sprite {
		public static var largeur:int;
		public static var hauteur:int;
		public static var scene:Stage;
 
		public function Main():void {
			largeur = stage.stageWidth;
			hauteur = stage.stageHeight;
			scene = stage;
 
			var chargeurXML:URLLoader = new URLLoader();
			chargeurXML.dataFormat = URLLoaderDataFormat.TEXT;
			chargeurXML.load(new URLRequest("../XML/listeMusic.xml"));
			chargeurXML.addEventListener(Event.COMPLETE, gestionXml);
		}
		private function gestionXml(e:Event):void {
			try {
				var donneesLues:XML = new XML(e.target.data);
				var nbElt:int = donneesLues.elements("titre").length();
				var listeURL:Array = new Array(nbElt);
			//trace(nbElt);
				for(var i:int=0; i

– Fichier LecteurV2.as :

package {
 
	import flash.display.*;
	import flash.events.*;
	import flash.media.*;
	import flash.net.*;
	import flash.geom.*;
	import fl.events.ListEvent;
	import fl.controls.List;
 
	public class LecteurV2 extends Sprite
	{
		//______________________________________________________le controleur (nom du controleur en clip)
		private var lecteurMP3:ControleurClp;
		private var reflet:Reflet;
 
		private var music:Sound;
		private var gestion_music:SoundChannel;
		private var changeVolume:SoundTransform;
		private var infoSon:String;
		private var music_time:Number = 0;
		private var initX:Number;
		private var initY:Number;
		private var longueur:Number;
		private var volumeSonore:Number = 1;
		private var cptrMusic:int = 0;
		private var listeMusic:Array;
		private var arepeter:Boolean = false;
 
		//______________________________________________________le constructeur
		public function LecteurV2(liste:Array)
		{
			lecteurMP3 = new ControleurClp;
			listeMusic = liste;
			//On ajoute notre constructeur puis on le place :
			addChild(lecteurMP3);
			lecteurMP3.x = 250;
			lecteurMP3.y = 145;
			//On initialise l'affichage des boutons, des événements associés et on trace la playlist
			initialisation(false, true);
			gestionListener();
			tracePlaylist();
			//On charge le son par rapport à l'indice 'cptrMusic' du tableau 'liste'
			infoSon=listeMusic[cptrMusic];
			chargerSon(infoSon);
		}
 
		private function tracePlaylist():void
		{
			//On parcours le tableau listeMusic
			for (var i:int = 0; i
 (listeMusic.length-1))
			{
				cptrMusic=0;
			}
			//On charge et on initialise la lecture
			infoSon = listeMusic[cptrMusic];
			lecteurMP3.playList.selectedIndex = cptrMusic;
			initialisation(false, true);
			music_time = 0;
			initialisationBarreProgression();
			chargerSon(infoSon);
		}
 
		private function lancerPrecedent(e:MouseEvent):void
		{
			cptrMusic--;
			if (cptrMusic < 0)
			{
				cptrMusic=listeMusic.length-1;
			}
			infoSon = listeMusic[cptrMusic];
			lecteurMP3.playList.selectedIndex = cptrMusic;
			initialisation(false, true);
			music_time = 0;
			initialisationBarreProgression();
			chargerSon(infoSon);
		}		
 
		private function lancerRepetition(e:MouseEvent):void
		{
			//Si on clique sur le bouton répétition, on place le booléen a vrai et on affiche active le bouton repeat
			arepeter = true;
			//trace('repeter la chanson');
			lecteurMP3.repeat.visible = false;
			lecteurMP3.repeaton.visible = true;
		}
 
		private function stopperRepetition(e:MouseEvent):void
		{
			arepeter = false;
			//trace('ne plus répeter');
			lecteurMP3.repeaton.visible = false;
			lecteurMP3.repeat.visible = true;
		}		
 
		private function lancerLecture(e:MouseEvent):void
		{
			//On initialise les boutons de lecture
			initialisation(false, true);
			// On reprend la musique au moment du music_time
			gestion_music = music.play(music_time);
			lecteurMP3.bulleProgress.addEventListener(Event.ENTER_FRAME, progresser);
			gestion_music.addEventListener(Event.SOUND_COMPLETE, chansonsuivante);
			changeVolume.volume = volumeSonore;
			gestion_music.soundTransform = changeVolume;
		}
 
		private function lancerPause(e:MouseEvent):int
		{
			//On initialise les boutons et on stope la musique en placant la valeur temps dans music_time
			initialisation(true, false);
			music_time = gestion_music.position;
			gestion_music.stop();
		}
 
		private function progresser(e:Event):void
		{
			//On calcule l'estimation et on l'applique à l'échelle
			var estimation:int = Math.ceil(music.length/(music.bytesLoaded/music.bytesTotal));
			lecteurMP3.bulleProgress.scaleX = gestion_music.position/estimation;
		}
 
		private function chansonsuivante(e:Event):void
		{
			//Si la chanson n'est pas à réperter alors on incrémente et on passe donc à la chanson suivante
			if (!arepeter)
			{
				cptrMusic++;
			}
			else{
				//Sinon on répète la chanson en n'incrémentant notre indice
				arepeter = false;
				lecteurMP3.repeaton.visible = false;
				lecteurMP3.repeat.visible = true;
			}
			//Si on dépasse la taille du tableau alors on repart sur la première chanson
			if (cptrMusic > (listeMusic.length-1))
			{
				cptrMusic=0;
			}
			//On charge la musique qui doit être
			infoSon = listeMusic[cptrMusic];
			initialisation(false, true);
			music_time = 0;
			initialisationBarreProgression();
			chargerSon(infoSon);
			lecteurMP3.playList.selectedIndex = cptrMusic;
		}
 
		private function reinitialiser(e:Event):void
		{
			//On réinitialise tous les boutons et la barre de progression
			initialisation(true, false);
			initialisationBarreProgression();
		}
 
		private function deplacerCurseur(e:MouseEvent):void
		{
			//On définit une zone de déplacement de curseur en fonction de la longeur
			var zone:Rectangle = new Rectangle(initX, initY, longueur-lecteurMP3.curseur.width, 0);
			lecteurMP3.curseur.startDrag(false, zone);
			lecteurMP3.curseur.addEventListener(MouseEvent.MOUSE_MOVE, surMove);
		}
 
		private function arreterCurseur(e:MouseEvent):void
		{
			//Quand on arrete le curseur, on appelle la fonction surMove
			lecteurMP3.curseur.stopDrag();
			lecteurMP3.curseur.removeEventListener(MouseEvent.MOUSE_MOVE, surMove);
		}
 
		private function surMove(e:MouseEvent):void
		{
			//On calcule le volume sonore en fonction du ratio
			volumeSonore = (lecteurMP3.curseur.x - initX) / longueur;
			changeVolume.volume = volumeSonore;
			gestion_music.soundTransform = changeVolume;
		}
 
		private function lancerMute(e:MouseEvent):void
		{
			// On met le volume sonore à 0 et place le curseur le plus à gauche possible
			initX = lecteurMP3.niveau.x;
			initY = lecteurMP3.niveau.y;
			changeVolume.volume = 0;
			gestion_music.soundTransform = changeVolume;
			lecteurMP3.curseur.x = initX;
			lecteurMP3.curseur.y = initY;
			//On met le bouton mute comme visible
			lecteurMP3.muteon.visible = true;
			lecteurMP3.muteoff.visible = false;
		}
 
		private function stopperMute(e:MouseEvent):void
		{
			initX = lecteurMP3.niveau.x;
			longueur = lecteurMP3.niveau.width;
			changeVolume.volume = 1;
			gestion_music.soundTransform = changeVolume;
			lecteurMP3.curseur.x = initX+1*longueur - lecteurMP3.curseur.width;
			lecteurMP3.muteoff.visible = true;
			lecteurMP3.muteon.visible = false;
		}
	} //Fin de la class
} //Fin du package

7 commentaires

fullflash
28 Jan 2010 à 15:38

SAlut

Simple , propre , bien commenté , j’aime bien… manque juste la possibilité de pouvoir se déplacer dans la barre de progression
A toute.

Mathieu
29 Jan 2010 à 16:21

Génial, ton code est propre, simple est bien commenté.
Il m’a bien aider à réaliser mon propre lecteur (encore plus simple).

Merci

michel
27 Mar 2010 à 6:56

Il manque un curseur pour controler le déroulé de la musique en lecture…peux-tu nous apporter ces quelques lignes à ton code…?

Arnaud
30 Mar 2010 à 8:28

Je n’ai vraiment pas le temps de me repencher dessus.
Désolé, je l’aurais fait avec plaisir sinon.

SAMSAM
25 Avr 2010 à 3:39

Salut,
b’en tu vois , ça bug ton code… comme le mien .. le bouton pause qui ne fonctionne pas ..
les anciens sons, son relu en même temps que le sons encours, amuse toi avec le bouton pause et tu verras .. => pause + nouvelle lecture + pause à nouveau + play .. => Bug..
pour l’instant , je n’ai trouvé de solution .. idem.. (attention hein ! ça marche bien en local, mais pas en ligne … ) . => est ce que c’est un bug pour les utilisateur de pc ?

Arnaud
26 Avr 2010 à 22:15

Pour le bug concernant la pause, c’est étrange.

J’ai pas trop le temps de regarder ça en détail mais à regarder au premier coup d’oeil, c’est surement un souci au niveau de la variable « music_time » dans la fonction « Lancerlecture »

Beber
17 Oct 2013 à 21:05

Salut arnaud,

Un petit Up car ce lecteur est bien fait. Mais comment fait on pour modifier la taille du lecteur en plus petit et comment modifier l’aspect graphique général ?

Merci pour la réponse :)

Répondre