Volume en panning voor geluid instellen

Flash Player 9 of hoger, Adobe AIR 1.0 of hoger

Eén specifiek object SoundChannel bestuurt zowel het linker- als rechterstereokanaal voor een geluid. Als een MP3-geluid een monogeluid is, bevatten het linker- en rechterstereokanaal van het object SoundChannel identieke geluidsgolven.

U kunt de amplitude van elk stereokanaal van het geluid dat wordt afgespeeld, opvragen via de eigenschappen leftPeak en rightPeak van het object SoundChannel. Deze eigenschappen geven de piekamplitude van de geluidsgolf zelf aan. Hiermee wordt niet het feitelijke afspeelvolume aangegeven. Het feitelijke afspeelvolume is een functie van de amplitude van de geluidsgolf en de volumewaarden die zijn ingesteld in het object SoundChannel en de klasse SoundMixer.

De eigenschap pan van een object SoundChannel kan worden gebruikt om aparte volumeniveaus op te geven voor het afspelen van het linker- en rechterkanaal. De eigenschap pan kan een waarde tussen -1 en 1 hebben, waarbij -1 betekent dat het linkerkanaal met maximaal volume wordt afgespeeld terwijl het rechterkanaal wordt gedempt, en 1 betekent dat het rechterkanaal met maximaal volume wordt afgespeeld terwijl het linkerkanaal wordt gedempt. Met numerieke waarden tussen –1 en 1 worden proportionele waarden voor de waarden van het linker- en rechterkanaal ingesteld, en bij de waarde 0 worden beide kanalen met hetzelfde, middelhoge volumeniveau afgespeeld.

In het volgende voorbeeld wordt een object SoundTransform met volumewaarde 0,6 en panwaarde -1 gemaakt (volume van linkerkanaal maximaal en rechterkanaal gedempt). Het object SoundTransform wordt doorgegeven als parameter aan de methode play() , waarmee dat object SoundTransform wordt toegepast op het nieuwe object SoundChannel dat wordt gemaakt ter besturing van het afspelen.

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

U kunt volume en panning wijzigen terwijl een geluid wordt afgespeeld door de eigenschap pan of volume van een object soundTransform in te stellen en dat object vervolgens toe te passen als de eigenschap soundTransform van een object SoundChannel.

U kunt ook algemene waarden voor volume en pan instellen die voor alle geluiden tegelijk worden gebruikt, door gebruik te maken van de eigenschap soundTransform van de klasse SoundMixer. In het volgende voorbeeld ziet u hoe u dit kunt doen:

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

U kunt ook een object SoundTransform gebruiken om waarden voor volume en pan in te stellen voor een object Microphone (zie Geluidsinvoer vastleggen ) en voor objecten Sprite en SimpleButton.

In het volgende voorbeeld wordt panning van het geluid afgewisseld van het linker- naar het rechterkanaal en terug, terwijl het geluid wordt afgespeeld.

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

Deze code begint met het laden van een geluidsbestand, waarna er een nieuw object SoundTransform wordt gemaakt met volume ingesteld op 1 (maximaal volume) en pan ingesteld op 0 (gelijkmatige verdeling tussen links en rechts). Daarna wordt de methode snd.play() aangeroepen, waarbij het object SoundTransform als parameter wordt doorgegeven.

Terwijl het geluid wordt afgespeeld, wordt herhaaldelijk de methode onEnterFrame() uitgevoerd. De methode onEnterFrame() gebruikt de functie Math.sin() om een waarde tussen -1 en 1 te genereren, zodat de waarde binnen het bereik van aanvaardbare waarden voor de eigenschap SoundTransform.pan valt. De eigenschap pan van het object SoundTransform wordt ingesteld op de nieuwe waarde, waarna de eigenschap soundTransform van het kanaal zodanig wordt ingesteld dat het aangepaste object SoundTransform wordt gebruikt.

Als u dit voorbeeld wilt uitvoeren, vervangt u de bestandsnaam bigSound.mp3 door de naam van een lokaal MP3-bestand. Vervolgens voert u het voorbeeld uit. U zou dan het volume van het linkerkanaal hoger moeten horen worden, terwijl het volume van het rechterkanaal lager wordt, en omgekeerd.

In dit voorbeeld kan hetzelfde effect worden bereikt door de eigenschap soundTransform van de klasse SoundMixer in te stellen. Dit zou echter invloed hebben op de panning van alle geluiden die op dat moment worden afgespeeld, en niet alleen op het geluid dat door dit object SoundChannel wordt afgespeeld.