• ベストアンサー

シーンをまたいでのBGM再生について

お世話になっております。 下記の項目についてアドバイスを戴けないでしょうか。 質問内容:まずTOPページを作成し、ムービークリップにつけたBGMを流します。 そして、TOPページから他のページに変えていっても曲が重複せずそのまま流れ続けるように同期:の部分をスタートに指定しました。 しかし、例えば1・2・3・4ページの場合は曲がそのまま一曲通して流れ続け5ページ目においては、TOPページにつけた曲が止まり、5ページ目に挿入した曲が流れはじめる。といったことをしたいのですが、どうすれば宜しいのでしょうか。 ご教授お願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
noname#35109
noname#35109
回答No.3

#1です。 回答しながらにして話がだんだんわからなくなって来ましたが, とりあえずすみません。訂正です。 サウンドを「スタート」にしていても, --------------------- on (release) { stopAllSounds(); gotoAndStop(1); } --------------------- で,再再生されました。 「スタート」にしていると,再生は1回だけと勘違いしておりました。 #2の方が書かれているように, stopAllSounds(); では,単に音を消すだけでなく,サウンドインスタンスが削除されるようです。 変なことを書いて申し訳ございません。 あと,「ムービークリップにつけたBGM」だったのですね。 "ムービークリップ" の部分を飛ばして理解しておりました。 なのでこれまた#1は変な文章になっています。 それと, ------------------ on (release) { gotoAndStop(5ページ); stopAllSounds(); } ------------------ 2行目3行目の順序が逆です。急いで書いたため,変なミスをしてしまいました。 ミスだらけでどうしようもありませんね。 すみません。 =============================== ムービークリップに入れているということですね。 これも実際してみましたが, ムービークリップに入れていても -------------------- on (release) { stopAllSounds(); gotoAndStop(5); //←5ページ目のつもり } -------------------- でそれまでの音は消えて5フレームに行きます。 5フレームでは,5フレームに同じようにサウンドを入れたムービークリップを用意しておけば良いのではないでしょうか。 別にムービークリップに入れなくても良いですが,入れていてもいなくても同じスクリプトで,それまでの音は消えて,5フレームで用意した音が鳴り始めます。 音をムービークリップに入れていて,そのムービークリップを1フレームだけに存在するムービークリップにしたとしても,やはり, stopAllSounds(); は必要で, 1フレームで流れ出した,それまでの音は消えません。 やはり -------------------- on (release) { stopAllSounds(); gotoAndStop(5); //←5ページ目のつもり } -------------------- です。 今度は帰ってくる場合です。 帰ってくる場合はムービークリップに入れている場合と入れていない場合で変わります。 でももし1~4フレームに共通の音の入ったムービークリップがある場合は, 5フレームから戻る場合, -------------------- on (release) { stopAllSounds(); gotoAndStop(4); ←(1)~(4) } -------------------- (1)~(4)全て stopAllSounds(); が必要です。 でないと5フレームの音とまざってしまいます。 もし音をムービークリップに入れていなくて,_rootの1フレームタイムラインに入れている場合, もしくはムービークリップに入れていても,そのムービークリップは1フレームにしか存在しない場合は -------------------- on (release) { stopAllSounds(); gotoAndStop(1); ←(1)のみ } -------------------- と1フレームに飛ぶときのみ,必要で, (2)~(4)は stopAllSounds(); がなくても音がまざることはないですが, stopAllSounds(); を消すと,5フレームの音が鳴り続けます。 ========================= 訂正とお詫びをしたうえにまたややこしい話をしていますが, 同期を「スタート」にしたムービークリップを,1~4フレーム共通に存在するようにすると,それはそれで意味が十分あると思います。 結論は,#2の方と同じようになってしまいますが, 実際に自分でしたいように音が鳴るようにいろいろ考えたり実験してみてください。 そして「どんな流れで処理が行われているのか、同様にして考えてみてください。 サウンドの扱い方や特性も、何となく見えてくると思います。」 ですね。 ムービークリップに音を入れても, _rootのタイムラインに音を置いても  stopAllSounds();  は不可欠であるということは間違いなさそうです。

