stopAllSound()の実行順番を変える方法

このQ&Aのポイント
  • 外部SWF内のフレームに組み込んだイベントサウンドがなっている状態で、_rootのフレームアクションにてstopAllSound()を使用した場合、すべてのサウンドがストップされます。
  • フレームに組み込んだイベントサウンドをSound Objectに変えずに、このままの方法で意図した動作をさせるにはどうすればよいでしょうか。
  • stopAllSound()の実行順番を変えることで、イベントサウンドを停止させた後にSound Objectをfunctionにてstart()することができます。
回答を見る
  • ベストアンサー

stopAllSound()の実行順番を変える方法

環境=Flash8,WinXPでオーサリングしています。 質問です。 外部SWF内のフレームに組み込んだイベントサウンドがなっている状態で、 _rootのフレームアクションにて _global.bgm_sound2_start=function (){ bgm_sound2 = new Sound(); bgm_sound2.attachSound("bgm_sound2.wav"); bgm_sound2.start(); } を記載。 _root.mc1.mc2のフレームアクションで stopAllSound(); _global.bgm_sound2_start(); を記載。(*イベントサウンドを停止させてから、sound objectをfunction にてstart()させたい) この場合に限らずですが、 個別にSound Objectを操作しないで stopAllSound()を使用した場合、 stopAllSound()の記載位置にかかわらず、 スクリプト内の時間的前後が無視され スクリプト内のどこでもすべてのサウンドがストップされます。*トップレベルfunctionのため。 フレームに組み込んだイベントサウンドを Sound Objectに変えずに このままの方法で意図した動作をさせるには どうすればよいでしょうか? どうぞ宜しくお願い致します。

  • Flash
  • 回答数2
  • ありがとう数2

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

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

#1です。 stopAllSounds(); は単に音を止めるのではなく, その時点でのSoundインスタンスを全て削除する という意味らしいです(私は最近知りました)。 ですから, リンケージの識別子などで音を呼び出す場合 stopAllSounds(); 後には, --Sound Object 生成省略-- はできません。 stopAllSounds(); は必ず使用するという原則で, Sound Object の生成を省略したい。 ということですね。 適当な場所にムービークリップを作って, 仮にインスタンス名を「musicMC1」とでもしておきます。 その「musicMC1」の フレーム2 に音を入れておいて, フレーム1 には stop(); を書いておきます。 音の「同期」は「スタート」あたりが良いと思います。              1              a  □レイヤー2 ・・・|○ [] |  □レイヤー1 ・・・|○|○|               ↑音波みたいな物が見える そして, stopAllSounds(); musicMC1.gotoAndStop(2); で音がなると思います。 パスは省略していますが,「musicMC1」の置き場所によって, _root.musicMC1.gotoAndStop(2); などにしてください。 音を消すときは, stopAllSounds(); musicMC1.gotoAndStop(1); です。 stopAllSounds(); を使った場合,Sound Object を再生成するか, 上のように再びタイムラインを動かして,音を鳴らすしかないと思います。 --- 追伸の件 ------ #1での追伸に対するお返事ありがとうございました。 また, 試されていないのではないかという疑惑をいだいてしまい,申し訳ございません。 ムービークリップ内のテキスト入力ですか。 そこまでは検証してみませんでした。 おかげさまで,疑問が晴れてすっきりしました。

sato777
質問者

お礼

お返事有難う御座います。 stopAllSounds()は、そのすぐ後の行に sound Objectを生成しても、それすら削除してしまうみたいです。 でも、これでスッキリしました。 有難う御座います。 教えていただいた方法も正常に動作致しました。 MCを増やさずにスクリプトのみでと考えていましたが、この方法以外選択肢がなさそうですね。 動作検証などをせずに質問する方が多いですから 疑われても仕方の無いことだと思いました。 また、今回もご迷惑をかけてしまいましたが、 質問する側がきちんと詳細を明記しない事が 原因だと考えていますので、反省し以後気をつけますので、どうぞお許し下さいませ。 この度もご教授のおかげですべて解決出来ました。 本当に有難う御座いました。

その他の回答 (1)

noname#35109
noname#35109
回答No.1

