Flashでアニメーションとサウンドを違うタイミングでループさせる方法

このQ&Aのポイント
  • Flashを使用してHPにアップするSWFファイルのアニメーションとサウンドを異なるタイミングでループさせる方法を教えてください。
  • アニメーションの長さとサウンドの長さが異なり、正しくループさせる方法がわかりません。
  • 現在のスクリプトでは、サウンドが重なって鳴る問題が発生しています。どう修正すればよいでしょうか?
回答を見る
  • ベストアンサー

Flashでアニメーションとサウンドを違うタイミングでループさせたい

こんばんは! Flash8を使ってHPにアップするSWFファイルを作成しています。 アニメーションもサウンドもループ再生させたいのですが、アニメーションの長さとサウンドの長さが違いうまくループさせることができません。 アニメーションは56秒、サウンドは1分48秒という感じです。 さらに、サウンドはON・OFFで音が制御できるようになっています。 下記のスクリプトで挑戦してみたのですが、ON・OFFを押すたび音が増えて輪唱のように何重にも重なって聞こえてきます。 「ON・OFFムービークリップ1フレーム目」 stop(); _root.soundA = new Sound(); _root.soundA.attachSound("00000.mp3"); _root.soundA.start(0,999); 「シーンにおいたON・OFFムービークリップ」 on (release) { if (_root.soundA.getVolume()>0) { _root.soundA.setVolume(0); _root.on_off.gotoAndStop("soundoff"); trace(_root.soundA.getVolume()); } else if (_root.soundA.getVolume()<=0) { _root.soundA.setVolume(100); _root.on_off.gotoAndStop("soundon"); } } 質問内容がわかりにくいかもしれませんが、ご回答よろしくお願いします。

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

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

いわゆる BGM の ON / OFF ボタンの作り方は、以前、他の質問で紹介したことがありますので、よろしければご参考になさってください。  ・BGMのon/offボタンについて   http://okwave.jp/qa1789705.html この作例では、ON / OFF ボタンであるムービークリップをクリックするまでは音が鳴りません。 最初から音を鳴らす場合は、onClipEvent(load){ … } の部分を以下のように変更してください。 (↓各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください)  onClipEvent(load)  {   //サウンドを挿入   snd = new Sound();   snd.attachSound( "○○○" );   //無限ループ再生設定   snd.onSoundComplete = function()   {    this.start();   };   //サウンドを再生   snd.start();   //再生状況を保持する変数   //再生時true、それ以外はfalse   play_flg = true;   //再生状況に応じたフレームを表示   gotoAndStop( Number( play_flg ) + 1 );  } ------------------------------------------------------------- Flash では音であっても、ムービークリップやボタンと同様に”サウンドシンボルのインスタンスを作る”と考えます。 目に見えないものなので想像しにくいのですが、サウンドシンボルのインスタンスが存在している分だけ音が鳴ると思ってください。 音の鳴らし方は、イベント・スタート・ストリーミングの3種類があります。 イベントは、再生の命令が出されるたびにサウンドシンボルのインスタンスを作成する鳴らし方です。 この鳴らし方では、前に再生した音が再生中、つまり先に作られたインスタンスがまだ存在している時に再度再生命令を出すと、サウンドシンボルのインスタンスがもう1つ作られて、結果的に音が重複して鳴ることになります。 ****************************** スクリプトでの鳴らし方はイベントになります。 Sound クラスの start メソッドを実行するたびにインスタンスが作られ、指定した回数だけ再生が済んだインスタンスは削除されて音が止まります。 ですから、先に start により作られたインスタンスがまだ存在している間に start を実行すると、その都度インスタンスができて輪唱のようになります。 ご質問文のスクリプトですと、ボタンをクリックした時にボリュームを操作して音を出したり聞こえなくしているようですが。 ボリュームが 0 の間は単に音が聞こえなくなるだけで、再生はずっと続いています。 つまり、フレーム1で作られたサウンドシンボルのインスタンスは 999 回ループ再生が済むするまで存在しています。 この間にフレーム1に戻ると、フレームに書かれているスクリプトの _root.soundA.start(0,999); によりサウンドシンボルのインスタンスが作られるため、音が重複して鳴ってしまいます。 重複再生を防止するには、再生中の音を一旦止めてから再生する・再生中は再生の命令を出さないようにする、といった、同じサウンドシンボルのインスタンスを複数存在させない工夫が必要です。 Sound クラスの stop メソッドを使うと、稼動中のインスタンスを削除して音を止めることができます。 先述の作例では、再生中であるかどうかの情報を変数(フラグといいます)に記録しておき、ボタンがクリックされるたびにこの情報を見て、再生中であれば stop で音を止め、停止している時は start で再度音を鳴らしています。 stop で先に作られたサウンドシンボルのインスタンスが削除されて音が止まっているので、start を実行しても前の音は鳴りません。 なお、重複して音が鳴るのは、要するに、前に鳴らした音の再生中に start が実行されることが原因です。 従って、例えばフレーム1のフレームアクションで音を鳴らし、以降はフレーム1に戻らずフレームアクションが実行されないようにする、という手もあります。

