D0601103 複数の選曲ボタンのあるMUSIC PLAYERの作成(1)
Name Yutaro
Date 2006年01月10日 (火) 17時38分
Message いろいろと音楽を再生するFlashがあったのですが、
http://mia.mods.jp/のmultimedia>musicにあるような
ものを作りたいのですが、できません。
説明をお願いできませんか?Flash5 です。
Response 01
2006年01月11日 (水) 05時52分> 憲ちゃん 
はじめまして?、Yutaroさん。
ご紹介のサイトのどの機能をお尋ねかわからないので、とりあえず以下の記事を参考にしてください。

■音量調節スライドバーについて
■サウンドのON/OFFボタン
■サウンドイコライザーのPAUSE(一時停止)はどうやるの?
■音量調節の回転つまみの作り方
■SEをそのままにBGMのサウンドボリュームを下げたい。
■MCに読み込んだswfの音量調節バー<ビデオ用>

MX以降から、ムービー外にある外部サウンドファイルを読み込んで再生できるようになりましたが、
Flash5では、サウンドファイルを編集段階で読み込んでから使用します。
サウンドを読み込んだSWFファイルを、外部SWFとして読み込むこともできます。
上記記事はすべてFlash5用です。
Response 02
2006年01月11日 (水) 18時57分> Yutaro 
挨拶忘れてました。すいません。はじめましてです。
作りたいのは mia(http://mia.mods.jp/mia/mia.htm)の
右のmenuのmultimediaの中のmusicにある、
mia audio playerのようなものが作りたいです。
もし作るとしたら、Flash5では最初に読み込みたいMP3などを
すべて入れておかないといけないのですか?
また、そのときいくつかのMP3を再生したいときに
どれを再生するかは、どうやって、指定すればいいですか?
希望は先ほどのHPのように、HTMLでLoadボタンを作って押すと、
FlashでLoadされて、Playを押すとそのMP3が再生されるように
したいのでが。それは、不可能なんですか?
Response 03
2006年01月12日 (木) 01時39分> 憲ちゃん 
あらためて、はじめましてYutaroさん♪

sound1.MP3〜sound3.MP3という3つのサウンドファイルがあれば、
たとえば、s1.swfにsound1.MP3、s2.swfにsound2.MP3、s3.swfにsound3.MP3をというように
それぞれMP3ファイルごとに編集段階でフレームに読み込んでおきます。
同期は「ストリーミング」がWeb上では有利です。
中身はサウンドだけですから、見えないのでムービーの大きさは何でも構いません。
コントロールパネルのあるswfをmain.swfとすれば、
main.swfに曲の選択ボタンを設置して、各々ボタンのボタンアクションで、

 on (press) { ボタンが押されたら
   loadMovieNum("s1.swf",1);←”s1.swf”をレベル1に読み込んで再生
 }     ※他のボタンもレベルはそのままで、読み込むSWFファイル名のみ変更

とします。
サウンドを「ストリーミング」に設定してあると、
レベル1に読み込みが開始されると同時に鳴り出します。
他の選曲ボタンを押すと、先にレベル1で再生されていたSWFと入れ替わりに、
新しいSWFが読み込まれて再生がはじまります。
■メニューでサウンドを選択して再生するには

main.swfの「再生」「停止」等のボタンの説明は、上記の記事にあります(^^)

そして・・・
おっしゃるようなHTML上に配置した選択ボタンからSWFをコントロールするというのは、
JavaScriptを併用しないと実現できません。
過去記事の■「別フレームのムービーを制御する方法」分かりました(^^;を参考にしてください。
ここでは別フレームのHTMLに埋め込んだSWFから、mainのSWFをコントロールしています。
それが・・・

 on (release) {
   getURL ("JavaScript:gotoFrame('flash2');");
 }

この部分ですが・・・
HTML上のGIFファイルから行うなら・・・

 <a href="JavaScript:gotoFrame('flash2');"><img src="***.gif" border=0></a>

こんな感じにすればよいのでは、と思います。
この場合、main.swfの”flash2”というフレームラベルに、
フレームアクションで、loadMovieNum("s2.swf",1); と記述しておきます。
Response 04
2006年01月12日 (木) 19時33分> Yutaro 
何度もすいません。
一応この(http://yu-2.org/flash/)ように作ってみたのですが、
うまくいきません。なぜですか?もうさっぱりです。
あと、曲を読み込むときにいま「*%読み込みました」
のようなものと、曲を読み込んだときに、
曲名を表示したいのですが、それは無理なのでしょうか?

music1.fla : http://yu-2.org/flash/music1.fla
v_control0.fla : http://yu-2.org/flash/v_control0.fla
Response 05
2006年01月13日 (金) 16時37分> 憲ちゃん 
まず、v_control0.flaの「PLAY」「STOP」ボタンですが・・・

 on (release) {
   _level1.play(); 及び _level1.stop();
 }

これは、そのまえに「レベル1」にサウンドの入ったmusic1.swfを読み込んだあとの処理です。
「レベル1」に何も無いのにそのフレームを進めたり停止したりしても意味がありません(^^;
どこかに、「選択ボタン」を設置して、そのボタンに・・・

 on (release) {
   loadMovieNum("music1.swf",1); ←music.swfをレベル1に読み込んで再生
 }

読み込むと「PLAY」「STOP」の各スクリプトが、レベル1にあるmusic1.swfのタイムラインを
停止したり、再生したりできるようになります。

そして、そのmusic1.flaの中ですが・・・
サウンドの同期を「イベント」にしてあると、一旦再生が始まるとタイムラインとは関係なしに
鳴り出しますので、「STOP」ボタンでタイムラインを停止しても鳴り止みません。
この場合は、イベントを「ストリーミング」に設定し、フレーム上の波形が消えるまで
フレームを伸ばしてください。

追加でお尋ねの「曲名を表示」するなら、
music1.flaの1フレームに、テキストで曲名を記載しておきます。
こうなると、見えないSWFではなく見えるSWFになりますので、
v_control0.swfに読み込んだときの表示場所を決める必要があります。
外部SWFの読み込で、レベル階層を指定する場合は、ムービーを本体と同じ大きさにして、
レイアウトを考えて配置する必要がでてきます。

以下のサンプルは、もうひとつの方法、MCに外部SWFを読み込んでいます。
この場合どちらで行っても構いませんが、MCにすると読み込み位置を、本体のほうで
決めることができます。


m_control0.fla  music1.fla

まずサウンドの入ったSWF、music1.flaの編集画面を次の図のようにします。



ムービーの大きさサイズは、文字の部分の大きさにしておきます。
サウンドを2フレームに配置して、同期を「ストリームング」に設定。



これでタイムラインの進行とサウンドデータの再生が一致しますので、波形が消えるまで
フレームを延長します。ループさせない場合は最終フレームに「this.stop();」を記載して、
タイムラインを停止させます。
1フレームのフレームアクションは、次のように記載しています。

 _root.bar.tFrame = this._totalframes-1;

意味は、_rootに配置された「bar」というインスタンス名のMCにある変数tFrameに、
自分の「総フレーム数−1」を代入。
以下でご説明しますが、このSWFファイルは、
選択ボタンなどのある本体ムービー(m_control0.swf)の中のシーン(_root)上にある
「読込MC」に読み込まれて、そのMCとして再生されます。
そして、本体ムービーには同じく_root上に「表示時間」MC(インスタンス名bar)があり、
そこにバーや残り時間を表示するために必要な変数tFrameを置いています。
読み込まれた段階で、そこからこの変数tFrameを指定すると、このようなパスになります。

本体ムービーのシーン上に「選曲してください」の文字の入った「読込MC」と、
選曲用のボタンを3つを配置しています。
「読込MC」のインスタンス名を「mc」と付けて、各選択ボタンのボタンアクションで、

 on (release) { ボタンがクリックされたら
   mc.loadMovie("music1.swf"); ←インスタンスmcの中に"music1.swf"を読み込む
 }   ※他のボタンはそれぞれ"music2.swf"、"music3.swf"としています。

読み込まれると、music1.swfの1フレームからその総フレームの値として、
barの変数tFrameに代入され、時間表示とともにバーの大きさが拡大し、
曲が再生されていきます。
「再生」「停止」ボタンでは、読み込んだインスタンスmcのタイムラインの進行・停止を
制御すればよいので、たとえば「一時停止」ボタンなら、

 on (press) { ボタンが押されたら
   mc.stop(); ←インスタンスmcのタイムラインを停止
 }

このようにすれば良いわけです。
この本体ムービーは「サンプルでまなぶActionScript」のP230、「sample-b34」を転用した
ものです。「表示時間」のしくみ等、詳しくは本で研究してみてください(^^;

「*%読み込みました」というのは、この場合必要ありません。
「ストリーミング」サウンドというのは、1フレームずつデータを読み込んでは再生、
読み込んでは再生を繰り返しながら再生していく方式ですから、相当大きなサイズでも
SWFの読み込み開始とほぼ同時に待ち時間なしで再生が始まります。
Yutaroさんのflaファイルの音質を上げて作成しなおしたサンプルの「music1.swf」のサイズは、
2.3MBです。
「イベント」サウンドは、すべてのサウンドデータを完全に読み込まないと再生が始まらない
というものですから、その場合は「NowLoading」を使って%表示する必要があるかもしれません。
<参考>■全容量読み込み用ローディングの作り方
ただ、それはいたずらにビジターを待たせるだけであってお勧めできません。
そして、ボタン等からの制御方法や「時間表示」の方法も全く異なったものになります
Response 06
2006年01月13日 (金) 18時56分> Yutaro 
丁寧にありがとうございます。
最後に1つだけ質問させてください。
HTMLからロードするボタンが
この(http://yu-2.org/flash/)ようにしましたが、
エラーになります。どうすればいいですか?

<関連記事>

このページの先頭へ