補足要求 と 追伸 です。 まず,補足要求。 >> フレームに組み込んだイベントサウンドを >> Sound Objectに変えずに >> このままの方法で意図した動作をさせるには >> どうすればよいでしょうか? この4行の上まではなんとなくどんな状態か理解できたのですが, この4行が理解できません。 >> Sound Objectに変えずに とはどういう状態なのでしょうか。 また, >> このままの方法で意図した動作をさせるには 意図した動作がどんな動作なのかがわかりません。 意図した動作とはどういう動作なのでしょうか。 私は Sound 系にあまり明るくないので,答えられる自信はありませんが, 答える以前に,4行のご質問の意味がよくわかりません。 また,補足説明していただくと,他の方も答えやすくなるとは思います。 次に,追伸。 前々回のこのカテゴリでのご質問, 質問:MCを2つ以上ドラッグする方法 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1937529&rev=1  ↑教えて!goo ↓OKWave (同じです) http://okwave.jp/kotaeru.php3?q=1937529&rev=1 (#1と#2を上下逆にしています) #1の方の書いてくださっているスクリプトの最後の行。   //表示を更新   updateAfterEvent(); この1行を見落とされていませんか? その補足に, >> マウスポインタがそのつどずれ、ユーザーにストレスを >> 与えてしまいます。 と書かれていますが, 私が #1 の方のスクリプトを実際に試してみましたところ, startDrag を使うより,もっとスムーズにカーソルが動きましたよ。 私は,#2で,#1の方のおっしゃることを前提に,それを補足しただけです。 テキスト入力 に関しては,どっちもどっち。 startDrag を使っても,使わなくても,しにくいことは確かですが, 一度,#1 の方の方法を実際に試されることをお薦めします。

sato777
質問者

補足

お返事有難う御座います。 サウンドは、大きく分けて2つの処理方法が御座います。 1、Sound Objectを生成して、サウンドを操作する方法。 2、ライブラリなどに読み込んだりしたサウンドを フレームにイベントサウンドやストリーミングサウンドとしてあらかじめ組み込む方法です。 2を1に変えて(変更して)という意味でした。 わかりにくく申し訳御座いません。 意図した動作とは、*でも記載しましたが (*イベントサウンドを停止させてから、sound objectをfunction にてstart()させたい) がさせたい動作です。 これもわかりにくくて申し訳御座いませんでした。 もっと詳細に言いますと、 1、外部SWFのフレームイベントサウンドが鳴る 2、_rootのボタンなどのアクションによって、_rootのfunctionが呼びだされ、外部SWFのフレームイベントサウンドを止めてすぐに_rootのsound objectで生成をしてstart()し、違う音を鳴らす。 stopAllSound(); --Sound Object 生成省略-- my_sound.start(); としても、my_sound.start()は鳴りません。 いずれも、誰が見ても解るきちんとした書式で書かないといけなかったなと反省しております。 ご指摘有難う御座いました。 以前の#1の方の補足ですが、 この事例に限らずですが、実際にすべて試して検証しております。 また、updateAfterEvent()に限らず、 頂いた貴重なスクリプトは、動作しない場合でも どこが原因でどこを何に換えると正常に動作するかも、動作検証させて頂いております。 テキスト入力では、完全に入力ができませんでした。 *startDrag()がないため。 *startDrag()追加で正常に入力できました。 *MC内のさらに中にTextfieldを作っているためstartDrag()が必要なのかもしれません。 やはり、昔からまったくそっくりそのまま 同じスクリプトで議論がされていますが、 そのままストレス無く使えて~というほど 万能ではないと言うことは明らかだと思われます。

