[PR]テレビ番組表
今夜の番組チェック




静的に配置したサウンドの音量を変更したい



サンプルをダウンロード




■サウンドオブジェクトを作成する


まず、Sound クラスを使ってサウンドオブジェクトを作成します。引数に制御したいサウンドが含まれる、ムービークリップのターゲットを指定します。 何も指定しなかった場合は、_root になります。

指定したターゲットにある(子階層を含む)すべてのサウンドが制御できるようになるので引数に _root を指定すると、Flash 内のサウンドを一括して制御する事が可能となります。


_root.mc 内のサウンドを制御するためのサウンドオブジェクトを作成する

var sound_obj = new Sound( _root.mc );


_root 内のサウンドを制御するためのサウンドオブジェクトを作成する

var sound_obj = new Sound();





■音量を設定する


ボリュームを設定するには、setVolume() メソッドを使用します。引数に 0(無音) 〜 100 までの数値を指定します。100より大きい値を指定する事もできますが、音割れが発生する可能性があります。


_root.mc 内(子階層含む)で静的に配置されているサウンドのボリュームを変更する

var sound_obj = new Sound(_root.mc);
sound_obj.setVolume(50);





■音量を取得する


ボリュームを取得するには、getVolume() メソッドを使用します。


_root.mc で作成したサウンドオブジェクトのボリュームを取得する

var sound_obj = new Sound(_root.mc);
trace(sound_obj.getVolume());






静的に配置したサウンドのパンを変更したい



サンプルをダウンロード




■サウンドオブジェクトを作成する


まず、Sound クラスを使ってサウンドオブジェクトを作成します。引数に制御したいサウンドが含まれる、ムービークリップのターゲットを指定します。 何も指定しなかった場合は、_root になります。

指定したターゲットにある(子階層を含む)すべてのサウンドが制御できるようになるので引数に _root を指定すると、Flash 内のサウンドを一括して制御する事が可能となります。


_root.mc 内のサウンドを制御するためのサウンドオブジェクトを作成する

var sound_obj = new Sound( _root.mc );


_root 内のサウンドを制御するためのサウンドオブジェクトを作成する

var sound_obj = new Sound();





■パンを設定する


パンを設定するには、setPan() メソッドを使用します。
引数に -100(左) 〜 100(右) までの数値を指定します。


_root.mc 内(子階層含む)で静的に配置されているサウンドのパンを変更する

var sound_obj = new Sound(_root.mc);
sound_obj.setPan(100);





■パンを取得する


パンを取得するには、getPan() メソッドを使用します。


_root.mc で作成したサウンドオブジェクトのパンを取得する

var sound_obj = new Sound(_root.mc);
trace(sound_obj.getPan());







左右のスピーカー出力を詳細に設定したい



サンプルをダウンロード




■サウンドオブジェクトを作成する


まず、Sound クラスを使ってサウンドオブジェクトを作成します。引数に制御したいサウンドが含まれる、ムービークリップのターゲットを指定します。 何も指定しなかった場合は、_root になります。

指定したターゲットにある(子階層を含む)すべてのサウンドが制御できるようになるので引数に _root を指定すると、Flash 内のサウンドを一括して制御する事が可能となります。


_root.mc 内のサウンドを制御するためのサウンドオブジェクトを作成する

var sound_obj = new Sound( _root.mc );


_root 内のサウンドを制御するためのサウンドオブジェクトを作成する

var sound_obj = new Sound();





■サウンドトランスフォーム用のパラメータを設定する


サウンドトランスフォームのパラメータを渡すためにオブジェクトを作成します。


パラメータを渡すためにオブジェクトを作成する

var sound_trans = new Object();


オブジェクトには以下の表示ある4つのパラメータを設定します。


