Sterowanie głośnością dźwięku i panoramowaniem

Flash Player 9 i nowsze wersje, Adobe AIR 1.0 i nowsze wersje

Jeden obiekt SoundChannel steruje zarówno lewym, jak i prawym kanałem stereo dźwięku. Jeśli dźwięk w formacie mp3 jest dźwiękiem monofonicznym, wówczas kanały stereo lewy i prawy obiektu SoundChannel mają identyczne przebiegi.

Amplitudę każdego z kanałów stereo odtwarzanego dźwięku można znaleźć, korzystając z właściwości leftPeak i rightPeak obiektu SoundChannel. Właściwości te ilustrują amplitudę szczytową samego przebiegu fali dźwiękowej. Nie reprezentują one rzeczywistej głośności odtwarzania. Rzeczywista głośność odtwarzania jest funkcją amplitudy fali dźwiękowej oraz wartości głośności ustawionych w obiekcie SoundChannel oraz klasie SoundMixer.

Właściwość panoramowania obiektu SoundChannel można wykorzystać do określenia różnych poziomów głośności odtwarzania dźwięku dla każdego z kanałów. Właściwość panoramowania może przyjmować wartości z zakresu od -1 do 1, gdzie -1 oznacza, że lewy kanał odtwarza dźwięk z najwyższą głośnością, zaś prawy kanał został całkowicie wyciszony. 1 oznacza, że prawy kanał odtwarza dźwięk z najwyższą głośnością, zaś lewy kanał został całkowicie wyciszony. Wartości numeryczne z zakresu od -1 do 1 powodują ustawienie proporcjonalnych wartości dla zarówno lewego jak i prawego kanału, natomiast wartość 0 oznacza, że oba kanały mają wyrównaną, średnią głośność.

Poniższy kod ilustruje tworzenie obiektu SoundTransform z wartością głośności wynoszącą 0,6 oraz wartością panoramowania dźwięku wynoszącą -1 (maksymalna głośność lewego kanału oraz zerowa prawego kanału). Przekazuje on obiekt SoundTransform jako parametr do metody play() co powoduje nałożenie obiektu SoundTransform na nowy obiekt SoundChannel utworzony do sterowania odtwarzaniem.

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

Możliwa jest zmiana głośności oraz panoramowania podczas odtwarzania dźwięku przez ustawienie właściwości pan lub volume obiektu SoundTransform, a następnie nałożenie tego obiektu jako właściwość soundTransform obiektu SoundChannel.

Ponadto można również ustawić głośność globalną i panoramowanie globalne dla wszystkich dźwięków jednocześnie, korzystając z właściwości soundTransform klasy SoundMixer, zgodnie z ilustracją na poniższym przykładzie:

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

Ponadto możliwe jest użycie obiektu SoundTransform do ustawienia wartości głośności i panoramowania dla obiektu Microphone (patrz sekcja Przechwytywanie wejścia dźwiękowego ) oraz dla obiektów Sprite i SimpleButton.

Poniższy przykład ilustruje zmianę panoramowania dźwięku z lewego kanału do prawego oraz z powrotem podczas jego odtwarzania.

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

Omawiany kod rozpoczyna się od załadowania pliku dźwiękowego, a następnie utworzenia nowego obiektu SoundTransform z głośnością ustawioną na wartość 1 (pełna głośność) oraz panoramowaniem ustawionym na wartość 0 (równomierne rozłożenie między kanały lewy i prawy). Następnie wywoływana jest metoda snd.play() przekazująca obiekt SoundTransform pod postacią parametru.

Podczas odtwarzania dźwięku wykonywana jest cyklicznie metoda onEnterFrame() . Metoda onEnterFrame() korzysta z funkcji Math.sin() generującej wartość z przedziału od -1 do 1, odpowiadającego wartościom dopuszczalnym właściwości SoundTransform.pan . Właściwość pan obiektu SoundTransform jest ustawiana na nową wartość, a następnie właściwość soundTransform kanału jest ustawiana tak, aby używała zmienionego obiektu SoundTransform.

W celu uruchomienia tego przykładu należy zastąpić nazwę pliku bigSound.mp3 nazwą lokalnie dostępnego pliku mp3. Następnie można uruchomić przykład. Głośność lewego kanału powinna rosnąć, zaś prawego kanału maleć, i odwrotnie.

W tym przykładzie ten sam efekt można uzyskać, ustawiając właściwość soundTransform klasy SoundMixer. Będzie to miało wpływ na panoramowanie wszystkich obecnie odtwarzanych dźwięków, nie tylko na pojedynczy dźwięk odtwarzany przez obiekt SoundChannel.