Forums Développement Multimédia

Les formations Mediabox
Les formations Mediabox

Charger et lire un son MP3 en ActionScript 3

Compatible ActionScript 3. Cliquer pour en savoir plus sur les compatibilités.Par tannoy (Antony Chauviré)

Article écrit le 17/07/2008 13:06.
Par tannoy ( Antony Chauviré ).

Nous allons à travers ce tutorial voir les possibilités que nous offre l’ActionScript 3 pour la gestion du son.

Problèmatique

  • Chargement et lecture d’un son externe au format MP3
  • Affichage des informations du son (titre, auteur, album…)

Solution

L’ActionScript 3, au travers de la classe Sound, ne prend en charge qu’un format unique : le format MP3.

Adobe AIR et Flash Player 9.0.115.0 supportent les fichiers dérivés du standard MPEG-4 incluant les formats F4V, MP4, M4A, MOV, MP4V, 3GP.

Chargement et lecture d’un son externe au format MP3

La classe de base pour la gestion du son en ActionScript 3 est la classe Sound.

Elle vous permet de créer un objet Sound, de charger et de lire un fichier MP3 externe dans cet objet, de fermer le flux audio et d’accéder aux données relatives au son (nombre d'octets que contient le flux, informations sur les métadonnées ID3, etc.).

Création d’un objet Sound

Le constructeur de la classe Sound peut prendre un premier paramètre correspondant à l’url du fichier MP3 à charger.

Ce premier paramètre est un objet de type URLRequest dans lequel on indique sous forme de chaîne de caractères, l’url absolue ou relative du fichier MP3 à charger.

Dans ce cas de figure, la méthode load() de l’objet Sound est automatiquement évoquée.

 var son:Sound = new Sound(new URLRequest("sons/Break on Through.mp3")); 

Si vous ne transmettez pas un objet URLRequest au constructeur Sound, vous devez appeler la méthode load() de l’objet Sound, sans quoi le flux ne sera pas chargé.

 var son:Sound = new Sound();
son.load(new URLRequest("sons/Break on Through.mp3")); 

Lecture du son

Le chargement va se faire en streaming http. La méthode play() de la classe Sound va permettre de lancer la lecture du son dès que suffisamment de données seront chargées.

 son.play();// lecture du son

Gestion de la mémoire tampon

La mémoire tampon d’un objet Sound permet de gérer la réception et le stockage de données audio avant leur lecture.

Celui-ci attend de disposer au moins de cette quantité de données avant de commencer la lecture ou avant de reprendre la lecture après une interruption réseau. La valeur par défaut est 1 000 (une seconde).

Cette mémoire tampon, ou buffer, peut être définie dans le constructeur de l’objet Sound.

Ce second paramètre est un objet de type SoundLoaderContext dans lequel on indique la valeur en millisecondes de la mémoire tampon.

 var son:Sound = new Sound(new URLRequest("sons/Break on Through.mp3"), new SoundLoaderContext(3000)); 

Si vous ne transmettez pas un objet URLRequest au constructeur Sound, l’objet SoundLoaderContext sera transmis à la méthode load().

var son:Sound = new Sound();
son.load(new URLRequest("sons/Break on Through.mp3"), new SoundLoaderContext(3000));//L'url du son est transmise dans la méthode load() 

Affichage des informations du son

Un son MP3 peut contenir des métadonnées appellées ID3. Ces métadonnées permettent d'avoir des informations sur le contenu du fichier comme le titre, le nom de l'interprète, ou encore la date de sortie.

Flash Player 9 prend en charge les balises ID3 2.0. Vous retrouverez plus d’informations à ce sujet sur le site officiel iD3 : http://www.id3.org/.

L’événement Event.ID3 est distribué par un objet Sound lorsque des données ID3 sont disponibles pour un son MP3.

Nous allons abonner notre objet Sound à l’événement Event.ID3 afin de pouvoir récupérer dans le gestionnaire d’événements nommé getInfosID3, les informations (titre, interprète…) de notre son.

 son.addEventListener(Event.ID3, getInfoID3); //abonnement à l'événement Event.ID3

La propriété id3 de la classe Sound permet d’accéder aux métadonnées d’un son. Ces métadonnées sont toutes accessibles par leur nom de propriété ID3 2.0.

Par exemple, Sound.id3.TPE1 renvoie le nom de l’artiste alors que Sound.id3.TIT2 renvoie le nom de la chanson.

Pour les informations de base (Titre de l’Album, Interprète, Genre, Nom de la chanson), une classe ActionScript 3, la classe ID3Info, a été créée afin de facilement accéder à ces infos aux travers des propriétés de la classe.

En effet, il peut être plus simple pour récupérer le nom d’une chanson d’utiliser ID3Info.songName plutôt que Sound.id3.TIT2.

La classe ID3Info contient des propriétés qui reflètent les métadonnées ID3.

Un objet ID3Info est accessible via la propriété id3 de la classe Sound.

Vous retrouverez toutes les balises ID3 2.0 prises en charge dans le fichier PDF joint. Les propriétés qui ont une équivalence ActionScript sont consultables dans l’aide à travers la classe ID3Info.

Le gestionnaire d’événements getInfoID3 va récupérer le son chargé à travers la propriété currentTarget de l’objet Event. Grâce à la propriété id3 du son et son objet ID3Info, on pourra afficher les informations de base du son.

Les balises ID3 ne possédant pas d’équivalence ActionScript, comme par exemple la durée du son, seront récupérer directement à partir de la propriété id3 et du nom de la balise.

 function getInfoID3(evt:Event):void
{
	var sonMp3:Sound = evt.currentTarget as Sound;//Objet Sound abonné à l'événement
 
	//Exemple de balises ID3 ayant une correspondance ActionScript
	var id3Info:ID3Info = sonMp3.id3;
	trace("Album : " + id3Info.album + "\n","Artiste : " + id3Info.artist + "\n", "Chanson : " + id3Info.songName + "\n", "Année : " + id3Info.year + "\n");
 
	//Exemple de balise ID3 n'ayant pas de correspondance ActionScript
	trace("Durée : " + sonMp3.id3.TLEN);
} 

Vous trouverez en pièces jointes un exemple en programmation procédurale (ActionScript placé sur une image clé) et un exemple en programmation Objet (ActionScript placé dans une classe du Document).

En savoir plus