Chargement de fichiers audio externes

Flash Player 9 et les versions ultérieures, Adobe AIR 1.0 et les versions ultérieures

Chaque occurrence de la classe Sound permet de charger et de déclencher la lecture d’une ressource audio spécifique. Une application ne peut pas réutiliser un objet Sound pour charger plusieurs sons. Si elle souhaite charger une nouvelle ressource audio, elle doit créer un objet Sound.

Si vous chargez un fichier audio de petite taille (un son clic à associer à un bouton, par exemple), votre application peut créer un objet Sound qui charge automatiquement le fichier audio, comme indiqué ci-dessous :

var req:URLRequest = new URLRequest("click.mp3"); 
var s:Sound = new Sound(req);

Le constructeur Sound() accepte un objet URLRequest comme premier paramètre. Lorsqu’une valeur pour le paramètre URLRequest est fournie, le nouvel objet Sound commence à charger automatiquement la ressource audio spécifiée.

Dans le meilleur des cas, votre application doit surveiller la progression du chargement du son et rechercher les erreurs pendant le chargement. Par exemple, si le son clic est volumineux, il risque de ne pas être totalement chargé lorsque l’utilisateur clique sur le bouton qui déclenche le son. Si vous tentez de lire un son non chargé, une erreur d’exécution risque de se produire. Il est préférable d’attendre la fin du chargement du son avant de permettre aux utilisateurs d’effectuer des actions risquant de lancer la lecture des sons.

Un objet Sound envoie plusieurs événements différents pendant le chargement du son. Votre application peut écouter ces événements pour suivre la progression du chargement et vérifier que le son est complètement chargé avant la lecture. Le tableau suivant répertorie les événements pouvant être envoyés par un objet Sound.

Evénement

Description

open ( Event.OPEN )

Envoyé juste avant le début du chargement du son.

progress ( ProgressEvent.PROGRESS )

Envoyé régulièrement pendant le chargement du son lorsque des données sont reçues du fichier ou du flux.

id3 ( Event.ID3 )

Envoyé lorsque des données ID3 sont disponibles pour un son mp3.

complete ( Event.COMPLETE )

Envoyé lorsque toutes les données de la ressource audio ont été chargées.

ioError ( IOErrorEvent.IO_ERROR )

Envoyé lorsqu’un fichier audio est introuvable ou lorsque le chargement est interrompu avant la réception de toutes les données audio.

Le code suivant illustre la lecture d’un son après son chargement:

import flash.events.Event; 
import flash.media.Sound; 
import flash.net.URLRequest; 
 
var s:Sound = new Sound(); 
s.addEventListener(Event.COMPLETE, onSoundLoaded); 
var req:URLRequest = new URLRequest("bigSound.mp3"); 
s.load(req); 
 
function onSoundLoaded(event:Event):void 
{ 
    var localSound:Sound = event.target as Sound; 
    localSound.play(); 
}

Tout d’abord, l’exemple de code crée un objet Sound sans lui donner de valeur initiale pour le paramètre URLRequest. Ensuite, il écoute l’événement Event.COMPLETE issu de l’objet Sound. La méthode onSoundLoaded() s’exécute alors lorsque toutes les données audio sont chargées. Puis, il appelle la méthode Sound.load() avec une nouvelle valeur URLRequest pour le fichier audio.

La méthode onSoundLoaded() s’exécute lorsque le chargement du son est terminé. La propriété target de l’objet Event est une référence à l’objet Sound. L’appel à la méthode play() de l’objet Sound lance ensuite la lecture du son.

Surveillance du chargement du son

Les fichiers audio peuvent être très volumineux et leur chargement très long. Flash Player et AIR permettent à votre application de lire des sons avant leur chargement complet. Vous pouvez indiquer à l’utilisateur la quantité de données audio ayant été chargées et la quantité de son déjà lue.

La classe Sound envoie deux événements permettant d’afficher facilement la progression du chargement d’un son : ProgressEvent.PROGRESS et Event.COMPLETE . L’exemple suivant indique comment utiliser ces événements pour afficher les informations de progression concernant le son en cours de chargement :

import flash.events.Event; 
import flash.events.ProgressEvent; 
import flash.media.Sound; 
import flash.net.URLRequest; 
 
var s:Sound = new Sound(); 
s.addEventListener(ProgressEvent.PROGRESS, onLoadProgress); 
s.addEventListener(Event.COMPLETE, onLoadComplete); 
s.addEventListener(IOErrorEvent.IO_ERROR, onIOError); 
 
var req:URLRequest = new URLRequest("bigSound.mp3"); 
s.load(req); 
 
function onLoadProgress(event:ProgressEvent):void 
{ 
    var loadedPct:uint =         Math.round(100 * (event.bytesLoaded / event.bytesTotal)); 
    trace("The sound is " + loadedPct + "% loaded."); 
} 
 
function onLoadComplete(event:Event):void 
{ 
    var localSound:Sound = event.target as Sound; 
    localSound.play(); 
} 
function onIOError(event:IOErrorEvent) 
{ 
    trace("The sound could not be loaded: " + event.text); 
}

Ce code crée d’abord un objet Sound puis lui ajoute des écouteurs pour les événements ProgressEvent.PROGRESS et Event.COMPLETE . Une fois que la méthode Sound.load() a été appelée et que les premières données sont reçues du fichier audio, un événement ProgressEvent.PROGRESS a lieu et déclenche la méthode onSoundLoadProgress() .

Le pourcentage des données audio chargées est équivalent à la valeur de la propriété bytesLoaded de l’objet ProgressEvent divisé par la valeur de la propriété bytesTotal . Les mêmes propriétés bytesLoaded et bytesTotal sont disponibles sur l’objet Sound également. L’exemple ci-dessus indique les messages relatifs à la progression du chargement du son, mais vous pouvez facilement utiliser les valeurs bytesLoaded et bytesTotal pour mettre à jour les composants de la barre de progression, tels que ceux intégrés à la structure d’Adobe Flex ou à l’outil de programmation d’Adobe Flash.

Cet exemple indique également comment une application peut reconnaître et répondre à une erreur lors du chargement des fichiers audio. Par exemple, si un fichier audio avec le nom de fichier donné est introuvable, un événement Event.IO_ERROR est envoyé par l’objet Sound. Dans le code précédent, la méthode onIOError() s’exécute et affiche un message d’erreur court lorsqu’une erreur se produit.