D0308211 サウンドイコライザーのPAUSE(一時停止)はどうやるの?
Name Blacky
Date 2003年08月21日 (木) 17時01分
Message 憲ちゃん様
 独学でFlashを勉強していて、このサイトは大変勉強になります。
そこで、教えてほしいのですが・・・以前のQ&Aに『メニューでサウンドを選択して再生するには』と言うのを参考にサウンドプレイヤーを作りました。
一通り出来たのですが、サウンドイコライザーを付加した所、サウンド(別ファイルswf)との同調性が上手く出来ません。
別にサウンドイコライザーで無くてもアニメショーンでも良いと思うのですが、「PAUSE」ボタンが厄介でサウンドと共にアニメーションも一時停止させる事が出来ません。
「PLAY」ボタンや「STOP」ボタンなら、フレームを分けてやれば簡単にサウンドと同調出来ますよね?
他のサイトではよく見かけるのですが、どういったテクがあるのでしょうか?
何かアドバイスいただけると助かります、宜しくお願い致します。
Response 01
2003年08月23日 (土) 01時05分> 憲ちゃん 
Blackyさん、はじめまして、こんばんわ(^^)

本体だけの単一のタイムラインで行おうとすると無理があります。
付加したイコライザーを本体ムービーの中で「ムービークリップ(独立したタイムライン)」に
すればいいのです♪
例えば・・・
ストップボタンでは黒丸、プレイボタンで緑丸、ポーズボタンで赤丸に変化するようなものを
作ろうとすると・・・

このようなムービークリップ、色レイヤーに1フレームから順に、黒丸、緑丸、赤丸図形が入り、
アクションレイヤーの1フレームに stop();アクションを記載します。
これをコントロールボタンの本体ムービーの適当なところに配置し、
インスタンス名を仮に「maru」と付けたとします。
ご参考にされた メニューでサウンドを選択して再生するには での選択ボタンの説明は省略しますが、
外部のサウンドSWFを読み込んだ後の各コントロールボタンのアクションに、
外部ムービーのコントロールに加え、次のように「maru」MCのタイムラインを移動させます。

ストップボタン

 on (release) { ←クリックされたら
   _level1.gotoAndStop(1); ←レベル1のムービー1フレームに戻って停止(最初に戻り無音)
   _root.maru.gotoAndStop(1); ←(同時に)「maru」MCの1フレームで停止(黒丸)
 }

プレイボタン

 on (release) { ←クリックされたら
   _level1.Play(); ←レベル1のムービーの再生(曲が流れる)
   _root.maru.gotoAndStop(2); ←(同時に)「maru」MCの2フレームで停止(緑丸)
 }

ポーズボタン

 on (release) { ←クリックされたら
   _level1.stop(); ←レベル1のムービーの再生をその場で停止(曲が止まる)
   _root.maru.gotoAndStop(3); ←(同時に)「maru」MCの3フレームで停止(赤丸)
 }

これは、再生中アニメーションしませんが、少なくともボタンに応じて態様を変化できます。
「maru」MCの2フレームに、アニメーションするMCを配置すれば再生中だけ動きます(^^)
このムービークリップをいろいろに工夫すれば面白いですね♪

サンプルは、MCに簡単なアクションスクリプトを使って動作させています。


