FLASHサウンドの同期を取った音のOFFボタンは作れますか?

このQ&Aのポイント
  • FLASH初心者ですが、アニメーションに合わせて音を鳴らす方法を教えてください。
  • サウンドをタイムライン上に乗せて、プロパティの設定で「同期:ストリーミング」にしていますが、OFFボタンの追加方法がわかりません。
  • アニメーションの動きと同期を取った音にOFFボタンを付けることは可能でしょうか?
回答を見る
  • ベストアンサー

FLASHサウンドの同期を取った音のOFFボタンは作れますか?

FLASH初心者です・・・どうか助けてください。 FLASHで、アニメーションに合わせて音を鳴らすように作りました。 アニメーションの動きに音がピタリと合うようにしたいので、 サウンドをタイムライン上に乗っけて、プロパティの設定で 「同期:ストリーミング」にしてあります。 ここまでは良かったのですが、音のOFFボタンを付けたいのですが、 たくさん調べましたがやり方がわかりません!!(涙) アニメーションの動きに合わさず、ただただBGMとして音を鳴らした場合は リンゲージなどを使ってOFFボタンが付けられるのだな、と 調べているとわかりました。 今回の私のような、アニメーションの動きと同期を取った音に、OFFボタンをつけることは可能なのでしょうか? どうか、やり方を教えていただければと思います! よろしくお願いいたします。

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

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

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

#1です。 ON / OFF に応じて絵が変わるボタンは、ムービークリップのフレームに OFF と ON の絵を描いておいて、クリックされるたびに表示するフレームを gotoAndStop で切り替えます。 音量を if 文で判断して、OFF だった時に OFF の絵を描いたフレームを表示する・・・というように作ってもいいのですが、フレームの構成を工夫すると、if 文を使わずに表示するフレームを算出することもできます。 ON / OFF ボタンとして使うボタンを、今度は”ムービークリップシンボル”として作ります。 シンボルの編集画面になったら、フレーム1に” OFF ”の時に表示する絵、フレーム2に” ON ”の時に表示する絵を描きます。 シンボル内にもう1つレイヤーを追加し、フレーム1にキーフレームを作って stop(); アクションを記述してください。 以上でムービークリップは完成です。 次はスクリプトを書きます。 **************************** ActionScript では、変数や関数、ボタン・ムービークリップなどのインスタンスには全て、持ち主がいると考えます。 変数などを利用したりインスタンスに指示を出す時は、誰が持っているものなのか、その持ち主を正確に指定しなければなりません。 持ち主を指定するものを”ターゲットパス”といいます。 ターゲットパスは、自分が持っているものであれば省略することもできます。 ON / OFF ボタンが常にステージに存在していて、シーンをまたいだりモーショントゥイーン等でキーフレームが変化するようなこともないとすると、必要な変数などは全部このムービークリップのものにしておいた方が、ターゲットパスを省略できて簡単です。 ただし、この場合は、Sound オブジェクトで制御する対象( new Sound に渡すパラメータ)が this =自分自身ではなく親のタイムラインに変わりますので、ご注意ください。 この話を真面目に説明すると難しくなるのですが、簡単に言いますと、ON / OFF ボタンをムービークリップにすると、音を鳴らしているタイムラインが、自分ではなく親のタイムラインと見なされるように変わるためです。 今回は、スクリプトは ON / OFF ボタンとして使うムービークリップのインスタンスにのみ書きます。 このムービークリップは、フレーム1に” OFF ”の絵、フレーム2に” ON ”の絵が描かれているものとします。 #1で作成したフレームのスクリプトは、削除するか、コメントにしてください。 (↓各行頭に全角のスペースが入っています。コピーする際はご注意ください)  //最初の1度だけ、初期設定を行う  onClipEvent(load)  {   //最大音量   max_vol = 100;   //親のタイムラインの音を制御するSoundオブジェクトの作成と   //音量の初期化   snd = new Sound( _parent );   snd.setVolume( max_vol );   //”ON”のフレームを表示   gotoAndStop( 2 );  }  //クリック時の処理  on(release)  {   //新しく設定する音量を決める   new_vol = max_vol - snd.getVolume();   //音量を設定   snd.setVolume( new_vol );   //ON/OFFに応じたフレームを表示   gotoAndStop( new_vol / max_vol + 1 );  } #1では、current_vol という変数に getVolume メソッドで取得した音量を入れ、これを max_vol から減算することで、0 と max_vol の値を交互に取得していました。 今回は getVolume から取得する部分を直接演算の式に組み込み、設定する音量を new_vol という変数に入れています。 つまり、new_vol には#1の max_vol - current_vol と同じ結果が入りますので、値は 0 または max_vol のどちらかになります。 この点を利用して、ムービークリップの表示フレームを決めます。 ON / OFF ボタンとして使うムービークリップのフレームは2つで、OFF の時の絵がフレーム1に描かれています。 new_vol は OFF の時に 0 、ON の時に max_vol の値になりますから、これを max_vol で除算します。 すると、答えは 0 か 1 のどちらか( OFF の時に 0 、ON の時に 1 )になります。 こうして求めた値に 1 を加算すると、if 文で判断しなくても ON / OFF の状況に応じたフレームの番号を求めることができます。 絵が変わるボタンとはつまり、ON / OFF の状況に応じてフレームを切り替えればいいだけの話です。 計算式やフレームの構成が思いつかない時は、if 文で  //ON/OFFに応じたフレームを表示  if( new_vol == 0 )  {   gotoAndStop( 1 );  }  else  {   gotoAndStop( 2 );  } と書いても同じです。 if 文ならフレームの番号でなくてもいいので、フレームラベルを利用すると分かりやすくなると思います。

