Styra ljudvolym och panorering

Flash Player 9 och senare, Adobe AIR 1.0 och senare

Ett individuellt SoundChannel-objekt styr både vänster och höger stereokanal för ett ljud. Om ett MP3-ljud är mono, innehåller de vänstra och högra stereokanalerna för SoundChannel-objektet identiska ljudvågor.

Du kan ta reda på amplituden i varje stereokanal för ljudet som spelas upp med leftPeak- och rightPeak-egenskaperna i SoundChannel-objektet. De här egenskaperna visar maximal amplitud för själva ljudvågen. De representerar inte den faktiska uppspelningsvolymen. Den faktiska uppspelningsvolymen är en funktion för amplituden för ljudvågen och volymvärdena som angetts i SoundChannel-objektet och klassen SoundMixer.

Du kan använda egenskapen pan för ett SoundChannel-objekt för att specificera olika volymnivåer för var och en av de vänstra och högra kanalerna under uppspelningen. Pan-egenskapen kan ha ett värde från -1 till 1, där -1 betyder att den vänstra kanalen spelar på högsta volym medan den högra kanalen är tyst och 1 betyder att den högra kanalen spelar på högsta volym medan den vänstra kanalen är tyst. Numeriska värden mellan -1 och 1 anger proportionella värden för de vänstra och högra kanalvärdena och värdet 0 betyder att båda kanalerna spelar på en balanserad, medelvolymnivå.

I följande kodexempel skapas ett SoundTransform-objekt med ett volymvärde på 0,6 och ett panoreringsvärde på -1 (högsta volym på vänstra kanalen och ingen volym på den högra kanalen). SoundTransform-objektet överförs som en parameter till play()-metoden vilken använder SoundTransform-objektet på det nya SoundChannel-objektet som skapas för att styra uppspelningen.

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

Du kan ändra volym och panorering medan ett ljud spelas upp genom att ange pan- eller volume-egenskaperna för ett SoundTransform-objekt och sedan använda objektet som soundTransform-egenskap för ett SoundChannel-objekt.

Du kan också ange globala volym- och panoreringsvärden för alla ljud på en gång med soundTransform-egenskapen för klassen SoundMixer enligt följande exempel:

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

Du kan också använda ett SoundTransform-objekt för att ange volym- och panoreringsvärden för ett Microphone-objekt (se Hämta ljudindata) och för Sprite-objekt och SimpleButton-objekt.

I följande exempel växlar panoreringen av ljudet från den vänstra kanalen till den högra och tillbaka igen medan ljudet spelas upp.

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

Koden börjar med att läsa in en ljudfil och sedan skapa ett nytt SoundTransform-objekt med volymen inställd på 1 (full volym) och panoreringen på 0 (jämnt balanserat mellan vänster och höger). Sedan anropas metoden snd.play() och SoundTransform-objektet skickas som en parameter.

När ljudet spelas upp körs onEnterFrame()-metoden upprepade gånger. onEnterFrame()-metoden använder Math.sin()-funktionen för generering av ett värde mellan -1 och 1, ett intervall som motsvarar de acceptabla värdena för SoundTransform.pan-egenskapen. Det nya värdet anges för pan-egenskaper i SoundTransform-objektet och kanalens soundTransform-egenskap ställs in att använda det ändrade SoundTransform-objektet.

Om du vill köra det här exemplet byter du ut filnamnet bigSound.mp3 mot en lokal MP3-fil. Sedan kör du exemplet. Nu hör du hur den vänstra kanalvolymen höjs medan den högra kanalvolymen sänks och omvänt.

I det här exemplet kan samma effekt uppnås genom att ange soundTransform-egenskapen för klassen SoundMixer. Men det skulle påverka panoreringen av alla ljud som spelas upp, inte endast ljudet som spelas upp av det här SoundChannel-objektet.