- ベストアンサー
音声再生のスクリプトについての質問
- ActionScriptを使用して、音声の再生スクリプトを作成しています。
- 2つの音声素材を別々に再生し、それぞれの音量をコントロールしたいですが、どうしても両方の素材に影響してしまいます。
- どのようにすれば、2つの素材の音量を個別にコントロールすることができるでしょうか。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
Flash では、ムービークリップが音を出すチャンネルになります。 1つのチャンネル(=ムービークリップ)で数種類の音をいくつも同時に出したり、どれか1つだけ止めることはできるのですが、音を出力するための設定の1つであるボリュームは、1チャンネルにつき1つしか設定できません。 Sound オブジェクトがたくさんあって複数の音を同時に制御していても、これらの Sound オブジェクトが同じムービークリップをチャンネルとしている限り、ボリュームはどれも同じ値に統一されてしまいます。 複数の音を同時に鳴らしている時に、1つは大きくもう1つは小さく・・・というようにボリュームを個別に変えて出力したい時は、音の数だけ、チャンネルになるムービークリップを用意します。 Sound オブジェクトを複数用意しても、全ての Sound オブジェクトが同じムービークリップをチャンネルとして共用してしまっては意味がありません。 そこで、Sound オブジェクトも出力を変えたい音の数と同じ数だけ作り、それぞれ別のムービークリップの音を制御するようにします。 Sound オブジェクトが異なるムービークリップから音を出力している時は、あるチャンネルのボリュームが変化しても他のチャンネルは全く関係がありません。 あとは普通に、ボリュームを操作したいものの Sound オブジェクトの setVolume で値を設定するだけです。 *************************** 結論としては、まず、ムービークリップを2つ用意してインスタンス名を付けてください。 タイムラインを使ってステージに用意しても構いませんが、その場合は、これと同じインスタンス名を持つムービークリップが音を鳴らしたいフレームでなくならないようにしましょう。 ここでは仮に、ムービークリップ sound_mc1 と sound_mc2 を用意したとします。 bgm01 を鳴らす Sound オブジェクト mySound1 がムービークリップ sound_mc1 を、bgm02 を鳴らす mySound2 が sound_mc2 をチャンネルにするとします。 この2つの Sound オブジェクトを作る時に、 mySound1 = new Sound( sound_mc1 ); と mySound2 = new Sound( sound_mc2 ); と、ムービークリップを指定してください。 mySound1 と mySound2 とでは、音を出力するチャンネルが異なります。 例えば mySound1 の setVolume を実行すると、sound_mc1 をチャンネルとする全ての音のボリュームが変化します。 しかし、mySound2 の出力先である sound_mc2 から出している音のボリュームは変化しません。 言うまでもないことですけれど、new Sound に指定するムービークリップのターゲットパス、音を制御している Sound オブジェクトのターゲットパスの誤りにご注意ください。 ------------------------------------------------------------------- ちなみに、同じく音の出力設定といえるものに、パン(スピーカーの出力位置)があります。 パンもボリュームと同様に、1つのチャンネルにつき1つしか設定できません。同時に出す複数の音のパンを変更したい時は、ボリュームと同様にその数だけムービークリップが必要です。 パンを上手く調整すると面白い効果になります。 簡単に設定できる setPan の他に、より細かく出力位置を配分できる setTransform というメソッドがあります。 機会がありましたら研究してみてください。
お礼
わかりやすい解説ありがとうございます。 デバッグ時の値が変だったのに気づいてましたが 謎が解けました。