重要なお知らせ: このブログの更新は終了しました!詳しくはこちら "ブログ移転しました。" をご覧ください。

AS3:全体のサウンド制御 音量を0にする


コンテンツ全体の音量(や音関連) の調整は

AS2まででいうところの
var mySound = new Sound(_root);
mySound.setVolume(0);
※上の例は音量を0にしている

AS2まででは、MovieClipをSoundクラスに渡してnewし
それにたいしてsetVolumeでvolumeをコントロール!
渡したMovieClipの下位階層すべてのサウンドがコントロールできる
というスタイルだった

AS3では….

グローバルなサウンドのコントロールは
flash.media.SoundMixer クラスを使って制御するよう

import flash.media.*;
var mySoundTransform = SoundMixer.soundTransform
mySoundTransform.volume=0;
SoundMixer.soundTransform = mySoundTransform;

注意したいのは
SoundMixer.soundTransform.volume=0;
としないコト
一度変数にSoundMixer.soundTransformを代入する
例のようなスタイルでやること

AS2の時のようにMCの階層でサウンド制御をするのは
簡単にはいかなそうかなぁ…?!

まあいいや
とりあえず、Classにしてみるとこんな感じ

package {

import flash.media.*;

public class GlobalSound{

private static var sf:SoundTransform;

/*
* public
*/

public static function set volume(n:Number){
getST().volume=n;
SoundMixer.soundTransform = getST();
}

public static function get volume():Number{
return getST().volume;
}

/*
* private
*/

private static function getST():SoundTransform{
if(!sf) sf = SoundMixer.soundTransform;
return sf;
}

}
}

追記:

feb19.jp blogさんのエントリがあった
AS3で音のボリュームやパンを操作する

SoundMixerのsoundTransform じゃなくて、rootのsoundTransform をコントロール!
flash.display.SpriteにsoundTransform がありました!

これでこれまでのスタイル(親でコントロール、親にコントロールされる)ができる

コメントをどうぞ