Um objeto SoundChannel individual controla os canais estéreos esquerdo e direito para um som. Se um som mp3 for um som monofônico, os canais estéreos esquerdo e direito do objeto SoundChannel conterão formas de onda idênticas.
É possível descobrir a amplitude de cada canal estéreo do som que está sendo reproduzido usando as propriedades
leftPeak
e
rightPeak
do objeto SoundChannel. Essas propriedades mostram a amplitude de pico da própria forma de onda do som. Elas não representam o volume de reprodução real. O volume de reprodução real é uma função da amplitude da onda do som e dos valores de volume definidos no objeto SoundChannel e na classe SoundMixer.
A propriedade pan de um objeto SoundChannel pode ser usada para especificar um nível diferente de volume para cada um dos canais esquerdo e direito durante a reprodução. A propriedade pan pode ter um valor variando de -1 a 1, em que -1 significa que o canal esquerdo reproduz no volume máximo enquanto o canal direito está silencioso e 1 significa que o canal direito reproduz no volume máximo enquanto o canal esquerdo está silencioso. Valores numéricos entre -1 e 1 definem valores proporcionais para os valores dos canais esquerdo e direito e um valor igual a 0 significa que os dois canais são reproduzidos em um nível equilibrado de nível de volume médio.
O código de exemplo a seguir cria um objeto SoundTransform com um valor de volume de 0,6 e um valor de pan de -1 (volume máximo no canal esquerdo e nenhum volume no canal direito). Ele passa o objeto SoundTransform como um parâmetro para o método
play()
que aplica esse objeto SoundTransform ao novo objeto SoundChannel que é criado para controlar a reprodução.
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);
É possível alterar o volume e a panorâmica enquanto um som está sendo reproduzido definindo as propriedades
pan
ou
volume
de um objeto SoundTransform e aplicando esse objeto como a propriedade
soundTransform
de um objeto SoundChannel.
Também é possível definir os valores globais de volume e de pan para todos os sons de uma vez usando a propriedade
soundTransform
da classe SoundMixer, conforme mostrado no exemplo a seguir:
SoundMixer.soundTransform = new SoundTransform(1, -1);
Também é possível usar um objeto SoundTransform para definir os valores de volume e panorâmica para um objeto Microphone (consulte
Captura de entrada do som
) e para objetos Sprite e SimpleButton.
O exemplo a seguir alterna a panorâmica do som do canal esquerdo para o canal direito e vice-versa enquanto o som é reproduzido.
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);
}
Esse código é iniciado carregando um arquivo de som e criando um novo objeto SoundTransform com o volume definido como 1 (volume total) e panorâmica definida como 0 (equilibrada igualmente entre a esquerda e a direita). Em seguida, ele chama o método
snd.play()
, passando o objeto SoundTransform como um parâmetro.
Enquanto o som é reproduzido, o método
onEnterFrame()
é executado repetidamente. O método
onEnterFrame()
usa a função
Math.sin()
para gerar um valor entre -1 e 1, uma faixa que corresponde aos valores aceitáveis da propriedade
SoundTransform.pan
. A propriedade
pan
do objeto SoundTransform é definida como o novo valor e, em seguida, a propriedade
soundTransform
do canal é definida para usar o objeto SoundTransform alterado.
Para executar esse exemplo, substitua o nome do arquivo bigSound.mp3 pelo nome de um arquivo mp3 local. Em seguida, execute o exemplo. Você deve ouvir o volume do canal esquerdo se tornando mais alto enquanto o volume do canal direito se torna mais suave e vice-versa.
Nesse exemplo, o mesmo efeito pode ser obtido definindo a propriedade
soundTransform
da classe SoundMixer. No entanto isso afetará a panorâmica de todos os sons que estão sendo reproduzidos no momento, não apenas o único som que está sendo reproduzido pelo objeto SoundChannel.