Tutoriaux : Contrôler la lecture d'un son
 

1. Introduction

 

On me demande d'expliquer comment procéder pour contrôler la lecture d'un son à l'aide de deux boutons : un premier bouton doit déclencher la lecture du son tandis qu'un deuxième bouton doit permettre de marquer une pause.

L'animation ci-contre vous montre que l'on peut aller un peu plus loin en montrant la position de la tête de lecture...

 
2. Sur la scène principale
 

- Vous pouvez créer deux boutons quelconques ou utiliser ceux qui se trouvent dans la bibliothèque commune : dans le menu "fenêtre", sélectionnez successivement "autres panneaux", "bibliothèques communes", "boutons" puis ouvrez le dossier qui se nomme "Playback".
-  Déposez sur la scène une occurrence du bouton "gel Right". Dans le panneau "propriétés", nommez cette occurrence "btn1". Un clic sur ce bouton déclenchera la lecture de notre son.
- Déposez sur la scène une occurrence du bouton "gel Pause". Dans le panneau "propriétés", nommez cette occurrence "btn2". Un clic sur ce bouton immobilisera la tête de lecture.

 
3. Dans la bibliothèque
 
- Il nous faut bien un son ! Pour gagner du temps, je vous en propose un que vous pouvez télécharger en faisant un clic droit sur le lien suivant : bruitdeau.wav.
-  Importez ce son dans votre bibliothèque : dans le menu "fichiers", sélectionnez "importer" puis "importer dans la bibliothèque" puis parcourez votre disque dur à la recherche de votre fichier wav.
- Dans la bibliothèque de l'animation, faites un clic droit sur le fichier wav, puis cliquez sur "liaison". Dans la boite "propriétés de liaison", cliquez sur la case à cocher "exporter pour ActionScript" et dans le champ "identifiant", saisissez le mot "bruitdeau". Tout est en place, nous pouvons passer au code.
 
4. Le code et l'animation obtenue
 
Dans le panneau "action" de l'image clé n°1, placez le code suivant pour obtenir l'animation ci-dessous.
 
son = new Sound();
son.attachSound("bruitdeau"); 
 
p = 0;
 
btn1.onPress = function() {
if(son.position == son.duration) {p = 0;}
son.start(p/1000);
}
 
btn2.onPress = function() {
son.stop();
p = son.position;
}
 
5. Le code avec ses commentaires
 
On crée un objet son.
son = new Sound();
 
On lie notre objet son au fichier wav qui se trouve dans la bibliothèque et dont l'identifiant de liaison est "bruitdeau".
son.attachSound("bruitdeau");
 
On initialise une variable p qui permettra de définir la position de la tête de lecture (p représente un temps exprimé en millisecondes).
p = 0;
 
Le bouton n°1 est le bouton lecture : nous allons définir l'action d'un clic sur ce bouton. Ce bout de code aurait pu être placé (sous une forme légèrement différente) dans le panneau action du bouton mais je pense qu'il vaut mieux placer l'ensemble du code sur une seule et même image...
btn1.onPress = function() {
 
Les objets son possèdent deux propriétés "position" et "duration" qui sont en lecture seule et qui ressemblent aux propriétés "_currentframe" et "_totalframes" des clips. La propriété "duration" représente la durée du son en millisecondes tandis que la propriété "position" représente la position actuelle de la tête de lecture, autrement dit le temps écoulé depuis la position courante. Si la position actuelle de la tête de lecture est égale à la durée du son, ce qui signifie que le son a été intégralement lu alors p prend la valeur 0.
if(son.position == son.duration) {p = 0;}
 
La fonction start() place la tête de lecture à l'instant p/1000 puis déclenche la lecture du son. On divise p par 1000, car la fonction start() attend un argument exprimé en secondes or p est en millisecondes...
son.start(p/1000);
 
fin de la fonction
}
 
Le bouton n°2 est le bouton pause : un clic sur ce bouton doit stopper la lecture du son et mémoriser la position actuelle de la tête de lecture.
btn2.onPress = function() {
 
La fonction stop() immobilise la tête de lecture.
son.stop();
 
Cette ligne permet de conserver la position de la tête de lecture au moment du clic sur le bouton pause. Ainsi, en cliquant ensuite sur le bouton n°1, la lecture reprendra à cet endroit...
p = son.position;
 
Fin de la fonction
}