プロパティ 説明
ll 元は左から出力されていた音を左から出力します。
0(無音) 〜 100(常音)
lr 元は右から出力されていた音を左から出力します。
0(無音) 〜 100(常音)
rl 元は左から出力されていた音を右から出力します。
0(無音) 〜 100(常音)
rr 元は右から出力されていた音を右から出力します。
0(無音) 〜 100(常音)


モノラルの設定

var sound_trans = {
	ll : 50,
	lr : 50,
	rr : 50,
	rl : 50
};


リバースステレオの設定

var sound_trans = {
	ll :   0,
	lr : 100,
	rr :   0,
	rl : 100
};





■サウンドトランスフォームにパラメータを渡す


最後に setTransform() メソッドを使って、パラメータを渡します。


_root.mc 内(子階層含む)で静的に配置されているサウンドをモノラルに設定する

var sound_obj = new Sound(_root.mc);
var sound_trans = { ll : 50, lr : 50, rr : 50, rl : 50};

sound_obj.setTransform(sound_trans);





■サウンドトランスフォームのパラメータを取得する


サウンドトランスフォームのパラメータを取得するには getTransform() メソッドを使用します。


_root.mc 内(子階層含む)で静的に配置されているサウンドトランスフォームのパラメータを取得する

var sound_obj = new Sound(_root.mc);

var sound_trans = sound_obj.getTransform();







ライブラリにあるサウンドを動的に再生したい



サンプルをダウンロード




■ライブラリにあるサウンドファイルを使用する


ライブラリにあるサウンドファイルをソースにして、好きなタイミングで再生する事ができます。サウンドを再生するためには、サウンドファイルを swf ファイルに埋め込む必要があります。





1.swf ファイルにデータを埋め込む


ライブラリウィンドウを開きます。使用したいサウンドファイル上で右クリックを押して『リンケージプロパティ』を選択します。









リンケージプロパティというダイアログボックスが開いたら、識別子に好きな名称を付けます。Flash 5 の場合は、『このシンボルに書き出す』にチェックを付けておきます。


Flash 5 の場合





Flash MX 以降の場合は、『ActionScript に書き出し』と『最初のフレームに書き出し』にチェックを付けておきます。


Flash MX2004 の場合




この状態でFlashを書き出すと swf ファイルにデータが埋め込まれるようになります。プロファイラ機能を使って確認してみるとタイムラインの1フレーム目にデータが追加されている事がわかります。


埋め込む前の状態


埋め込んだ後の状態





2.サウンドオブジェクトを作成する


次に、Sound クラスを使ってサウンドオブジェクトを作成します。引数にムービークリップのターゲットを指定します。

何も指定しなかった場合は、_root になります。_root を指定した場合、すべてのサウンドが制御できるようになります。


_root.mc 内のサウンドを制御するためのサウンドオブジェクトを作成する

var sound_obj = new Sound( _root.mc );


引数で指定したターゲットパス(子階層を含む)にある『静的に配置されているすべてのサウンド』が制御できるようにります。 またこのサウンドオブジェクトを使って動的に再生したサウンドも同様に制御できます。

という事は、引数のムービークリップを正しく設定しないとボリュームやパンの設定が『静的に配置しているサウンド』に影響される可能性があります。 また、『動的に再生する複数のサウンド同士』でも影響される恐れがあります。

『動的に再生したいサウンド』ごとに別々のボリュームやパンを設定したい場合は、サウンドオブジェクトを複数作成して、さらに引数に親子関係の無いムービークリップを指定する必要があります。


お互い干渉しないサウンドオブジェクトを作成する (_root.a と _root.b と _root.c はダミーとしてあらかじめFlash上に配置されているものとする)

var sound_obj0 = new Sound( _root.a );
var sound_obj1 = new Sound( _root.b );
var sound_obj2 = new Sound( _root.c );


Flash 6 以降であれば、createEmptyMovieClip() メソッドを使って空のムービークリップを作成するといいでしょう。


親子関係の無い3つの空のムービークリップを作成し、3つのサウンドオブジェクトを作成する(Flash 6 以降)

