Controle do volume e do panorama do som

Flash Player 9 e posterior, Adobe AIR 1.0 e posterior

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.