norinorico
質問者

お礼

できましたーーー(涙)!! DPE様、このたびはとっても詳しい、しかも初心者の私にもわかるように 教えてくださり、本当に本当にありがとうございました。 何と感謝申し上げていいのかわからないくらい感激しております。 本当にありがとうございました! 心からお礼申し上げます。

その他の回答 (1)

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

同期をとる鳴らし方(ストリーミング再生)では、各フレームのデータの中にそのフレームで鳴らすべき音のデータが書き込まれ、フレームが再生されるたびに音の再生処理も一緒に行われます。 そのため、いわゆる” OFF にする=音を止める”という考え方では難しくなります。 ストリーミング再生において音の ON / OFF を切り替えるとは要するに、ON の時に音量を最大に、OFF の時に最小= 0 にすればいいわけです。 OFF =停止ボタンではなく、テレビなどにあるミュート(消音)ボタンの発想ですね。 ストリーミング再生の音をスクリプトで停止させるのは難しいのですが、音量を絞って音が聞こえないようにするのなら、音量を制御するスクリプトで簡単にできます。 -------------------------------------------------------------- お使いの Flash のバージョンが書かれていませんので、とりあえず、ActionScript 1.0 の作例をご紹介します。 Flash CS3 をお使いの場合は、「パブリッシュ設定」で ActionScript のバージョンを 1.0 または 2.0 に設定してください。 音の OFF ボタンもしくは ON / OFF ボタンを、”ボタンシンボル”として作成してください。 レイヤーを1つ追加し、最初のフレームにこのボタンを配置します。 ボタンのレイヤーは、最初のフレームだけがキーフレーム(ボタンが配置されている状態)、残りはキーフレームと同様の内容を繰り返すフレームにして、ボタンを最後までステージに存在させるようにします。 もう1つ、レイヤーを追加してください。このレイヤーにはスクリプトを書きます。 以上で準備は完了です。 次はスクリプトを書きます。 **************************** スクリプトは、フレームとボタン(のインスタンス)の、両方に書きます。 フレームのスクリプトは、最初のフレームに記述してください。 (↓各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください。このまま使うとシンタックスエラーになります)  ●フレームに書くスクリプト   //最初の1度だけ、初期設定を行う   if( snd == undefined )   {    //最大音量    max_vol = 100;    //このタイムラインの音を制御するSoundオブジェクトの作成と    //音量の初期化    snd = new Sound( this );    snd.setVolume( max_vol );   };  ●ボタンのインスタンスに書くスクリプト   on(release)   {    //音量を絞る    snd.setVolume( 0 );   } ↑単純に OFF にするボタンなら、クリックした時に音量を 0 にするだけで済みます。 押すたびに ON / OFF を切り替えるボタンにするには、次のようなスクリプトに変更してみてください。   on(release)   {    //現在の音量を取得    current_vol = snd.getVolume();    //音量を設定    snd.setVolume( max_vol - current_vol );   } getVolume は、音量を設定する setVolume の対になるもので、現在設定されている音量を取得する命令(メソッドといいます)です。 最初の状態ですと、変数 max_vol (最大音量)の値が返ってきます。 返ってきた値を変数 max_vol から減算し、この結果を setVolume で設定することで、音量に 0 と max_vol を交互に指定することができます。 ActionScript で扱える音量の最大値は 100 です。 音量が大きすぎる時は、max_vol に 100 より小さい値を設定して調整してください。 今回は、シーンをまたいで曲が鳴っている・ ON と OFF の時でボタンの絵を切り替える・・・などの事情は考慮していません。 絵が切り替わるボタンは、ボタンシンボルではなくムービークリップシンボルとして作ると簡単ですが、この場合は Sound オブジェクトや変数のターゲットパスに注意が必要です。 機会がありましたら、改良してみてください。

norinorico
質問者

補足

とっても詳しい解説をいただき、本当にありがとうございます!! 教えていただいた方法で早速やってみました。 わかりやすい解説をいただいたお陰で、OFFにするボタン、ならびに ONとOFFを繰り返すボタンを作ることができました。 大変感激しています。本当にありがとうございます。 ここで、いざ作ってみると、ONとOFFの時でボタンの絵を切り替えるように作ってみたいと思うのですが・・・、 Soundオブジェクトや変数のターゲットパスに注意と教えていただいたにも関わらず やってみましたがうまくできません・・・。 何度もお手数なのですが、このときにONとOFFとでボタンの絵を切り替える方法を教えていただいてもよろしいでしょうか?? 甘えてばかりですみません! どうかよろしくお願いいたします!!

