Control de desplazamiento y volumen de sonido

Flash Player 9 y posterior, Adobe AIR 1.0 y posterior

El objeto SoundChannel controla los canales estéreo izquierdo y derecho de un sonido. Si el sonido MP3 es monoaural, los canales estéreo izquierdo y derecho del objeto SoundChannel incluirán formas de onda idénticas.

Se puede conocer la amplitud de cada canal estéreo del objeto que se reproduce mediante las propiedades leftPeak y rightPeak del objeto SoundChannel. Estas propiedades muestran la amplitud máxima de la forma de onda del sonido; no representan el volumen real de la reproducción. El volumen real de la reproducción es una función de la amplitud de la onda de sonido y de los valores de volumen establecidos en el objeto SoundChannel y la clase SoundMixer.

La propiedad pan (desplazamiento) de un objeto SoundChannel puede utilizarse para especificar un nivel de volumen diferente para cada uno de los canales izquierdo y derecho durante la reproducción. Esta propiedad puede tener un valor que oscila entre -1 y 1, donde -1 significa que el canal izquierdo se reproduce al máximo volumen mientras que el canal derecho está en silencio y 1 significa que el canal derecho se reproduce al máximo volumen mientras que el canal izquierdo está en silencio. Los valores numéricos entre -1 y 1 establecen valores proporcionales para los valores de canal izquierdo y derecho, y un valor 0 implica que los dos canales se reproducen a un volumen medio y equilibrado.

En el ejemplo de código siguiente se crea un objeto SoundTransform con un valor de volumen de 0,6 y un valor de desplazamiento de -1 (volumen máximo en el canal izquierdo y sin volumen en el canal derecho). Pasa el objeto SoundTransform como parámetro al método play(), que aplica dicho objeto al nuevo objeto SoundChannel que se crea para controlar la reproducción.

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);

Se puede modificar el volumen y el desplazamiento mientras se reproduce un sonido estableciendo las propiedades pan o volume de un objeto SoundTransform y aplicando dicho objeto como propiedad soundTransform de un objeto SoundChannel.

También se pueden establecer simultáneamente valores globales de volumen y desplazamiento con la propiedad soundTransform de la clase SoundMixer, como se muestra en el ejemplo siguiente:

SoundMixer.soundTransform = new SoundTransform(1, -1);

Además, se puede utilizar un objeto SoundTransform para establecer los valores de volumen y desplazamiento de un objeto Microphone (véase Captura de entradas de sonido) y de los objetos Sprite y SimpleButton.

En el ejemplo siguiente se alterna el desplazamiento del sonido del canal izquierdo al derecho, y a la inversa, mientras se reproduce el sonido.

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); 
}

Este código se inicia cargando un archivo de sonido y creando un nuevo objeto SoundTransform con el volumen establecido en 1 (volumen máximo) y el desplazamiento establecido en 0 (equilibrio entre los canales izquierdo y derecho). A continuación, llama al método snd.play() y pasa el objeto SoundTransform como parámetro.

Mientras se reproduce el sonido, el método onEnterFrame() se ejecuta repetidamente. El método onEnterFrame() utiliza la función Math.sin() para generar un valor entre -1 y 1, rango que corresponde a los valores aceptables de la propiedad SoundTransform.pan. La propiedad pan del objeto SoundTransform se establece en el nuevo valor y, posteriormente, se establece la propiedad soundTransform del canal para utilizar el objeto SoundTransform alterado.

Para ejecutar este ejemplo, reemplace el nombre de archivo bigSound.mp3 con el nombre de un archivo MP3 local. A continuación, ejecute el ejemplo. Escuchará el aumento del volumen del canal izquierdo mientras disminuye el volumen del canal derecho, y viceversa.

En este ejemplo podría lograrse el mismo efecto estableciendo la propiedad soundTransform de la clase SoundMixer. Sin embargo, se vería afectado el desplazamiento de todos los sonidos en reproducción, no solo el sonido que reproduce este objeto SoundChannel.