feb19.jp

Nobuhiro Takahashi
Designer / Engineer

AS3で音のボリュームやパンを操作する

AS3で音のボリュームやパンを操作する

AS3で音のボリュームやパンを変更するには意外とめんどくさくて、一回SoundTransformを抜き取って、変更して、それをもう一度代入するといった方法をとらないといけません。

しかも、SpriteやMovieClip、SoundChannelやNetStream、そしてSoundMixerなど、場合によっては様々なインスタンスに対するsoundTransformを考えていかなければなりません。

ならば、どのソースにも対応できて、getter/setterでボリュームやパンを変更するためのプロパティを持つクラスを作ればとても便利です。

2008.11.21更新!5行目、6行目、型指定しました。

package {
	import flash.media.SoundTransform;
	public class SoundUtils {
		private var st:SoundTransform;
		private var source:Object;
		public function SoundUtils(src:Object) {
			source = src;
		}
		public function set volume(num:Number):void {
			getSoundTransform().volume = num;
			source.soundTransform = getSoundTransform();
		}
		public function get volume():Number {
			return getSoundTransform().volume;
		}
		public function set pan(num:Number):void {
			getSoundTransform().pan = num;
			source.soundTransform = getSoundTransform();
		}
		public function get pan():Number {
			return getSoundTransform().pan;
		}
		private function getSoundTransform():SoundTransform {
			if (!st) {
				st = source.soundTransform;
			}
			return st;
		}
	}
}

使いかたはこんな感じです。

var su = new SoundUtils(this.root);
su.volume = 0.4;

root以下に含まれるDisplayObjectに配置されている音の音量を変更します。

var su = new SoundUtils(SoundMixer);
su.volume = 0;

SWFのマスターボリュームを0に変更します。

ソースとなるインスタンスを引数に指定して、SoundUtilsインスタンスを生成します。で、そいつのプロパティ、.volumeと.panをいじればOKっていう感じです。

.volumeは、0から1の値を、.panは、-1から1の値を取ります。あ、AS2のノリで.volume = 100とかにすると、えらいことになりますので要注意ですよ(自分はよく.volume = 100とかやってしまって、毎度死にかけてます 苦笑)。

ソースにできるインスタンスはsoundTransformを持っているオブジェクト、つまりSoundChannelやSoundMixer、Sprite、MovieClip、Loader.content、SimpleButton、NetStream、Microphone、VideoPlayer、FLVPlayback、他に使えます。

しかも、プロパティなので、TweenとかTweenerで簡単にトゥイーンできます。例えば、

var su = new SoundUtils(SoundMixer);
Tweener.addTween(su, {time:3, transition:"easenone", volume:0});

3秒かけてマスターボリュームがフェードアウトします。

とかね。

個人的にこれはかなり便利だと思います。自作フレームワークのレギュラー入りですね、これは。

Navigation

prev: 続・Function.call()の使い道
next: 3D物理演算エンジンWOWEngineとPapervision3D 2.0 GreatWhite

Recently Entries