関連するQ&A

  • 外部ムービーを読み込んだとき音が鳴らなくて困っています.

    外部のムービーにサウンドオブジェクトを作ってattachしてstartするスクリプトを書いているのですが,そのswfファイルを他のswfファイルからloadMovieしたときに読み込まれたswfファイルの音が出ないのです.助けてください;; 読み込まれるswfのスクリプトをのせておきます. s1_sound = new Sound(); s1_sound.attachSound("midi1.aif"); s1_sound.start(0,999);

    • ベストアンサー
    • Flash
  • 外部SWFファイルの中のMCのgotoAndPlayによるタイムライン制御にすて

    Flash8&WinXPでの環境でオーサリングしております。 質問なのですが、 _root.mc1_1_mc.mc1_2_mcに外部SWFファイル v2.swfをloadMovieします。 _root.mc1_1_mcのフレームアクションに function gotoF(){ パス+gotoAndPlay("goto_nextF1"); } _global.goto_cnt=0; _root.mc2_1_mcのフレームアクションに if(_global.goto_cnt=='1'){ this._parent.gotoF(); } v2.swfの中のMC,v2_mc1_mc.v2_mc2_mcのフレームアクションに if(_global.goto_cnt==0){ this.gotoAndPlay("goto_nextF2"); } _global.goto_cnt2=1; とします。 上記どちらとも、何かトリガーを作っても 外部swf v2.swfのフレームラベル"goto_nextF1",フレームラベル"goto_nextF2"に フレームを移動させることができません。 _global.goto_cntも参照されていないようです。 function gotoF(){ パス+gotoAndPlay("goto_nextF1"); } のパスかスクリプトが間違っているのでしょうか? また、 if(_global.goto_cnt==0){ this.gotoAndPlay("goto_nextF2"); } では、traceしてデバッグしても _global.goto_cntを参照していません。 この逆、v2_mc1_mc.v2_mc2_mcのフレームアクション の_global.goto_cnt2=1; を_root.mc1_1_mc.mc1_2_mcのフレームアクションで if(_global.goto_cnt2==1){ trace("ok"); } としてトリガーを作り確認しても、 これもまた参照されません。 大変無知でいささか恐縮ですが、 どなたかご教授頂けませんでしょうか。 どうぞ宜しくお願い致します。

  • 2つのSWFを連続再生する方法を教えてください。

    2つのSWFを連続再生する方法を教えてください。 ひとつのswfファイルをつくって(以下1.swf) それを、別のswfからよみこまして、その続きを再生したいと考えております。(2.swf) このとき 「1.swf」の1フレームにアクションで ===== loadMovieNum("1.swf", 0); gotoAndPlay("start"); ===== として、 2フレーム目にラベル「start」をつけているのですが 「2.swf」を実行した場合に、「1.swf」は読み込みますが、 その後、「1.swf」を繰り返してしまいます。 また、繰り返すので、「1.swf」のラストフレームに「stop();」 を入れると当然のごとく止まってしまい、 「2.swf」の2フレーム以降を再生してくれません。。 非常に初歩的な問題だと思うのですが、 「2.swf」の1フレーム目にはなんというアクションスクリプトを記載すればいいのか、 教えていただけないでしょうか? よろしくお願いいたします。

  • flashの音再生について

    main.swfにactionscript2.0で音のon/offしているのですが、 offになって欲しくない音までoffになってしまいます。 スクリプトで呼び出している音ならばまだわかるのですが、 flvで外部から読み込み再生しているファイルなので、 訳が分からず困っています。 ちなみに音再生スクリプトはフレーム上に以下 //BGM制御用のダミーのムービークリップを作る this.createEmptyMovieClip( "bgm_clip" , 0 ); //BGMの設定 sndbgm = new Sound( bgm_clip ); sndbgm.attachSound( "BGM01" ); sndbgm.setVolume( 100 ); sndbgm.onSoundComplete = function() { //無限ループ再生 sndbgm.start(); }; //BGMを再生 sndbgm.start(); //BGMのボリュームとフェードの速さを管理する変数 bgm_vol = 100; fade_spd = 5; //SE設定 allse = new Sound(); allse.setVolume( 100 ); S1 = new Sound(this); S1.attachSound("SE01"); S2 = new Sound(this); S2.attachSound("SE02"); S3 = new Sound(this); S3.attachSound("SE03"); on/offにはMCで以下の様にしています。 on (release) { if (this._parent.sndbgm.getVolume()>0) { this._parent.sndbgm.setVolume(0); this._parent.allse.setVolume(0); this._parent.v_on_off.gotoAndStop("soundOFF"); } else if (this._parent.sndbgm.getVolume()<=0) { this._parent.sndbgm.setVolume(100); this._parent.allse.setVolume(100); this._parent.v_on_off.gotoAndStop("soundON"); } } SE再生にはフレーム上に S1.start(); と入れています。 使用バージョンはCS4になります。 どなたか判る方、教えて下さい。

    • ベストアンサー
    • Flash
  • 外部swfの読込について

    1枚のFlashに二つの外部swfを読み込む方法を教えて下さい。 今参考書を見ながらやってみたのですが外部ファイルが読み込まれていないようで 書き出したswfファイルには何も表示されません。 試した方法ですが・・・ 外部swfファイル読込用ムービークリップを作成、 オブジェクトアクションを挿入 --------------------------------- onClipEvent (load) { function Load (file) {  this.loadMovie (file);   } } --------------------------------- フレームを作成し下記アクション挿入 --------------------------------- contents_mc.Load("about.swf") --------------------------------- 使用ソフトはFlash5です。 どうぞ宜しくお願いします。

    • ベストアンサー
    • Flash
  • 一曲が終わったら次の曲へ

    こんにちわ ただ今フラッシュでmp3プレイヤー的な物を作ってるのですが 一曲は再生できるものの一曲が終わったら次の曲へ とアクションスクリプトを組むにはどうすればいいのでしょうか? 今のプレイヤーにはプレイ、ストップボタンだけの 単純な機能がそなわっています var song_sound:Sound = new Sound(); song_sound.attachSound("曲名"); play_btn.onRelease = function() { song_sound.start(); }; stop_btn.onRelease = function() { song_sound.stop(); }; このようになっております。 どのようなスクリプトを書き足せばよろしいのでしょうか? また、スクリプトを足す以外に簡易的な作り方など あれば教えてください。 説明しているサイトもいろいろ探したのですが なかなかみつかりません(汗 サイトなどでも結構なのでよろしくお願いいたします FLASH8 WINDOWS XP 使用です

    • ベストアンサー
    • Flash
  • 【複数の音声】スタート&ストップ

    前にも似たような質問してますが 簡潔にソースのどこが悪いか教えてください。 音を複数出せるように 2種類の再生ボタンを用意します。 ストップボタンも同じように用意します。 ストップボタンを押すと 対応した音が消えるようにしたいのですが どうしたらよいでしょうか? 作成したこと。 1フレームに下記のASを挿入。 //サウンド・クラスのインスタンスを生成 _root.a.bgm01 = new Sound(bgm01); _root.b.bgm02 = new Sound(bgm02); MCを2つ作成。 インスタンスは"a"と"b"を用意。 その中にサウンド素材を"a"と"b"に フレーム1に入れる。 イベントはストップの状態。 ボタンに書いたソースはこちら。 ひとつめ↓ on (release) { _root.a.bgm01.attachSound("bgm01"); _root.a.bgm01.start(); } ふたつめ↓ on (release) { _root.b.bgm02.attachSound("bgm02"); _root.b.bgm02.start(); } 停止ボタンには↓ "a" on (release) { _root.a.bgm01.stop(); } "b" on (release) { _root.b.bgm02.stop(); } 作りかけのファイルは 【http://flash-moe.yi.org/bgm/bgm.fla】 質問が終了次第削除します。

    • ベストアンサー
    • Flash
  • 2つの音のボリューム制御

    質問させてください。 Flashで2つの音を鳴らしたいと考えています。 一つはタイムラインにおいて、画面と同期させて います。二つ目は常に鳴るようにサウンドオブジェクト で鳴らしています。 問題は、setVolumeで音のボリュームを制御したいの ですが、下記のように2つのサウンドオブジェクトを 作成しても、最後に設定したsetVolumeに2つの音が ボリューム指定されてしまって、別々にボリューム 制御ができません。 (下記のように、タイムラインの音は30、スクリプト 制御の音は80で設定したい。) ●タイムラインの1フレーム目のフレームアクション _root.snd = new Sound(); _root.bgmsnd = new Sound(); //タイムライン用のボリューム指定 _root.snd.attachSound("menu1"); _root.snd.setVolume(30); //スクリプト制御用のボリューム指定 _root.bgmsnd.attachSound("bgm"); _root.bgmsnd.setVolume(80); _root.bgmsnd.start(0,99999); 解決方法、おわかりの方おられますでしょうか? Flash MX 2004 Windows XP

    • ベストアンサー
    • Flash
  • BGMが二重になります。

    フレーム構成↓ 1234     5678 ■■■■ボタン→ ■■■■ボタン→フレーム1に戻る 最初のタイムライン1から8まで続けて同じBGMを鳴らしています。 1234のボタンを押すと5678のフレームをジャンプします。 ここまでは問題ないのですが、5678から1234に戻るボタンを押してフレームをジャンプするとBGMが二重になります。 最初の画面から画面を閉じるまで同じBGMを鳴らし続けたいのですが、これを5678から1234に戻る時、BGMが二重にならない方法を教えて下さい。 以下は1番目のアクションスクリプトに記入しております。 var bgm:oto = new oto (); var bgmoto:SoundChannel = bgm.play (0,10); bgmoto.addEventListener (Event.SOUND_COMPLETE, replay); function replay (event:Event) :void { bgmoto = bgm.play (0.10); bgmoto.addEventListener (Event.SOUND_COMPLETE, replay); }

    • ベストアンサー
    • Flash
  • 動画が始まったらBGMを止めたい

    質問させていただきます。 以下のようなサイトを作っているのですが、行き詰ってしまいました…。フルフラッシュのサイトですが、BGMを流しています。そのBGMは「オン/オフ」のボタンでストップすることができます。 サイト内で映像を紹介する箇所がありまして映像が始まったら、自動的にBGMが止るようにしたいのですが、今のところボタンを押して止める方法しかわかりません。(よく映画のサイトである予告編紹介みたいな感じです) 映像のほうは、Flash8でflvを書き出し、メインサイトとは別にウィンドウを開いて、表示させています。 まだまだFlash初心者で、特に音関連は見よう見真似でやっている状態なので、どっち方向に考えていったらいいものやら見当もつきません。 どうかよろしくお願いします。 ディレクトリ構成はこうです。 --index.html  「メイン」.swf  映像用.html(別ウィンドウで開く)  映像.swf  映像.flv 制御バーのスキン.swf 「メイン」.swf内のBGM制御ボタンのスクリプトはこうです。 onClipEvent(load) { oto=new Sound(); oto.attachSound("sound2"); snd.onSoundComplete=function() { this.start(); }; play_flg=true; gotoAndStop(Number(play_flg)+1); } on(release) { if(play_flg) { oto.stop("sound2"); play_flg=false; } else { oto.start(); play_flg=true; } gotoAndStop(Number(play_flg)+1); }