Saku39aqua
質問者

お礼

お礼つけわすれてました;; とっても参考になりました~!! ありがとうございます!

Saku39aqua
質問者

補足

回答ありがとうございました! 過去の回答なども参考にためしてみます!ものすごく勉強になります。 この回答をいただく前に試行錯誤をしつつなんとか形になったスクリプトがあったのですが、ごちゃごちゃしてしまいました。眺める程度に見てやってください・・・。 ON・OFFムービークリップ内にレイヤーを3つ作って 「一番下のレイヤー」 ●1フレーム目OFFシンボル配置以下スクリプト on (release) { gotoAndPlay(14); } ●12フレーム目OFFシンボル配置以下スクリプト on (release) { sample.setVolume( 0 ); gotoAndPlay(13); } ●13フレーム目ONシンボル配置以下スクリプト on (release) { sample.setVolume( 100 ); gotoAndPlay(12); } ●14フレーム目ONシンボル配置 ●15フレーム目ONシンボル配置以下スクリプト on (release) { sample.setVolume( 0 ); gotoAndPlay(12); } 「真ん中のレイヤー」 ●12、13、15フレーム目の空白キーフレームに以下スクリプト stop(); 「一番上のレイヤー」 ●11フレーム目の空白キーフレームに以下スクリプト sample = new Sound(); sample.attachSound("○○○○"); sample.start(0,999); sample.setVolume( 100 ); ●14フレーム目の空白キーフレームに以下スクリプト sample = new Sound(); sample.attachSound("○○○○"); sample.start(0,999); sample.setVolume( 0 ); という感じです(すいません・・・とってもわかりづらいですね;)。 あっちこっちに指示を出しまくりました;汗と涙の結晶です・・・ しかしDPEさんの回答を参考にするとこんなにいろんなところに指示をしなくてもいいのですね。 上司から、サウンドは再生したままON・OFFがしたい(音がOFFのときも再生時間が経過している状態)ってことで混乱してしまいました・・・ 長々とすみません。本当にありがとうございました! では参考しつつ試行錯誤してみます!

