Un objet SoundChannel individuel contrôle les canaux stéréo gauche et droit pour un son. Si un son mp3 est un son mono, les canaux stéréo gauche et droit de l’objet SoundChannel contiennent des courbes audio identiques.
Vous pouvez connaître l’amplitude de chaque canal stéréo du son lu à l’aide des propriétés
leftPeak
et
rightPeak
de l’objet SoundChannel. Ces propriétés indiquent l’amplitude de crête de la courbe audio du son. Elles ne représentent pas le volume de lecture réel. Le volume de lecture réel est une fonction de l’amplitude de l’onde acoustique et des valeurs de volume définies dans l’objet SoundChannel et la classe SoundMixer.
Vous pouvez utiliser la propriété pan d’un objet SoundChannel pour indiquer un niveau de volume différent pour chacun des canaux gauche et droit pendant la lecture. La propriété pan peut avoir une valeur comprise entre -1 et 1, où -1 signifie que le canal gauche lit à volume maximal alors que le canal droit est muet, et 1 signifie que le canal droit lit à volume maximal alors que le canal gauche est muet. Les valeurs numériques comprises entre -1 et 1 définissent des valeurs proportionnelles pour les valeurs des canaux gauche et droit, et une valeur de 0 signifie que les deux canaux lisent à un niveau de volume moyen, équilibré.
L’exemple de code suivant crée un objet SoundTransform avec une valeur de volume de 0,6 et une valeur de balance horizontale de -1 (volume de canal gauche maximal et aucun volume de canal droit). Il transmet l’objet SoundTransform comme paramètre à la méthode
play()
, qui l’applique au nouvel objet SoundTransform créé pour contrôler la lecture.
var snd:Sound = new Sound(new URLRequest("bigSound.mp3"));
var trans:SoundTransform = new SoundTransform(0.6, -1);
var channel:SoundChannel = snd.play(0, 1, trans);
Vous pouvez modifier le volume et la balance pendant la lecture d’un son en définissant les propriétés
pan
ou
volume
d’un objet SoundTransform puis en appliquant cet objet comme propriété
soundTransform
d’un objet SoundChannel.
Vous pouvez également définir des valeurs de balance et de volume global pour tous les sons à la fois à l’aide de la propriété
soundTransform
de la classe SoundMixer, comme l’indique l’exemple suivant :
SoundMixer.soundTransform = new SoundTransform(1, -1);
Vous pouvez également utiliser un objet SoundTransform pour définir des valeurs de balance et de volume global pour un objet Microphone (voir
Capture de l’entrée de son
), et pour des objets Sprite et SimpleButton.
L’exemple suivant modifie la balance horizontale du son du canal gauche au canal droit et de nouveau lors de la lecture du son.
import flash.events.Event;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.media.SoundMixer;
import flash.net.URLRequest;
var snd:Sound = new Sound();
var req:URLRequest = new URLRequest("bigSound.mp3");
snd.load(req);
var panCounter:Number = 0;
var trans:SoundTransform;
trans = new SoundTransform(1, 0);
var channel:SoundChannel = snd.play(0, 1, trans);
channel.addEventListener(Event.SOUND_COMPLETE, onPlaybackComplete);
addEventListener(Event.ENTER_FRAME, onEnterFrame);
function onEnterFrame(event:Event):void
{
trans.pan = Math.sin(panCounter);
channel.soundTransform = trans; // or SoundMixer.soundTransform = trans;
panCounter += 0.05;
}
function onPlaybackComplete(event:Event):void
{
removeEventListener(Event.ENTER_FRAME, onEnterFrame);
}
Ce code commence par charger un fichier audio puis crée un objet SoundTransform avec un volume défini sur 1 (volume maximal) et une balance définie sur 0 (balance équilibrée entre gauche et droite). Il appelle ensuite la méthode
snd.play()
en transmettant l’objet SoundTransform comme paramètre.
Lors de la lecture du son, la méthode
onEnterFrame()
s’exécute de façon répétée. La méthode
onEnterFrame()
utilise la fonction
Math.sin()
pour générer une valeur comprise entre -1 et 1 (plage qui correspond aux valeurs acceptables de la propriété
SoundTransform.pan
). La propriété
pan
de l’objet SoundTransform est définie sur la nouvelle valeur, puis la propriété
soundTransform
du canal est définie pour utiliser l’objet SoundTransform modifié.
Pour exécuter cet exemple, remplacez le nom de fichier bigSound.mp3 par le nom d’un fichier mp3 local. Exécutez ensuite l’exemple. Le volume du canal gauche devrait augmenter quand celui du canal droit diminue, et vice-versa.
Dans cet exemple, le même effet peut être obtenu en définissant la propriété
soundTransform
de la classe SoundMixer. Néanmoins, la balance de tous les sons en cours de lecture est affectée (pas seulement le son lu par cet objet SoundChannel).