var mc0 = _root.createEmptyMovieClip("sound_mc0",0);
var mc1 = _root.createEmptyMovieClip("sound_mc1",1);
var mc2 = _root.createEmptyMovieClip("sound_mc2",2);

var sound_obj0 = new Sound( mc0 );
var sound_obj1 = new Sound( mc1 );
var sound_obj2 = new Sound( mc2 );

flash 8 の Flash Player では、8 チャンネルまでのサウンドをサポートしています。





3.サウンドオブジェクトと識別子を関連付ける


attachSound() メソッドを使用してサウンドオブジェクトに動的に再生したいサウンドを関連付けます。

引数に『リンケージプロパティで設定した識別子』を指定します。


リンケージプロパティで設定した "bgm_00" をサウンドオブジェクトに割り当てる

var sound_obj = new Sound();
sound_obj.attachSound("bgm_00");





4.関連付けたサウンドを再生する


サウンドオブジェクトに割り当てたサウンドの再生を開始するには start() メソッドを呼び出します。


Sound.start ( 開始時間 , ループ回数 );
第01引数(略可)再生を開始する時間(単位:秒)を指定
第02引数(略可)ループ回数される回数を指定
返り値 なし


リンケージプロパティで設定した "bgm_00" を再生する

var sound_obj = new Sound();
sound_obj.attachSound("bgm_00");

sound_obj.start();


リンケージプロパティで設定した "bgm_01" を2秒目から再生する

var sound_obj = new Sound();
sound_obj.attachSound("bgm_01");

sound_obj.start(2);


リンケージプロパティで設定した "bgm_02" を3回ループ再生する

var sound_obj = new Sound();
sound_obj.attachSound("bgm_02");

sound_obj.start(0,3);





■音が出ない場合の注意点


attachSound()を使って音素材を割り当てていない場合は何も起こりません。
また、サウンドオブジェクトを作るときに引数に存在しないターゲットパス指定している場合も音が出ません。

音が倍速で再生される場合は、Flashに対応していない音楽フォーマットのファイルを使っている可能性があります。





5.関連付けたサウンドを停止する


動的に再生した音楽を停止するには stop() メソッドを使用します。引数に識別子を指定するとその音だけを停止する事ができます。


サウンドオブジェクトを使って動的に再生したサウンドをすべて停止する

var sound_obj = new Sound();

sound_obj.attachSound("bgm_00");
sound_obj.start();
sound_obj.attachSound("bgm_01");
sound_obj.start();

sound_obj.stop();


リンケージプロパティで設定した "bgm_01" の再生のみを停止する

var sound_obj = new Sound();

sound_obj.attachSound("bgm_00");
sound_obj.start();
sound_obj.attachSound("bgm_01");
sound_obj.start();

sound_obj.stop("bgm_01");


すべての再生を停止する場合は stopAllSounds() 関数を使うと便利です。


すべてのサウンドを停止する

stopAllSounds();







■attachSound メソッドの注意点


attachSound() メソッドはとても便利なメソッドですが、 swf ファイルを Web から落としている最中に注意すべき問題があります。

Flash で任意のフレームを再生して表示するには、そのフレームにあるデータをすべて読み込み終わるまで待つ必要があります。ところが埋め込みデータは、基本的にタイムラインの1フレーム目にすべて格納されています。

例えば、swf ファイルの全容量中 50% が埋め込みデータだった場合、50% まで読み込むまでロード画面すら表示する事ができないという事態が起こります。





■タイムラインのどこかに埋め込む


『ロード画面が表示されない問題』を回避するために、タイムラインの 1 フレーム目に埋め込まずにタイムラインのどこかに埋め込む方法があります。

まず、リンケージプロパティを開いて『最初のフレームに書き出し』のチェックを外します。 次にタイムラインのどこでもいいのでイベント再生として静的に配置しておきます。これでそのフレームにデータを埋め込む事ができます。

