- ベストアンサー
外部ムービーを読み込んだとき音が鳴らなくて困っています.
外部のムービーにサウンドオブジェクトを作ってattachしてstartするスクリプトを書いているのですが,そのswfファイルを他のswfファイルからloadMovieしたときに読み込まれたswfファイルの音が出ないのです.助けてください;; 読み込まれるswfのスクリプトをのせておきます. s1_sound = new Sound(); s1_sound.attachSound("midi1.aif"); s1_sound.start(0,999);
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
結論から書きますと、 s1_sound = new Sound(); の部分を s1_sound = new Sound( this ); と書き換えてみてください。これで直ると思います。 Sound オブジェクトを作る new Sound は、正式には Sound オブジェクトで制御するムービークリップを指定することになっています。 省略すると _root の音を制御する Sound オブジェクトが作られ、ムービー全体の音を制御するオブジェクトになります。 仮に、ムービー Main.swf と Sub.swf があり、Main.swf にあるムービークリップ clip に Sub.swf が読み込まれるとします。 Sub.swf にある Sound オブジェクトが _root の音を制御するオブジェクトの場合は、Main.swf に読み込まれた時点で _root は Main.swf のタイムラインを指すようになるため、Main.swf のライブラリを参照して attachSound が実行されます。 つまり、Main.swf に” midi1.aif ”というリンケージ識別子を持つサウンドシンボルがあればこのシンボルのインスタンスが挿入されて演奏が始まりますが、該当するシンボルが見当たらないと attachSound が失敗してしまい、音は鳴りません。 Sub.swf のタイムラインでの this は、Sub.swf 単体で再生した時は Sub.swf の、Main.swf にあるムービークリップ clip に読み込まれた時は clip のタイムラインを指します。 clipに 読み込まれても、Sub.swf が持っているライブラリは Main.swf とは別のものとして開かれていて、Sub.swf では引き続き自分のライブラリを使用してムービーを再生しています。 よって、clip に読み込まれた時に、_root ではなくこのムービークリップ内の音を制御する Sound オブジェクトにしておくことで、clip に読み込まれたムービーのライブラリ、要するに Sub.swf が持っているライブラリからサウンドシンボルを挿入できる仕組みになります。
お礼
できました!ありがとうございます. とても丁寧に解説していただきました.