
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秒かけてマスターボリュームがフェードアウトします。
とかね。
個人的にこれはかなり便利だと思います。自作フレームワークのレギュラー入りですね、これは。


コメント (16)
「as3 Sound」でググってこちらのクラスにたどり着きました。使わせていただきましたが、最高に便利です!ありがとうございました!
投稿者: ipuheke | 2008年10月17日 23:24
私も「actionscript3.0 サウンド ボリューム」で検索してこちらにたどり着きました。
初心者の私にとって、非常に勉強になりました。
ありがとうございました。
投稿者: hiro | 2009年07月09日 14:08
Никогда ещё не было так плохо, чтобы не было ещё хуже!
投稿者: Gymnaerojerry | 2010年02月18日 10:43
Женщина может быть загадочной, мужчина — только непонятым…
投稿者: GordorCaday | 2010年02月24日 08:40
Странные существа люди: собираются в семьи, племена, нации, государства и при этом мечтают о свободе.
投稿者: Feestmailla | 2010年02月25日 02:06
Женщина может простить все, кроме невнимания к себе…
投稿者: lallirobbyind | 2010年02月26日 10:38
Если мужчина долго-долго смотрит тебе в глаза — можешь быть уверена: все остальное он уже осмотрел.
投稿者: Zefdyerwary | 2010年02月27日 03:35
Исключительно русское словосочетание: да нет.
投稿者: Gluctultemugh | 2010年03月01日 09:02
Человек как роман: до самой последней страницы не знаешь, чем кончится. Иначе не стоило бы и читать. (Е. Замятин)
投稿者: vewEnfone | 2010年03月02日 02:32
Ты ни в чём не виноват. Не казни себя! Не оставляй палача без работы.
投稿者: Hamitheanna | 2010年03月03日 09:15
Лучшее лекарство для человека — это другой человек.
投稿者: CarfaddIndy | 2010年03月04日 11:43
Тост: Кто лежит — тот не падает. Падает тот, кто бежит. Выпьем же за бегущих!
投稿者: ameptisse | 2010年03月16日 12:37
Если ты подаришь другому человеку любовь, она вернется к тебе умноженной тысячекратно (Артур Трэйси).
投稿者: Agosseloovons | 2010年03月20日 23:51
Особенности национальной работы: чем больше сделаешь сегодня, тем больше переделаешь завтра.
投稿者: cegrewmeplerb | 2010年03月21日 16:02
Извините что а на самом деле мультики : ) .
投稿者: HeftypeSeitle | 2010年03月31日 03:38
「as3 音量」で検索してこちらにたどり着きました。
大変便利ですね、Tweenerで使えるのもすごいグッドです(^^)/
参考にさせていただきました
投稿者: あい | 2010年06月15日 09:06