しかし、attachSound() メソッドを使って再生するためには、あらかじめこのデータが配置されているフレームを再生する必要があります。





■ロード用の swf ファイルを別途作成する


別の読み込み専用の swf ファイルを作って、そこにメインの swf ファイルを読み込む方法があります。メイン swf ファイルに変な細工をしなくて済むため、一番現実的な回避方法ではないでしょうか。

詳しくはこちら







外部にあるサウンドを動的に再生したい(Flash 6 以降)



サンプルをダウンロード




1.読み込み可能なサウンドファイルを用意する


まず、サウンドファイルを用意します。外部から読み込む事が可能なファイルはmp3 のみです。フォーマットも制限があるので注意してください。


読み込み可能な mp3 のフォーマット

方式
CBR(固定ビットレート)
ABR(平均ビットレート) ×
VBR(可変ビットレート) ×
FFS(フリーフォーマットストリーム) ×
サンプリングレート 44,100HZ 22,050HZ 11,025HZ ビットレート 160kbps 128kbps 112kbps 80kbps 64kbps 56kbps 48kbps 32kbps 24kbps 20kbps 16kbps 8kbps







2.サウンドオブジェクトを作成する


次に、Sound クラスを使ってサウンドオブジェクトを作成します。引数にムービークリップのターゲットを指定します。

何も指定しなかった場合は、_root になります。_root を指定した場合、すべてのサウンドが制御できるようになります。


_root.mc 内のサウンドを制御するためのサウンドオブジェクトを作成する

var sound_obj = new Sound( _root.mc );


引数で指定したターゲットパス(子階層を含む)にある『静的に配置されているすべてのサウンド』が制御できるようにります。 またこのサウンドオブジェクトを使って動的に再生したサウンドも同様に制御できます。

という事は、引数のムービークリップを正しく設定しないとボリュームやパンの設定が『静的に配置しているサウンド』に影響される可能性があります。 また、『動的に再生する複数のサウンド同士』でも影響される恐れがあります。

『動的に再生したいサウンド』ごとに別々のボリュームやパンを設定したい場合は、サウンドオブジェクトを複数作成して、さらに引数に親子関係の無いムービークリップを指定する必要があります。


お互い干渉しないサウンドオブジェクトを作成する (_root.a と _root.b と _root.c はダミーとしてあらかじめFlash上に配置されているものとする)

var sound_obj0 = new Sound( _root.a );
var sound_obj1 = new Sound( _root.b );
var sound_obj2 = new Sound( _root.c );


Flash 6 以降であれば、createEmptyMovieClip() メソッドを使って空のムービークリップを作成するといいでしょう。


親子関係の無い3つの空のムービークリップを作成し、3つのサウンドオブジェクトを作成する(Flash 6 以降)

var mc0 = _root.createEmptyMovieClip("sound_mc0",0);
var mc1 = _root.createEmptyMovieClip("sound_mc1",1);
var mc2 = _root.createEmptyMovieClip("sound_mc2",2);

var sound_obj0 = new Sound( mc0 );
var sound_obj1 = new Sound( mc1 );
var sound_obj2 = new Sound( mc2 );

flash 8 の Flash Player では、8 チャンネルまでのサウンドをサポートしています。





3.サウンドファイルの読み込みを開始する


loadSound () メソッドを使用してサウンドファイルの読み込みを開始します。すでに読み込んでいた場合、前回のサウンドは停止します。



Sound.loadSound ( "MP3ファイルまでのパス", true か false );
第01引数 サウンドファイルのURLか相対パスを指定
第02引数 読み込みながら再生するなら true (ストリーミング)、
完全に読み込むまで再生しないなら false (イベント)
返り値 なし

第02引数でストリーミング再生を選択した場合、自動的に再生が開始します。


"../sound/bgm_00.mp3" をストリーミング形式で読み込む