関連するQ&A

  • FLASH サウンドON/OFFボタン

    FLASHでサウンドのON/OFFボタンで BGMの再生を制御したいのですが うまくいきません。 本をみていろいろ試してみたのですが… 簡単な記述方法がありましたら教えてください。 宜しくお願いします!

  • ●Flash MX サウンドのon/offボタン

    現在、個人的にflashでアニメムービーを制作している所なのですが、 ON/OFFボタンについて質問させて頂きます。 flashは使って3年ほどになりますが、主に描画やアニメなど特定の機能しか使っておらず、 フラッシャーとしてまだ初心者の域を出ていません; BGM、効果音のON/OFFボタンについて、stopAllSoundsを使うなど、自分なりに色々試してみても思い通りの結果にならず、過去ログなどを参照しても全く解らなかったので改めて質問させて頂きます。 約1分ほどのムービーの頭にロード画面、「START」ボタンを押してムービーが流れる仕様です。 ムービーの作り方は、カットごとにムービーファイルを作り、効果音はそのファイルに当てはめています。 そして、カット毎に作ったファイルを「新規のムービーファイル」に順番に並べてはめ込み、1分のムービーとして流れるようにしています。 BGMは、「新規のムービーファイル」にはめ込んであります。 ムービー中に、BGMがずっと鳴り続け、途中にムービーの内容に合わせて効果音を鳴らすようにする、そこまでは出来たのですが、 ON/OFF機能を実行させる事が出来ません。 処理としては、OFFを押した時に、BGM・効果音ともにボリュームをゼロの状態に、 ONを押したら、またBGM・効果音が最初から鳴り始めるのではなく、ボリュームを100の状態になるようにしたいんです。 ON/OFFボタンは、常にムービーファイル上に表示させています。 どういう書き方、作り方をしたら上手く機能するんでしょうか? 宜しくお願いします。

  • サウンドの同期(スクリプトでタイムラインにサウンドを埋め込んだ場合)

    音がどうしてもずれて非常に困っています。 タイムラインに直接サウンドファイルを埋め込む場合は、「ストリーミング」を選択して同期をとることができますが、スクリプトによって埋め込んだ場合はどのようにして同期をとることができるのでしょうか? たとえば次のように最初のフレームに書きます。 mySound1.attachSound("001.wav"); mySound1 = new Sound(); そしてフレームのたとえば100番目でこの音を再生するために、100番目のタイムラインに次のように記述します。 mySound1.start(); このようにするとなぜか音の再生が遅れるのです。 お助けください。 環境:flash8 AS2.0 WindowsXP

    • ベストアンサー
    • Flash
  • Flashでの音の同期について

    いつも参考にさせていただいております。 現在FlashにてCD-ROM再生を目的としたオーサリングを制作しております。(exeで再生) ナレーション(wavファイル)を26ファイル読み込み、画像とナレーションを同期をさせるものです。 波形にあわせて、音が終了してから、10フレームほど、間隔をあけ、画像のキーフレームを切り替える、ということをしていますが、ナレーションの間隔にかかわらず、どんどん、音が再生されてしまい、音と画像の同期がとれません。(swf、exeともに同期がとれません) 音を貼り付けたフレームプロパティの設定は、 効果:なし、同期:ストリーミング、繰り返し。 ムービーサイズは800x600 フレームレートは20fps としています。 音と画像の同期をとるための効果的な方法はあるのでしょうか?

  • soundのon/offボタンの作成について

    WinXP Flash MX 2004でflashのコンテンツを作っています。 音が出るようになっているのでサウンドのon/offボタンを作りました。 on/offの切り替えは出来るのですがそのボタンに現在の状況を表示させたいと思っています。 サウンドonの時・・・ボタンの絵が「音がでている絵」 サウンドoffの時・・・ボタンの絵が「音がでていない絵」 フラグを立てて、ボタンの中に絵が二種類入っているmcを入れて、フラグをチェックするようにしたのですがボタンの中に入っているmcをうまく制御することは出来ませんでした。 (同じmcをボタンの外にだすと、フラグによって絵が変わるのは確認しました。) ちなみにボタンの絵は、 アップの時、黒い絵 オーバーの時、赤い絵 ダウンの時、赤い絵で右に1px、下に1pxずれます。(ボタンを押し込んだ感じです。) サンプルやヒントになるものがありましたらご教授ください。 よろしくお願いします。

    • ベストアンサー
    • 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ボタンの設定

    シーンをまたいだサウンド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にサウンドを取り込みたい

    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のサウンド再生をスクリプト制御する方法

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

  • ホームページにサウンドの「ON」「OFF」ボタンをつける

    BGMとしてホームページにサウンドをつけたいのですが そのサウンドの音量を消したい人は消せるように、「ON」「OFF」のボタンをページにつけたいのです。 そのボタンを「自作の画像jpg」にしたいのですが、どうすればよいのでしょうか?初心者なのでどのようなソースをどこに入れれば良いのか教えて下さい。