yakusokunosora
質問者

お礼

ご回答及び、ご訂正ありがとうございます。 お返事が遅れてしまいましたこと、お許し下さい。 今回、stopAllSounds();をキーワードにいくつか試したところ、 on(release){ stopAllSounds(); gotoAndPlay(); } (音を消してから5ページ目を再生?) で可能になりました。 とりあえずは、成功したのでどうもありがとうございました。

その他の回答 (2)

  • DPE
  • ベストアンサー率85% (666/776)
回答No.2

ムービークリップに音を付けていると、別のフレームに行ってそのムービークリップがステージから消えた時には、音が鳴らなくなってしまいますよ。 単純にBGMを切り替えたいだけでしたら、「スタート」の特性を利用して、ムービークリップを使わずにメインのタイムラインでも何とかなります。 仮に、各ページをそれぞれ1フレームで作っていて、フレーム1から4までは同じ音( BGM1 とします)を、フレーム5だけは別の音( BGM2 とします)を鳴らす場合を考えます。 ちょっと鈍くさいですけれど、フレーム1から5までにそれぞれキーフレームを作り、サウンドを挿入します。BGM専用のレイヤーを用意しておくと、管理しやすくなります。 フレーム1~4にはそれぞれ BGM1 を、フレーム5には BGM2 を挿入し、各フレームの「同期:」で全て「スタート」を選択します。途中で止まっては困る場合は、「ループ」を 999 にしてください。 これで、タイムラインで鳴らす音の設定は完了です。 「スタート」は前回 No.1732527 の#3で説明しました通り、”同じサウンドシンボルが再生中の時はインスタンスを作らず、音を鳴らさない”という特徴があります。 これは、キーフレームが分かれている場合でも有効です。 例えばフレーム1からフレーム2に移動すると、フレーム1で既に BGM1 を鳴らしているので、フレーム2に挿入した BGM1 を再生する命令は実行されません。 (正確には、フレーム2では BGM1 のシンボルのインスタンスが作成されず、重複しては再生されない、ということです) つまり、トップページからページ5以外、それからページ2~4にあるページ5以外へのリンクボタンには、単純にフレームを移動するスクリプトだけを書いておけば、BGM1 はそのまま鳴り続けます。 例えば、ページ1からページ2へ移動するリンクボタンのスクリプトは (↓各行頭に全角のスペースが入っています。コピーする際はご注意ください)  on(release)  {   gotoAndStop( 2 );  } となります。 問題は、ページ1~4からページ5へ行くボタンと、逆にページ5からページ1~4に戻るボタン、要するにBGMが切り替わる局面のボタンの制御です。 例えば、フレーム1で鳴らした BGM1 をそのままにして単純にフレーム5に移動したとします。 フレーム5で鳴らす音は BGM2 で、フレーム1で鳴らしたものとは違うサウンドシンボルです。「スタート」にしていても BGM2 のインスタンスが作成されるので、2つの音が混ざって再生されてしまいます。 タイムラインで鳴らしている音は、タイムラインでキーフレームを作って「同期:」の「ストップ」で止めるか、#1の方がおっしゃっているように stopAllSounds というアクションで止めるくらいしか融通が利きません。 ですが今回は、2つの音を混ざらなくするには、要は BGM2 を鳴らす前に BGM1を止めてさえおけばいいので、stopAllSounds でも充分対応できます。 BGMが変わる局面では、まず今鳴っている音を止めてからフレームを移動します。 まとめますと、フレーム1~4にあるフレーム5へ移動するボタンのスクリプトは  on(release)  {   //BGMを止めてから移動   stopAllSounds();   gotoAndStop( 5 );  } フレーム5からフレーム1~4に戻るボタンに書くスクリプトも同様で、  on(release)  {   stopAllSounds();   gotoAndStop( 1 );  } このようになります。 stopAllSounds で音を止めると、稼動中のサウンドインスタンスは全て削除されます。 仮にフレーム1→フレーム5→フレーム1と戻る場合を想定して、ボタンをクリックするとどのような流れになるかを考えてみますと。 まず、フレーム1で作られた BGM1 のサウンドインスタンスが stopAllSounds アクションにより削除され、BGM1 は止まります。 フレーム5に移動すると、「スタート」の命令に従い、ここに挿入されている BGM2 のインスタンスが作られて BGM2 が鳴ります。 フレーム5からフレーム1に戻る時も、同様に stopAllSounds アクションで音を止めるので、BGM2 のインスタンスもここで削除されます。つまり、この時点で BGM1 と BGM2 のどちらのインスタンスも、1つも存在しないことになります。 フレーム1には「スタート」に設定した音が挿入されています。 BGM1 のインスタンスは既に削除されてなくなっていますから、フレーム1に戻った時には新しいインスタンスが作られて、BGM1 が再生されます。 「スタート」は最初の1度しか鳴らさないのではなく、あくまでも”同じサウンドシンボルを重複して鳴らさない”鳴らし方です。 サウンドシンボルのインスタンスが、指定のループ分だけ演奏し用済みになって消えるか、stopAllSounds アクションにより強制的に削除されてなくなっているならば、再度インスタンスが作成されて音が鳴ります。 とりあえずフレーム1から5、フレーム5から1に戻るパターンで考えましたが、フレーム1~4のいずれかから同フレーム内、あるいはフレーム2~4から5への移動など、いろいろな移動パターンが考えられます。 この時、どんな流れで処理が行われているのか、同様にして考えてみてください。 サウンドの扱い方や特性も、何となく見えてくると思います。 タイムラインを使って音を鳴らすと、ON / OFF を切り替えるボタンなどは作りにくくなります。 より凝った鳴らし方をしたいのなら、スクリプトで鳴らす方法も研究してみてください。 このサイトでもスクリプトで音を制御する作例は何度か話題になっていますし、他のサイトや解説書にも、ヒントはたくさん転がっているはずです。

