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.