sound_ctr0.fla
※サウンドflaは、とても容量が大きいのでサーバーに上げられません!
ご自分のサウンドファイルを当てはめてください(^^g/~~

緑の縦長のバーがムービークリップで、それをコピー&ペーストで等間隔で横に並べています。
※ブロックのように見えるのは、その上のレイヤーに背景と同じ色の横線を何本も書いているだけ(笑)
@ステージに緑の線無し四角図形を描きそれを「シンボルに変換」でムービークリップにします。
AMCの中心点を底辺に移動。(底辺を基点に上に延びたり縮んだりさせるため)
 MCを上下に伸縮させるときは、インスタンス名._yscale というプロパティです。
 元の大きさを100として、これに例えば80を代入すると、縦方向に80%に縮小されます。
BそのMCを選択して、アクションパネルからクリップアクションとして・・・

 onClipEvent (load) { ←最初にMCが読み込まれたとき(だけ、初期値として)
   this._yscale = 5; ←自分の大きさを縦方向5%に縮小
   _rooy.sw = 0;   ←元のタイムラインの変数swに0を代入(後でボタンからこの値を変える)
 }
 onClipEvent (enterFrame) { ←フレームレート(通常1/12秒)ごとに以下のことを繰り返す
   if (_root.sw == 1) { ←もし、変数sw が1なら
     this._yscale = Math.random()*100; ←1〜99までの乱数の値に自分の大きさを縮小※
   } else { そうでなかったら
     this._yscale = 5; ←自分の大きさを5%に縮小
   }
 }

※乱数については、過去記事にいろいろなところで説明していますのでそれを参照してくださいね。

これの意味は・・・
最初このバーMCが読み込まれたとき、元の大きさの5%で表示され、
変数swが1になっている間、1/12秒ごとに乱数の値に従って、縮小幅を変化し続けます。
変数swが1でないとき、縮小幅は5%を維持します。

それで、その変数swの値は、ボタンアクションで・・・

ストップボタン

 on (release) {
   _level1.gotoAndStop(1);
   _root.sw = 0; ←swに0を代入(=バーMCの大きさ5%を維持)
 }

プレイボタン

 on (release) {
   _level1.Play();
   _root.sw = 1; ←swに1を代入(=バーMCの大きさを乱数で繰り返し変化)
 }

ポーズボタン

 on (release) {
   _level1.stop(1);
   _root.sw = 2; ←swに2を代入(=バーMCの大きさ5%を維持)
 }

もう説明はいりませんね(^^g/~~
あとは、ステージにあるバーMCをコピー(こうすればスクリプトごとコピーできます)して、
適当数横に貼り付けておけば、それらしく見えますね(笑)
元は同じシンボルでも、ステージにあるものは、別々の独立したインスタンス(分身)ですから、
乱数計算の値はバラバラになります。

実際のサンプルは、上の色丸と組み合わせていますが、ちょっとだけひねっています(笑)
flaファイルをダウンロードして研究してください♪
Response 02
2003年08月24日 (日) 17時31分> Blacky 
憲ちゃん様

 わざわざ、サンプルファイルを作って頂き、ありがとうございました。
私の説明が悪く、再度説明させてもらいます。
えっと、ポーズボタンでイコライザーも一緒に一時停止させたいのです。
サンプルのようにストップボタンと同じにするのではなく、イコライザーのアニメーションが表示されたまま一時停止する方法が分かりません。
度々申し訳ありませんが、宜しくお願い致します。
Response 03
2003年08月24日 (日) 23時15分> 憲ちゃん 
イコライザーは、ポーズのときは音量0になるので元に戻るのかと思ってましたよ(;^_^A汗

アニメーションの作り方によって、方法は様々(黒・緑・赤の応用)ですが・・・
上の波形の分でいえば・・・
ストップ(sw=0)のとき5%維持、プレイ(sw=1)のとき、乱数幅の繰り返し、
ポーズ(sw=2:それ以外)のとき、現在の値を保っておればいい・・ということは何もしなければよい!
上記の条件文を次のようにするだけです(*^.^*)

 onClipEvent (enterFrame) { ←1/12秒ごとに以下のことを繰り返す
   if (_root.sw == 1) { ←もし、変数sw が1なら
     this._yscale = Math.random()*100; ←1〜99までの乱数の値に自分の大きさを縮小
   } else if (_root.sw == 0) { ←そうでなくて、もし変数swが0なら
     this._yscale = 5;      ←自分の大きさを5%に縮小    
   }
 }

※それ以外のとき(sw=2)は、何も指示していないので、
最後の「this._yscale」の値が代入されたまま、何もしない!!
つまり、ポーズボタンが押された瞬間の状態で空回りし変化しないことになります。


sound_ctr1.fla
Response 04
2003年08月25日 (月) 08時45分> Blacky 
なるほど〜。
恥ずかしいのでUPしなかったのですが、書籍や此処の記事等を参考に自分なりに出来ていました。
(憲ちゃんの最初のサンプルのように・・・)
しかし、応用が利かないんですよね〜。
それなりに自分で考えて試行錯誤してみるのですが、泥沼状態に陥ってしまいます。(;^_^A汗
時々偶然(?)解決する時もあるのですが、アドバイス頂けると大変助かります。
でも、Flashを触り始めた頃から比べると、此処のHPのおかげでそれなりに何とか思う形を自分で作成出来るようになりました。
また、お世話になる事もあるかと思いますが、宜しくお願い致します。

このページの先頭へ