사운드 볼륨 및 패닝 제어

Flash Player 9 이상, Adobe AIR 1.0 이상

개별 SoundChannel 객체는 사운드에 대해 왼쪽 및 오른쪽 스테레오 채널을 모두 제어합니다. mp3 사운드가 모노인 경우, SoundChannel 객체의 왼쪽 및 오른쪽 스테레오 채널에 동일한 파형이 포함됩니다.

SoundChannel 객체의 leftPeak rightPeak 속성을 사용하여 재생 중인 사운드에 대한 각 스테레오 채널의 진폭을 알 수 있습니다. 이러한 속성은 사운드 파형 자체의 피크 진폭을 표시하는 것으로, 실제 재생 볼륨을 나타내지는 않습니다. 실제 재생 볼륨은 SoundChannel 객체 및 SoundMixer 클래스에 설정된 볼륨 값 및 사운드 웨이브 진폭의 함수입니다.

SoundChannel 객체의 팬 속성은 재생 중에 왼쪽 및 오른쪽 채널 각각에 다른 볼륨 수준을 지정하는 데 사용될 수 있습니다. 팬 속성은 -1 ~ 1 범위의 값을 가질 수 있습니다. 여기서 -1은 오른쪽 채널 음을 소거한 상태에서 왼쪽 채널을 최고 볼륨으로 재생한다는 의미이며, 1은 왼쪽 채널 음을 소거한 상태에서 오른쪽 채널을 최고 볼륨으로 재생한다는 의미입니다. -1과 1 사이의 숫자 값은 왼쪽과 오른쪽 채널 값에 대한 비례 값을 설정하며, 0은 양쪽 채널이 균형 있는 중간 볼륨 수준으로 재생된다는 의미입니다.

다음 코드 예제는 볼륨 값이 0.6이고 팬 값이 -1(즉, 왼쪽 채널이 최고 볼륨으로 재생되고 오른쪽 채널은 음소거)인 SoundTransform 객체를 만듭니다. 이 코드는 SoundTransform 객체를 play() 메서드에 매개 변수로 전달하여 재생 제어를 위해 만들어진 새로운 SoundChannel 객체에 해당 SoundTransform 객체를 적용합니다.

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

사운드 재생 도중 SoundTransform 객체의 pan 속성이나 volume 속성을 설정한 다음, 이 객체를 SoundChannel 객체의 soundTransform 속성으로 적용하여 패닝 및 볼륨을 변경할 수 있습니다.

다음 예제에서처럼 SoundMixer 클래스의 soundTransform 속성을 사용하여 한번에 모든 사운드에 대한 전역 볼륨 값과 팬 값을 설정할 수도 있습니다.

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

또는 SoundTransform 객체를 사용하여 Microphone 객체( 사운드 입력 캡처 참조), Sprite 객체 및 SimpleButton 객체에 대해 볼륨 및 팬 값을 설정할 수도 있습니다.

다음 예제에서는 사운드 재생 중에 사운드의 패닝을 왼쪽 채널에서 오른쪽 채널로 교대하고 또 그 반대로 전환합니다.

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

이 코드는 사운드 파일을 로드한 다음 볼륨이 1(최대 볼륨)로, 팬이 0(좌우 밸런스 동일)으로 설정된 새 SoundTransform 객체를 만듭니다. 그런 다음 snd.play() 메서드를 호출하여 SoundTransform 객체를 매개 변수로 전달합니다.

사운드가 재생되는 동안 onEnterFrame() 메서드가 반복적으로 실행됩니다. onEnterFrame() 메서드는 Math.sin() 함수를 사용하여 -1과 1 사이의 값을 생성합니다. 이 범위는 SoundTransform.pan 속성으로 사용할 수 있는 값에 해당합니다. SoundTransform 객체의 pan 속성은 새로운 값으로 설정되고 채널의 soundTransform 속성은 변경된 SoundTransform 객체를 사용하도록 설정됩니다.

이 예제를 실행하려면 bigSound.mp3라는 파일 이름을 로컬 mp3 파일 이름으로 대체합니다. 그리고 예제를 실행합니다. 오른쪽 채널 볼륨이 작아지면서 왼쪽 채널 볼륨이 커지고, 왼쪽 채널 볼륨이 작아지면서 오른쪽 채널 볼륨이 커집니다.

이 예제에서 SoundMixer 클래스의 soundTransform 속성을 설정하여 동일한 효과를 거둘 수 있습니다. 하지만 이 경우 이 SoundChannel 객체에 의해 재생되는 단일 사운드뿐 아니라 현재 재생되는 모든 사운드의 패닝에 영향을 미칩니다.