swf全体でのサウンド制御

AS3.0ではサウンド制御も変更されていて、基本的にSoundクラスとSoundChannelクラスを使う。例えば、外部mp3を再生する場合は。こんな感じ。

var sd_song:Sound;
var sd_channel:SoundChannel;

function xInitSound_song():void {
sd_song = new Sound();
var url:String = “mp3/” + “Pissism-Blade.mp3”;
var urlReq:URLRequest = new URLRequest(url);

sd_song.addEventListener(Event.COMPLETE,onCompleteSound_load);
sd_song.load(urlReq);
}

function onCompleteSound_load(evt:Event):void {
trace(“—ロード完了”,evt.target);
}

function xStartSound_song(evt:MouseEvent):void {
sd_channel = sd_song.play();
}

xInitSound_song();
btn_play.addEventListener(MouseEvent.CLICK,xStartSound_song);

で、使用しているチャンネルの音量は、SoundChannel.soundTransform.volumeで制御することになるのだけれど、

function xVolume0_song(evt:MouseEvent):void {
var st:SoundTransform = sd_channel.soundTransform
st.volume = 0
sd_channel.soundTransform = st
}

と書いても、サウンド再生中は制御できる(volume=0になる)けど、停止しているときに0にしても再び再生するとvolumeは0にはならない。要はSoundChannelのsoundTransformは再生しているSoundクラスに対してのみ有効ということらしい。SoundChannelという器の設定ではないんですね。
コレだと全体の音量制御ができない。いろいろ検索してみたら、SoundMixer.soundTransformで制御すると、swf全体の制御が出来るらしい。

function xVolume0_song(evt:MouseEvent):void {
var st:SoundTransform = SoundMixer.soundTransform;
st.volume = 0;
SoundMixer.soundTransform = st;
}

SoundMixerクラスを使うことで、swf全体のサウンド制御ができ、かつサウンドの再生・停止に依存せずに音量制御ができる。
検索中に下記サイトでこの辺の制御をクラス化したものを発見。コレ、便利そう。