var sound_obj = new Sound();
sound_obj.loadSound("../sound/bgm_00.mp3",true);


"http://hakuhin.com/bgm_01.mp3" をイベント形式で読み込む

var sound_obj = new Sound();
sound_obj.loadSound("http://hakuhin.com/bgm_01.mp3",false);


一度読み込んだMP3ファイルはキャッシュに残るので、もう一度読み込むとすぐに再生することが出来ます。





4.サウンドファイルの読み込み状況を調べる


現在読み込まれたバイト数が知りたいなら getBytesLoaded() メソッド、
ファイルの総バイト数が知りたいなら getBytesTotal() メソッドを使用します。


サウンドファイルの読み込み状況を調べる

var sound_obj = new Sound();
sound_obj.loadSound("http://hakuhin.com/bgm_00.mp3",true);

onEnterFrame = function(){
	trace("読込;" + sound_obj.getBytesLoaded() );
	trace("全体;" + sound_obj.getBytesTotal() );
	trace ("パーセント:" + Math.floor(sound_obj.getBytesLoaded() / sound_obj.getBytesTotal() * 100));
}




また onLoad イベントを使用すると読み込みが完了して再生可能であるか、または読み込みに失敗しているか調べる事ができます。


サウンドファイルの読み込みが完了したか調べる

var sound_obj = new Sound();

sound_obj.onLoad = function(success){
	if(success){
		trace("サウンドファイルの読み込みが完了して再生が可能");
	}else{
		trace("サウンドファイルの読み込みに失敗");
	}
}

sound_obj.loadSound("http://hakuhin.com/bgm_00.mp3",true);





5.読み込んだサウンドを再生する


読み込んだサウンドの再生を開始するには start() メソッドを呼び出します。


Sound.start ( 開始時間 , ループ回数 );
第01引数(略可)再生を開始する時間(単位:秒)を指定
第02引数(略可)ループ回数される回数を指定
返り値 なし

ストリーミング読み込みの場合、ループ再生する事はできません。さらにこのメソッドを繰り返し呼び出しても重ねて再生する事はできません。イベント読み込みの場合は、ライブラリからの動的再生と同じように使用することができます。


"http://hakuhin.com/bgm_00.mp3" が完全に読み込まれたら再生する

var sound_obj = new Sound();
sound_obj.loadSound("http://hakuhin.com/bgm_00.mp3",false);

sound_obj.onLoad = function(success){
	if(success){
		this.start();
	}
}


"http://hakuhin.com/bgm_01.mp3" が完全に読み込まれたら2秒目から再生する

var sound_obj = new Sound();
sound_obj.loadSound("http://hakuhin.com/bgm_01.mp3",false);

sound_obj.onLoad = function(success){
	if(success){
		this.start(2);
	}
}


"http://hakuhin.com/bgm_00.mp3" が完全に読み込まれたら3回ループ再生する

var sound_obj = new Sound();
sound_obj.loadSound("http://hakuhin.com/bgm_02.mp3",false);

sound_obj.onLoad = function(success){
	if(success){
		this.start(0,3);
	}
}





■音が出ない場合の注意点


loadSound()を使って読み込みが完了していない場合は何も起こりません。
また、サウンドオブジェクトを作るときに引数に存在しないターゲットパス指定している場合も音が出ません。

音が倍速で再生される場合は、Flashに対応していない音楽フォーマットのファイルを使っている可能性があります。





5.関連付けたサウンドを停止する


動的に再生した音楽を停止するには stop() メソッドを使用します。


サウンドオブジェクトを使って動的に再生したサウンドをすべて停止する

var sound_obj = new Sound();
sound_obj.loadSound("http://hakuhin.com/bgm_00.mp3",true);


sound_obj.stop();


すべての再生を停止する場合は stopAllSounds() 関数を使うと便利です。


すべてのサウンドを停止する

stopAllSounds();