yakusokunosora
質問者

お礼

お返事、ありがとうございます。 スタートなどの同期:を使い分けることによって、リンゲージ等の詳細部分を使わなくてもある程度のことは出来てしまうのですね。(限界もありますが…) 今回はstopAllSoundのスクリプトで解決することが出来ました。ホントにありがとうございます。

noname#35109
noname#35109
回答No.1

前回,ご質問の「質問:音楽を各種ページをまたいで流す方法」ときに, #2~#4の方の回答にあるように, 本当はリンケージからスクリプトを用いてサウンドを呼び出し, そのサウンドをコントロールしないと実際は難しいのです。 その方法は#2~#4の方が書かれていますし, 参考で引用しているところでも詳しく説明されています。 あれ以上詳しくは説明はできません。 それでもサウンドをタイムラインに挿入するのであれば, その5ページに行くボタン?に --------------------- on (release) { gotoAndStop(5ページ); stopAllSounds(); } --------------------- でしょうね。 http://f-site.org/cont/02refere/act/stopAllSounds.htm 5ページに行く寸前に全ての音を止めるしかないです。 しかし,これでいくと,1ページに戻ったときにサウンドは「スタート」にしているので鳴り出しませんよ。 そんなこんなを考えると,リンケージを使用するか, 前回のときに私が#1で答えた, 1ページ目を複数フレームにして,2~4ページから1ページに帰るボタンは, --------------------------- on (release) { gotoAndStop(2); } --------------------------- 5ページ目から1ページに帰るボタンは --------------------------- on (release) { gotoAndPlay(1); } --------------------------- みたいに振り分けないとならないのです。 そう言う意味も含めて前回の時「普通はそうします。」 と書いたのです。 私の考えた方法ではなくて,実際に昔から多くの方が使っている方法なのです。

yakusokunosora
質問者

お礼

ありがとうございます。 少し、音と制御に関する仕組みがわかってきました。 ホントにありがとうございました。

関連するQ&A

専門家に質問してみよう