MP : Gestion du son et AS3.
Objectifs :
Intégrer des médias son au sein de vos
animations.
Sujet :
Expérimenter
la manipulation du son dans vos animations.
Flash
est optimisé
pour l'utilisation des fichiers son au format MP3.
Trois utilisations sont possibles :
- Importer un fichier son et le placer dans l'animation, au niveau
d'une image clé,
- Créer un objet son à partir d'un son présent dans la bibliothèque,
- Importer un son de manière dynamique en spécifiant un fichier externe
au format MP3.
1.
Intégration du son dans une animation.
a.
Importation et paramétrage d'un média son.
Le logiciel Flash permet d'importer le
média son aux formats WAV (Windows), AIFF (Mac)
et MP3.
Pour
importer un média son :
Utilisez : Fichier >
Importer > puis sélectionnez le
fichier son. Le
fichier
sera placé dans la bibliothèque.
Pour accéder aux propriétés du son :
Sélectionnez le son dans la bibliothèque et accédez aux
propriétés (à partir du menu contextuel en utilisant le bouton droit de
la souris sur l'intitulé du son).
Par défaut,
le son conserve son format d'enregistrement d'origine. Afin de réduire
le poids du média, vous pouvez le compresser. Au final, le logiciel Flash effectue
une compression du son au format MP3, ce qui permet de réduire le poids
du média jusqu'à 90% de sa taille initiale, et donc réduire le
poids de
l'animation.
Pour modifier les paramètres de
compression, choisissez (à la place de "par défaut") MP3 puis
modifiez les paramètres.
Pour
définir les paramètres de compression de manière générale,
c'est-à-dire pour tous les sons d'une animation :
- Utilisez Fichier > Paramètres de publication,
puis accédez à l'onglet flash.
A partir de cette fenètre, modifiez les paramètres du son
(la différence entre son d'événement et son en flux continu sera
abordée par la suite).
Tester
la compression spécifiée :
Evidemment, la compression peut engendrer une perte de qualité. Le
meilleur moyen est de tester le résultat.
- A
partir de la fenêtre propriété du son, cliquez sur le bouton tester.
- A partir des paramètres de publication, validez puis publiez votre
animation (voir ci-dessous).
b. Ajout d'un son
dans une animation.
Ajout
d'un
son :
L'ajout de son
dans une animation peut se faire directement dans un scénario. La
méthode la plus souple consiste à créer un nouveau calque, calque qui
sera dédié au son.
- Importez un média son,
- Ouvrez la bibliothèque,
- Créez un nouveau calque dans le
scénario,
- Sélectionnez une image clé dans ce calque,
- Sélectionnez le son dans la bibliothèque et glissez-le sur la scène,
ou précisez les informations par l'intermédiaire de l'inspecteur de
propriétés.
Le
son sera lu lorsqu'une tête de lecture passera sur l'image clé dans
laquelle le son a été placé. Vous pouvez donc placer les sons dans le
scénario principal ou dans celui d'un symbole. Si le son est placé dans
un symbole, le son sera lu lorsqu'une occurrence de ce symbole sera
traitée.
Vous pouvez jouer plusieurs sons
simultanément. Utilisez pour cela, un calque par son : chaque
calque fonctionnera alors comme une piste son indépendante.
c. Lecture d'un
son.
Plusieurs options de lecture sont disponibles. Pour accéder à ces options, sélectionnez l'image-clé dans laquelle a été placé le son puis accédez au panneau propriétés.
Les paramètres de synchronisation vous
permettent de contrôler la lecture du son. D'une manière générale, le
son est lu à partir du moment où une tête de lecture traite l'image-clé
qui contient le son.
Pour la suite, vous
pouvez modifier les paramètres de synchronisation. Choisissez un des
paramètres suivants (sélection dans le menu déroulant sync).
Vous avez le choix entre les sons
d'événements ou en flux continu.
Les sons d'événements sont à utiliser
lorsque vous voulez simplement lancer un son, sans vouloir le
contrôler :
- musique d'ambiance,
- son en accord avec un événement précis de l'animation.
Le son est lu à partir de l'image-clé. La lecture du son
s'effectue intégralement, quelque soit la construction du scénario.
Ainsi, pour lire un son, il suffit de placer une seule image-clé (un
bloc d'images n'est pas nécessaire).
Utiliser
les propriétés lecture ou stop pour contréler la lecture. Vous pouvez
aussi spécifier la lecture en boucle.
Utilisez 'démarrage'
pour ne pas relancer le son s'il l'est déjà.
Les sons en flux continu permettent de
travailler la synchronisation avec l'?image. Cette option vous oblige à
spécifier, dans le scénario, la durée de lecture du son. En
effet, dans ce cas, le son est lu uniquement si il apparait dans le
scénario par l'intermédiaire d'un bloc d'image.
Avec cette option, vous pouvez
choisir très précisément les moments où le son doit être joué et
spécifier la durée de lecture du son. Pour définir un bloc, il suffit
d'insérer des images "normales". Pour relancer le son, insérez une
image clé.
Les effets :
Même s'il est recommandé de préparer le son en amont, vous
avez accès à différentes opérations comme les fondus ou la gestion du
panoramique. Accédez au paramètres avancés pour effectuer des
opérations plus précises ou complexes.
2.
Créer un objet son et lancer un son présent dans la bibliothèque.
a.
Classes Sound,
SoundTransform et SoundChannel :
objets, méthodes et propriétés.
La classe Sound
permet de manipuler le son dans une animation.
La classe SoundTransform
permet de permet de contrôler l'émission du son (volume et panoramique).
La classe SoundChannel contrôle
le son.
Ces trois classes sont
liées et permettent,
ensemble, de définir le fichier qui doit être joué, de gérer son
émission et de permettre le contrôle de sa lecture.
b.
Création de l'objet Sound :
La
classe Sound
permet
essentillement de créer une ressource et d'y associer un fichier MP3
externe à l'animation. Nous verrons cela ultérieurement.
En
effet, dans cet premier exemple, nous utiliserons un fichier son placé
dans la bibliothèque.
- Importez le fichier son dans la
biblitohèque,
- Accédez aux paramètres de liaisons,
-
Exportez l'objet pour ActionScript et précisez un identifiant (exemple
: 'son1')
(Notez
que la classe de base de cet objet est bel est bien la classe Sound).
Pour
créer une occurrence de ce son, faites allusion à son identifiant.
Exemple :
var
MonSon : son1 = new son1();
Dés lors, un objet Sound sera créé (mais ne sera pas joué : c'est
normal).
La classe Sound
propose une
proprété length
qui nous donne la durée du son.
> Affichez la durée de l'objet Sound que vous venez de créer, à l'aide de la fonction trace(), puis dans un champ de texte dynamique.
c.
Contrôle de lecture :
- Pour
lancer la lecture du son :
Utilisez
la méthode play()
de la classe Sound.
Par rapport à notre exemple, cela donnerait :
// La
variable faisant référence à l'objet
Sound créé est 'MonSon'
MonSon.play();
Si
vous testez, vous remarquez que la lecture
du son se lance.
Cependant, afin de pouvoir
contrôler la lecture et l'émission du son par la suite, nous allons
mémoriser la référence du canal dans lequel le son est émis. Ce canal
de lecture du son (objet SoundChannel)
est
renvoyé automatiquement par la méthode play(),
il nous
suffit donc de récupérer sa référence.
//
Création d'un objet SoundChannel
var
canal_audio:SoundChannel;
//
Appel de la méthode play() et mémorisation de l'obj. SoundChannel
renvoyé
canal_audio = MonSon.play();
- Pour stopper la lecture
du son :
Utilisez
la méthode stop()
de la classe SoundChannel pour interrompre la lecture du son.
>
Proposez un bouton sur la scène qui permette de stopper la lecture du
son.
- Pour
relancer la lecture d'un son :
Il
suffit de réutiliser la méthode play
vue précédemment.
>
Proposez un bouton sur la scène qui permette de lancer la lecture du
son.
Important
:
A chaque
utilisation de la méthode play(),
la lecture du son est relancée. Pour éviter celà, nous avons deux
solutions :
- Stopper la lecture du son
systématiquement avant d'utiliser play()
(stopper
la lecture d'un son qui n'est pas en lecture ne pose pas de problème !)
-
Utiliser une variable pour savoir si le son est en lecture ou non, et
ne relancer la lecture du son que s'il est à l'arrêt.
Pour cette deuxième solution, utilisez les extraits de scripts
suivants :
//
On définit une varibale
'en_lecture' de type 'booléen'
// deux valeurs sont possible : vrai et faux
(true et false).
//
Nous l'utiliserons comme indicateur de
lecture
//
Initalement, le son n'est pas en lecture
:
// nous
donnons donc la valeur false à cette variable
var
en_lecture:Boolean = false;
//Lors
d'un clic sur le bouton de lecture :
// Nous
testons si le son est à l'arret :
if
(en_lecture == false) {
// Si c'est le cas :
// nous pouvons lancer la lecture du son
// Et n'oublions pas de mettre à jour notre
indicateur :
en_lecture = true;
}
// De
même, si l'utilisateur clique sur le
bouton d'arrêt,
//
Nous modifions églament notre indicateur :
en_lecture
= false;
- Mettre
un son en pause :
Cette
fonctionnalité n'existe pas., il va donc falloir la créer.
La
fonction 'pause' permet d'interrompre la lecture du son : c'est donc
l'équivalent de la fonction stop(). La différence consiste simplement à
pouvoir repartir de l'endroit de l'interruption.
Pour cela, il faut
résoudre deux problèmes :
- Comment
connaître le moment de l'interruption (la position de la tête de
lecture du son) ?
- Comment relancer la lecture du son à
partir de cet endroit ?
Regardons
les propriétés et méthodes à notre disposition :
-
La méthode play()
de la classe Sound
propose un paramètre permettant de lancer la lecture d'un son à partir
d'une certaine durée.
- La classe SoundChannel
propose
une proriété, position,
qui permet de connaitre la position actuelle de la tête de lecture du
son.
La
procédure est donc la suivante :
-
lorsque l'utilisateur clique sur le bouton pause, on mémorise la
position de la tête de lecture, puis on stoppe la lecture.
-
Lorsque l'utilisateur remet le son en lecture, on utilise cette
indication de durée lors de l'utilisation de la méthode play().
Ce
qu'il nous faut : une variable (de type Number) qui nous permettra de
mémoriser cette position et de la réutiliser par la suite.
>
Intégrez
cette fonctionnalité de pause.
> Proposez un
seul bouton Play/pause, qui change d'aspect automatiquement .
d.
Contrôle du volume.
La dernière
étape de cet exercice consiste à
proposer un curseur de contrôle du volume.
- Modifer le volume d'un canal audio :
Pour
modifier le volume, nous utiliserons un objet SoundTransform.
Afin
de tester rapidement cette fonctionnalité, vous pouveza ajouter cet
extrait de script :
//
Création d'un objet SoundTransform
var
trans:SoundTransform = new SoundTransform();
//
Modification de sa propriété 'volume'
trans.volume
= 0.2;
// Transfert de
l'objet vers la propriété soundTransform du canal :
canal_audio.soundTransform
= trans;
La classe SoundTransform
propose une propriété 'volume' qui permet de définir ... le volume. Les
valeurs que l'on peut proposer sont comprises entre 0 et 1. Nous devons
passer par un objet soundTransform
car il n'est pas possible
de modifier directement les propriétés du canal.
- Boutons pour augmenter et réduire le
volume.
Une
première manipulation simple qui peut être effectuée consiste à
proposer deux boutons, 'plus' et 'moins' pour augmenter et diminuer le
volume.
Voici à quoi pourrait ressembler le
script pour diminuer le volume :
// On crée un objet SoundTransform
// Qui
prend comme valeur, celui du canal son
var
trans:SoundTransform = canal_audio.soundTransform;
// On teste le volume actuel :
if
(trans.volume>0){
// S'il
est supérieur à 0, on le diminue de
0.1
trans.volume
= trans.volume - 0.1;
}
//
On copie notre objet SoundStransform dans
celui du canal.
canal_audio.soundTransform =
trans;
-
Mise en place d'un curseur pour régler le volume :
Le
principe d'une glissière est le suivant :
- on permet à
l'utilisateur de déplacer un curseur dans un espace restreint,
-
En fonction de la position du curseur, on calcule une autre valeur.
Dans
le cas présent, une distance en pixel sera convertie en
nombre compris entre 0 et 1, et utilisée pour définir le volume.
3.
Importer un son de
manière dynamique.
Comme pour la manipulation précédente, commencez par créer
un objet son.
a.
Chargement du Son :
Précisez le fichier
mp3 à charger, par l'intermédiaire d'un objet URLRequest, lors de la création de
l'objet Sound
b.
Gestion du chargement :
Vous pouvez gérer les événements Event.COMPLETE et
ProgressEvent.PROGRESS.
c. Curseur de lecture.
Vous pouvez marquer la position de la tête de lecture en
utilisant les propriétés suivantes :
- SoundChannel.position
: durée écoulée de la
lecture du son,
- Sound.length
: durée du fichier son.