Controllo del volume e del panning audio

Flash Player 9 e versioni successive, Adobe AIR 1.0 e versioni successive

Un singolo oggetto SoundChannel controlla sia il canale sinistro che il canale destro di un file audio stereo. Se un file audio mp3 è mono, i canali sinistro e destro dell'oggetto SoundChannel contengono forme d'onda identiche.

Potete determinare l'ampiezza di ogni canale stereo dell'audio in corso di riproduzione mediante le proprietà leftPeak e rightPeak dell'oggetto SoundChannel. Queste proprietà mostrano l'ampiezza di picco della forma d'onda audio. Non rappresentano quindi il volume di riproduzione effettivo, che è invece una funzione dell'ampiezza della forma d'onda audio e dei valori di volume impostati nell'oggetto SoundChannel e nella classe SoundMixer.

La proprietà pan di un oggetto SoundChannel può essere utilizzata per specificare un livello di volume diverso per ciascuno dei canali (sinistro e destro) durante la riproduzione. La proprietà pan può avere un valore compreso tra -1 e 1, dove -1 indica che il canale sinistro viene riprodotto al volume massimo e il canale destro è silenzioso, mentre 1 indica la situazione opposta. I valori numerici compresi tra -1 e 1 impostano dei valori proporzionali per i canali sinistro e destro, mentre il valore 0 indica che entrambi i canali vengono riprodotti con un livello di volume medio e bilanciato.

Il codice di esempio seguente crea un oggetto SoundTransform con un valore di volume pari a 0.6 e un valore pan pari a -1 (volume massimo per il canale sinistro e canale destro silenzioso). Passa l'oggetto SoundTransform come parametro al metodo play() , che applica tale oggetto SoundTransform al nuovo oggetto SoundChannel che viene creato per controllare la riproduzione.

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

Potete alterare il volume e il panning audio durante la riproduzione impostando le proprietà pan o volume di un oggetto SoundTransform e successivamente applicando tale oggetto come proprietà soundTransform di un oggetto SoundChannel.

È anche possibile impostare simultaneamente i valori globali per il volume e il panning per tutti i file audio mediante la proprietà soundTransform della classe SoundMixer, come mostra l'esempio seguente:

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

Potete inoltre usare un oggetto SoundTransform per impostare i valori di volume e panning per un oggetto Microphone (vedete Rilevamento dell'input audio ) e per gli oggetti Sprite e SimpleButton.

L'esempio seguente alterna la panoramica di un file audio dal canale sinistro a quello destro e viceversa durante la riproduzione.

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

Questo codice inizia caricando un file audio, quindi creando un nuovo oggetto SoundTransform con il volume impostato su 1 (volume massimo) e il panning impostato su 0 (bilanciamento uniforme tra il canale sinistro e destro). Quindi, chiama il metodo snd.play() , passando l'oggetto SoundTransform come parametro.

Durante la riproduzione del suono, il metodo onEnterFrame() viene eseguito ripetutamente. Il metodo onEnterFrame() utilizza la funzione Math.sin() per generare un valore compreso tra -1 e 1, un intervallo che corrisponde ai valori accettabili della proprietà SoundTransform.pan . La proprietà pan dell'oggetto SoundTransform viene impostata sul nuovo valore, quindi la proprietà soundTransform del canale viene impostata per utilizzare l'oggetto SoundTransform modificato.

Per eseguire questo esempio, sostituite il nome del file bigSound.mp3 con il nome di un file mp3 locale, quindi eseguite l'esempio. Potrete udire il volume del canale sinistro aumentare mentre quello del canale destro si attenua, e viceversa.

In questo esempio, lo stesso effetto può essere ottenuto impostando la proprietà soundTransform della classe SoundMixer. Tuttavia, in questo modo si agisce sul panning di tutti i file audio in corso di riproduzione, non solo sul singolo file riprodotto dall'oggetto SoundChannel in questione.