関連するQ&A

  • 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
  • FLASHにサウンドを取り込みたい

    flash cs5を使用していますが Actionscriptは2.0で作業をしています。 やりたいことは ライブラリにあるサウンドファイルにリンケージ設定をして 効果音を利用したいのですが 以下のスクリプトでうまく音が出ません。なぜなのでしょうか。 教えてください。 ※リンケージは bgm と設定。 ファイルの拡張子はmp3とかwavでやってみました。 (1)フレーム1に _root.s1_sound=new Sound(); _root.s1_sound.attachSound("bgm"); _root.s1_sound.stop(); (2)ステージのボタンに on(press){ _root.s1.sound.start(); } と記述して実行しても音が出ません。 どうしてなのかわかりません。 よろしくお願いいたします。

  • flashのBGMのoff/onボタン

    はじめまして。Flashがまだよくわかっていない初心者です。マニュアル本、こちらのhttp://oshiete1.goo.ne.jp/qa1789705.htmlを参考にやってみましたが、わかりません。お願いです。教えてください。 最初に開いたらBGMがデフォルトで鳴っていて、「サウンドOFF」ボタンを押すとBGMは停止し、アニメーションは最後までという内容です。 現在の状況および作成手順ですが、 「シーン1」には2つレイヤーがあり、1つ目のレイヤーは「but」とし、これにはサウンドOFF/ONのムービークリップを配置してあります。フレームは1つだけで、ここに下記を記述(action)しました。 ---------------------------------------- onClipEvent(load) { //サウンドを挿入 snd = new Sound(); snd.attachSound( "BGM" ); //無限ループ再生設定 snd.onSoundComplete = function() { this.start(); }; //サウンドの再生状況を保持する変数 //再生時true、それ以外はfalse play_flg = false; //再生状況に応じたフレームを表示 gotoAndStop( Number( play_flg ) + 1 ); } on(release) { //サウンド再生時は止める if( play_flg ) { snd.stop(); play_flg = false; } //停止中の場合は再生する else { snd.start(); play_flg = true; } //再生状況に応じたフレームを表示 gotoAndStop( Number( play_flg ) + 1 ); } ---------------------------------------- 2つ目のレイヤーには「写真」という名前で写真5枚がフェードインアウトしながら切り替わる、というムービークリップを制作しました。 これをプレビューすると、ムービーは実行されますがBGMは鳴りません。また「サウンドOFF」「サウンドON」のボタンが繰り返してしまいます。 デバック出力で下記エラーと表示されます。 ---------------------------------------- **エラー** シーン = シーン 1, レイヤー = but, フレーム = 1 :行 1:クリップイベントはムービークリップインスタンスでのみ使用可能です。 onClipEvent(load) **エラー** シーン = シーン 1, レイヤー = but, フレーム = 1 :行 21:マウスイベントはボタンインスタンスでのみ使用できます。 on(release) ActionScript エラー数 :2 報告済みエラー :2 ---------------------------------------- どうかどのようにしたらいいのか教えてください。お願いします。

  • 外部読み込みムービー上の音楽制御

    ステージにムービークリップを置いて、そこに外部のムービーを読み込んでいます。 その外部のムービー上で音楽が流れており、その音楽のボリュームを変えたいと思っているのですが、どうもうまく行かないのです。 下記はボリュームオン・オフ用のムービークリップに書いたスクリプトです。(music_button) //クリックされた時にオン・オフを切り替える on(press){ music = music * (-1); //サウンドのオンオフを切り替える s1_sound.setvolume(music*100); if (music = 1){s1_sound.start();} else{s1_sound.stop();} } 外部のムービークリップ上の音楽には「BGM」という識別子をつけています。 上記のmusic_buttonの置いてあるメインタイムラインの2フレーム前で _global.s1_sound = new Sound(); s1_sound.attachsound("BGM"); という宣言をしています。 何か音楽を制御するための要素が足りないのでしょうか。あるいは、階層の指定などが間違っているのでしょうかね。。。 何か手がかりをご存知の方よろしくお願いします。

    • ベストアンサー
    • Flash
  • ゲージと連動したムービークリップのアニメーションを動かす方法

    アクションスクリプト初心者です。 サンプルでいただいたムービーを参考に、ファイルを作成しなければならないのですが、うまく動かなくて困っています。 画面に横に長い帯(ゲージ)を置き、その上をマウスで横にスライドさせると、ムービークリップの中のアニメーションがマウスの動きと連動して動くというアニメーションなのですが、うまく動きません。 サンプルでいただいたファイルの帯(ゲージ)の部分、(これもムービークリップです) には -------------------------------------------- onClipEvent (mouseMove) { if (this.hitTest(_root._xmouse, _root._ymouse, true)) { _root.pressure.gotoAndStop(Math.round(((_root._xmouse)/12))); } } -------------------------------------------- と入っていました。 他には、STOPしか入っていませんでした。 数値を変えてみたりしたのですが、アニメーションの途中から動いたり、うまく連動してくれません。 どうやら、サンプルでいただいたムービーと、ファイルサイズが違うことと、新たに作成するファイルは、帯(ゲージ)を画面の右側に置かなければいけないところがうまくいかない原因のひとつかと、わからないながらに思っているのですが・・・; 環境は、Windows2000、FLASHMX2004です。 どなたか、よろしくお願いします。m(__)m

  • flashのサウンド再生をスクリプト制御する方法

    1.flashのアニメーションをしている背景でサウンドを鳴らす 2.on/offボタンで制御 3.サウンドoff状態でスタート、onボタンを押すことでサウンドがループ再生 4.アニメーションが終わる頃にフェードアウト …という条件なのですが、3の条件がクリアーできません。 最初から鳴らしてon/off→フェードアウトは、過去ログを読むことでなんとかクリアー出来たのですが…。 onボタンを押してサウンドがスタート、というのが出来ません。 どうか宜しくお願いします。

  • 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
  • シーンをまたいだサウンドon/offボタンの設定

    シーンをまたいだサウンドon/offボタンの設定 お世話になります。 前回の質問で解決に至らなかったので再度お願いしたいと思います。 まず、やりたい事としまして、 ・BGMを一つのボタンでon/offを切り替えたい、音も表示も(ON)(OFF)というように。 ・シーンが1~4まで有り、BGMはシーンの切り替わりに関係なく1つのBGMがループで鳴るようにする。 ・表示したいFLASHとサウンドボタンは別けたくない(ローデング画面を入れてるのでローディングが  終わり次第サウンドがスタートされるようにしたいので1つのFLASHで制御する。) 下記を拝見し途中まではうまくいきました。 http://okwave.jp/qa/q3342022.html http://okwave.jp/qa/q1789705.html シーン1では問題なく音も表示もON/OFF切り替わります。 ただし シーン2以降ではon/off表示切り替わりません。(音はon/offになりますが表示が変わらないのです。) どうしても1つのフラッシュで制御したいのでなんとかこの方法を完成させたいのですが、、 ご指導いただければ幸いでございます。。 現在の行ってる方法としては、リンケージの設定を行い、Sound クラスで制御。 ON 、 OFF ボタンをムービークリップとして作り、フレーム1に OFF、フレーム2に ON の時に表示する絵を描いて、 そのボタンをそれぞれのシーンへ配置。 下記アクションスクリプトを記述 まず シーン1 ローデイィング終了と同時にBGMスタートさせたいので フレーム3に onClipEvent(load) { snd=new Sound(); snd.attachSound("bgm"); snd.onSoundComplete =function() { this.start(); }; snd.start(); //サウンドの再生状況を保持する変数 //再生時true、それ以外はfalse play_flg=true; //再生状況に応じたフレームを表示 gotoAndStop(Number(play_flg)+1); } on(release) { //サウンド再生時は止める if(play_flg) { snd.stop(); play_flg=false; } //停止中の場合は再生する else { snd.start(); play_flg = true; } //再生状況に応じたフレームを表示 gotoAndStop(Number(play_flg)+1); } そしてループの際音がダブってスタートしないようにsnd.start();を抜き、これ以降は シーン1フレーム3のsnd.start()を通らないおうタイムラインで制御。 フレーム4、シーン2以降のフレーム1に下記アクションを記述。 onClipEvent(load) { snd=new Sound(); snd.attachSound("bgm"); snd.onSoundComplete =function() { this.start(); }; //サウンドの再生状況を保持する変数 //再生時true、それ以外はfalse play_flg=true; //再生状況に応じたフレームを表示 gotoAndStop(Number(play_flg)+1); } on(release) { //サウンド再生時は止める if(play_flg) { snd.stop(); play_flg=false; } //停止中の場合は再生する else { snd.start(); play_flg=true; } //再生状況に応じたフレームを表示 gotoAndStop(Number(play_flg)+1); } ゴールデンウィークはこれを調べるので潰れてしまいました。。。(泣 しかも今だ解決できていません。 どうか皆々様方よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • flashで、 サウンドONで始まりON/OFFボタンで制御したい

    サウンドが鳴っている状態で始まり、それをON/OFFボタンで制御したいのですが、参考書やネットに載っているものを参考に作ろうとしているのですが、どうしてもできません。 サウンドなしの状態で始まり、それをON/OFFボタンで制御するものは、http://oshiete1.goo.ne.jp/qa2790650.html にある、serial74さんの回答を使わせていただきました。 これを応用すればきっとできるのだと思いますが、参考書を一通り終えた初心者で、いろいろと変えてみたのですがわかりません。 どなたか教えていただけると大変助かります。 以下、“FLASHでサウンドのON/OFFボタンでBGMの再生を制御したい”の質問へのserial74さんの回答です。 引用はじめ-------- may_07さんの求めていらっしゃるレベルが分からないので細かく書いていますが「こんなの知ってるよ」と気を悪くなさらないでくださいね。 ▼コレをボタンにしたいムービークリップに書いてみてください。 ************************* onClipEvent(load){ Oto=new Sound(); //サウンド用空オブジェクトOtoを作る Oto.attachSound("xxxxxx"); //Otoにサウンドを割り当てる SoundFlag=false; //音の状態フラグをfalse=鳴っていないにしておく } onClipEvent(enterFrame){ this.onPress=function(){ //コレをクリックしたとき if(SoundFlag==true){ //音が鳴っていたら Oto.stop(); //音を止める SoundFlag=false; //音の状態フラグを切り替える } else{ //音が鳴っていなかったら Oto.start(0,999); //音をループ再生 SoundFlag=true; //音の状態フラグを切り替える } } } ************************* ●すでに音の読み込みができている状態でしたらonClipEvent(load){}内はムシしてください。 ●「Oto」「SoundFlag」は変数なので自分のわかりやすい名前にしてください。 ●「xxxxxx」はライブラリを開く→読み込んだサウンドを選択→ライブラリのメニュー→リンケージ→識別子でつけた名前です。 ●サウンドをスクリプトで扱うときは、サウンド自体に名前(識別子)をつけて、さらにサウンドオブジェクトにしてあげて(よく「関連づける」と言われます)、サウンド オブジェクトの設定をいじる、といった流れです。 引用おわり-------- serial74さんの回答のとおりに私が作ると、ボタンを押しても1回目は反応がなく2回目にサウンドONになります。(ブラウザを通した場合) ブラウザを通さずswfそのものでは、ボタンを押すと1回目でONになります。 きっと基本的なところでつまずいているのだと思いますが、原因がわかりません。こちらについても原因がお分かりの方がいらっしゃったらご教示ください。 どうぞよろしくお願いします。

  • フラッシュ サウンドのフェードアウト(シーン終わりで自動的に)

    はじめまして。アクションスクリプトに不慣れで、 うまくいかなくなってしまったので、質問させてください。 フラッシュムービーを制作しているのですが on/offボタンでBGMがループして鳴るような設定を 以下を参考にさせていただき、つけました。 http://oshiete1.goo.ne.jp/qa1789705.html そしてさらに私がしたいことは、 「その音をつけたシーン」が終わる直前で、 フェードアウトしながら音を消してから次のシーンに行くことなのですが(音を鳴らしていた場合)、 その際はタイムラインにどのようにアクションスクリプトを記入すればよいのでしょうか??。 それとも、on/offのオブジェクトにアクションスクリプトをつけるべきなのでしょうか?。 stopAllSounds();を記入すると「プツっ」といきなり音楽が途切れてしまいますよね。 そこで自分なりに調べて.setVolumeなども試してみましたが、どうもうまくいきません。 私が勉強不足なので、簡単なことなのかもしれないのですが、 どなたか詳しい方、お教えいただければとてもうれしいです。

    • ベストアンサー
    • Flash