外部mp3をストリーミング再生させる記述

このQ&Aのポイント
  • ストリーミングを表示するためのプログレスバーと、クリックしたらmp3が再生できるボタンを配置したい。
  • 記述の方法によっては、サーバーにファイルをアップロードする必要があるかもしれません。
  • on(press)イベントで、指定したフォルダとファイルのmp3をロードして再生し、プログレスバーの表示を更新します。
回答を見る
  • ベストアンサー

外部mp3をストリーミング再生させる記述

以前にも似たような質問をさせて頂きましたが、どうも上手くいかないので再度質問させて頂きます。 ストリーミングを表示するプログレスバーと クリックしたらmp3が再生するようにしたいのですが、 下記の構造と記述では上手く行きません、サーバーに上げないと 駄目なのでしょうか? 構造 Progressバー⇒MC ボタン⇒MC 同一のステージ上に配置してあります。 ボタンMCに下記の記述をしました on(press){ mySound="フォルダ名/データ名.mp3" mySound.loadSound(フォルダ名/データ名.mp3 + ".mp3",true); mySound.start(); mySound.myBar.x_scale = (getBytesLoaded ()/getBytesTotal ())*100; } *myBarがプログレスMCにつけたインスタンス名です。 タイムラインの記述は1フレームめに mySound = new Sound(); と、しました。

  • 9laws
  • お礼率81% (13/16)
  • Flash
  • 回答数2
  • ありがとう数3

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

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

全てが,おかしいです。 アップロードしても無理です。 やりたいことが,わからない部分もありますが, スクリプトを見て, おそらくこんなことがやりたいのではないかというものに修正してみました。 外部 files フォルダに music1.mp3 を置いた場合です。 ----------------------------------- on (press) { soundName = "files/music1"; mySound.loadSound(soundName+".mp3", true); this.onEnterFrame = function() { this.myBar._xscale = (mySound.getBytesLoaded()/mySound.getBytesTotal())*100; }; } ----------------------------------- フレーム1 の mySound = new Sound(); で生成された mySound はサウンドインスタンスです。 それも,スクリプト上で生成されたインスタンスで, 実際には目に見えないはずです。 ◎ プログレスバーについて  mySound.myBar.x_scale = (getBytesLoaded … これは変です。 その目に見えないインスタンスの中に,myBar は作れるはずがありません。 それもサウンドインスタンスの中です。 そんな無茶な所にムービークリップは置けません。 myBar はおそらく,_root(メインムービーのタイムライン)のステージ上に置かれているのではないでしょうか。 そしたら,  this.myBar._xscale = (mySound.ge… もしくは  _root.myBar._xscale = (mySound.ge です。 次に,  (getBytesLoaded ()/getBytesTotal ()) ですが, 何のロード済みバイト数と何のトータルバイト数をgetしたいのでしょうか。 これだとボタンの置かれた _root のバイト数が出ると思います。 音のバイト数をgetしたいのであれば,  (mySound.getBytesLoaded()/mySound.getBytesTotal()) です。 次に  mySound.myBar.x_scale = (getBytesLoaded ()/getBytesTotal ())*100; 仮にこれが,うまく行くスクリプトだとして(実際にはうまく行きませんが), これを1回書いただけでしたら, 1回実行されるだけです。 例えば,右辺の数値が 100 になったとした場合  _root.myBar.x_scale = 100; です。 これは決定です。当然ながら100のまま動きません。 右辺が随時更新されるもので,更新の度に myBar を伸縮させたいのでしたら, 何度でも何度でも随時実行させなければなりません。 一応,上では,簡単ですから onEnterFrame を使ってみました。 onEnterFrame は,1フレーム進む時間ごとに1回(デフォルトのフレームレートでは12分の1秒に1回)ずつ,{ } 内が実行されます。 プログレスバー のそれもスクリプトの 1行だけでも,かなり無茶苦茶だと思います。 ◎ 本文について  mySound="フォルダ名/データ名.mp3" これは人間でもさっぱり意味がわかりません。 PCならなおさらわかりません。 mySound は Flash 内に生成された,サウンドインスタンスです。 それが,なんで外部ファイルになるのでしょうか。  soundName = "files/music1"; と別の変数にしました。  mySound.loadSound(フォルダ名/データ名.mp3 + ".mp3",true); これも人間が見ても意味不明です。 フォルダ名/データ名.mp3 は変数名扱いになります。 これは,意味不明すぎたので勝手に  mySound.loadSound(soundName+".mp3", true); ということがしたいのではないかと, 推測して書き直してみました。 2行続けると意味がわかります。  soundName = "files/music1";  mySound.loadSound(soundName+".mp3", true); soundNameという変数名に, 外部mp3 のパスとファイル名(拡張子なし)までを代入し, その,soundName + ".mp3" つまり, files/music1.mp3 をストリーミング true で読み込むと言うことになります。 なんで,外部ファイルへのパスを変数化しなければならないのかは, よくわかりませんが,何か意味があるのかもしれないと思い,上の2行のようにしてみました。  mySound.start(); ストリーミング再生では不要です。 =================================== と言う具合に, 1行1行がすべて変です。 人間だと雰囲気でこうではないだろうかと推測できますが, PCでは完全に ??? 状態で何も動作しません。 >> 下記の構造と記述では上手く行きません、 >> サーバーに上げないと駄目なのでしょうか? 今回の回答で上に書いたスクリプトでは, プログレスバー の部分を除いてローカルPC上でもうまく動作するはずです。 ローカルPC上だと (mySound.getBytesLoaded()/mySound.getBytesTotal())*100; の値は一瞬で 100 になりますから, この動きを確認するには,かなり重い(1MBとか) mp3 ファイルをアップしないと実際には確認できないかもしれません。 もしくは, 「 ムービープレビュー」→「表示」→「ダウンロードのシミュレート」で確認です。 mp3 のストリーミングは,回線によっては結構とぎれとぎれになるようです。 何というか, サウンドに関してではなく,全体的に Flash を理解していらっしゃっらないようなので, 他もたくさん不具合が出ると思います。 回答するのが恐いご質問ですが,勇気を持って回答させていただきました。

9laws
質問者

お礼

長文になってしまったにもかかわらずありがとうございました! 確かに今まで作例を見ながらの記述か、ラベルとボタンでのフレーム間の移動しかやったことがなかったです。 初めて自分で記述を試みたわけですが、話にならなかったみたいです(笑) とりあえず一つずつの記述・・・というかまず構造概念の理解が先ですね(汗) なにはともあれありがとうございました、とても助かりました!!

その他の回答 (1)

noname#35109
noname#35109
回答No.2

#1です。 訂正です。 >> 構造 >> >> Progressバー⇒MC >> ボタン⇒MC この,ボタン⇒MC を見落としていました。 ボタンはボタンシンボルではなくて,ムービークリップなのですね。 そしたら,次のようなスクリプトになると思います。 ----------------------------------------------- on (press) { soundName = "files/music1"; _root.mySound.loadSound(soundName+".mp3", true); this.onEnterFrame = function() { _root.myBar._xscale = (_root.mySound.getBytesLoaded()/_root.mySound.getBytesTotal())*100; }; } ----------------------------------------------- 詳細は,#1で説明しています。 #1のスクリプトとはパスが違うだけです。

関連するQ&A

  • Flashビデオの音声が途切れ途切れで再生されてしまう。

    プログレスバーのActionScriptを追加したところ、 埋め込んであるFlashビデオの音声が途切れ途切れで再生されてしまいます。 "下記の内容です。 _root.stop(); this.onEnterFrame = function() { partNumber = (_root.getBytesLoaded()/_root.getBytesTotal())*100; partNumber_txt.text = "Loading " + Math.round(partNumber) + "%"; if (partNumber == 100) { //clearInterval(intervalID); _root.play(); } }; function startMC(){ spin_mc._rotation += 30; } var intervalID = setInterval(startMC,50); "ここまでです。 (同時にミュージックも埋め込んで再生していますが、こちらの音は問題なし。) パブリッシュ設定をいくつか変えてぱブリッシュを試したのですが、上手くいかず、 プログレスバーのActionScriptを削除しパブリッシュすると問題なくFlashビデオの音声も再生されます。 この症状には、どういった問題が考えられますでしょうか? ご教授頂けますと幸いです。何卒、よろしく願い致します。

  • スクリプトの記述について

    FlashMXでゲームを作成しています。 MCの、例えば5フレーム目が表示されているときに、メインタイムラインのクローズボタンをクリックするとその5フレーム目の画像が消えるというような スクリプトはどう書けばいいのでしょうか。 クローズボタン(インスタンス名close_btn)に、 on(release){ if(○○○○){ ~のようなものになると思うのですが。 MCはメインタイムラインに配置されていて、ダブルクリックすると MC独自のライムラインになったときの5フレーム目です。 ゲームはいわゆる脱出系で、この部分だけがわからずにいます。 MCのインスタンス名はabout1としています。

    • ベストアンサー
    • Flash
  • 外部JPG読み込みでのLoading

    こんにちは。 FLASH MXでものすごく単純なことをしようとしているのですが、 出来ずに困っております。 外部JPGを読み込むときにloading画面を表示したいのですが、 それが出来ずに困っております。 レイヤーが下記の様に3つあります。 script loading(loadingの文字)1フレーム目に文字、2フレーム目は空 base(読み込み用のMC) scriptの1フレーム目に下記のスクリプトを書いております。 --------------------------------------------------------- base.loadMovie("thumb/"+_name+".jpg"); if(this.getBytesTotal() < this.getBytesLoaded()){ this.gotoAndstop(2); }else{ this.stop(); } ---------------------------------------------------------- これでプレビューすると写真読み込みは完了しているのですが、 loadingの文字が写真の上にかぶさったままになります。 どのようにすればよろしいでしょうか?お教えいただければ 幸いです。

    • ベストアンサー
    • Flash
  • thisをインスタンス名に変えたらムービーが動かない

    Flash8です。タイムライン上に、 ボタン(インスタンス名 b1_btn) と ムービークリップ(インスタンス名 test_mc) を配置しました。 次に、このボタンインスタンスに以下のイベントハンドラを記述しました。 ----------------- on (press) { this.stop(); } ----------------- 実行すると、ボタンを押せばムービーが停止します。 で次に、上記の記述を以下のように変えます。 ----------------- on (press) { test_mc.stop(); } ----------------- 実行すると、ボタンを押してもムービーが停止しません。 なにがイケないのでしょうか?

  • ムービークリップ内のボタン

    フラッシュ初心者です。 アクションスクリプトがうまく動かず困っています。 シーン1にムービークリップ1(インスタンス名:mc1)とムービークリップ2(インスタンス名:mc2)が置いてあります。 mc2の中にはボタンAを配置してあり、ボタンAをクリックすると、mc1のフレームラベル(B)に飛ぶような制御をしたいです。 ボタンAに記述してあるスクリプトは以下です。 on (release) { this._parent.mc1.gotoAndplay("B"); } しかしクリックしても全く動きません。 絶対パスで指定してもダメでした。 ちなみに、ためしに、mc1ではなく、シーン1上のフレームラベルに 飛ばすように記述したら普通に動きました。。 何か記述間違いがあるのでしょうか? 分かる方がいましたら教えてください。 お願いします。

  • トゥーインで動くMCへ、外部swfをloadMovie

    どなたか教えて下さい。 【例】 stage(W=400XH=200)の大きさの元swf上に、W=200,H=100の大きさのMC(インスタンス名は"aa_mc")を、右端から左端へ、モーショントゥーインを使って移動します。 単純に5フレーム使って移動して、5フレーム目で左端にきて「stop」します。 そのaa_mcの下に、ボタンがあり、そのボタンに on (release){ _root.aa_mc.loadMovie("gaibu.swf"); //gaibu.swfは同じフォルダ内にあるaa_mcと同じ大きさのswf } で、読み込ませたいんですが、aa_mc自体が動いている瞬間に一瞬だけ表示されてすぐに消えてしまいます。 厳密に言えば、_rootの1フレーム目くらいで表示され、4フレーム目くらいには消えてしまうんですが、これってどうすれば直るんでしょうか? どなたか教えてください! FRASH MX 2004を使っています。 お願いします。

    • ベストアンサー
    • Flash
  • 一時停止→再開するサウンドコントロールを作成したい

    独自で作成した画像+ナレーション(***.mp3)が含まれているswfファイルを 他のflaファイルに(loadmovieで)取り込み、 再生、一時停止等の制御ボタンで設定しようと考えています。 画像は停止、再生できたんですが、ナレーション(音声)が一時停止したところから再開されません。ちなみにナレーションが含まれているswfはloadSoundで取り込みました。 読み込む側のflaのほうのサウンドコントロールには現在、下記のような記述をしてあります。 ●一時停止ボタンには on(release){ _root.mc1.stop(); stopAllSounds(); } ●再生ボタンには on (release) { _root.mc1.play(); _root.Sound.start(); } どなたか、ご教示願います。

    • ベストアンサー
    • Flash
  • マウスカーソルをカスタマイズしたのですが…

    FlashCS4でAS3.0を使用しています。 マウスポインタを任意の形を作成して、ムービークリップにして、インスタンス名を「point_mc」として、ステージ上に配置し、スクリプトを下記のように記述しました。 ---------------------------------------------------------- Mouse.hide(); stage.addEventListener(MouseEvent.MOUSE_MOVE, function(e){ point_mc.x=stage.mouseX; point_mc.y=stage.mouseY; }); --------------------------------------------------------- その後にムービープレビューしますと、マウスのカーソルが先の任意に作成(point_mc)したのに変わってました。 そこまでは良かったのですが、その変わったマウスをボタンインスタンス(インスタンス名:skip_bt)に乗せても、ロールオーバーもしなければ、ボタンをクリックする事が出来ないのです。 因みに「skip_bt」に対するスクリプトは下記のように記述しました。 -------------------------------------------------------- skip_bt.addEventListener(MouseEvent.CLICK, introClick); function introClick(evt:MouseEvent):void { gotoAndStop("intro"); } -------------------------------------------------------- このままだと、ただマウスカーソルが、任意で作成したムービークリップになっているだけで、ボタンを押したりする事が出来ません。クリックする事が出来なくて困ってます。 解る方がおりましたら、アドバイス・ご指導をお願い致します。 よろしくお願い致します。

  • mcのスクロール

    以下のムービーを作ったのですが動作がおかしいです。 ----------------ステージ------------- | [ボタン]  [photo(mc_0とmc_1)] | ------------------------------------- 【ムービーの説明】 load時:photo(mc)がmcPos[-203]の位置に移動 enterframe:ボタンにmouseoverでそれぞれの座標に移動 ※photoは同じものを二枚重ねて、それぞれにmc_0とmc_1とインスタンス名をつけて、異なるスピードで移動。「//」で斜めにマスクを作っているので、ひとつの写真が斜めにずれながら移動しているように見える 【おかしな動作】 loading動作してない状態(FlashMXで単にCtrl+Enter)した状態だと再生時に「mcPos」の「-203」にphotoは移動するのですが、loadingを動作させると再生時にphotoが移動しない。ボタンにonRollOverしたときには、ちゃんとそれぞれの座標に移動します。ただ再生時に「mcPos」の「-203」に移動しない。 /---rootの1フレーム目(ローディング)---/ this.stop(); defWidth = bar._width; if (getBytesLoaded() == getBytesTotal()) {gotoAndStop("start");} this.onEnterFrame = function(){ per = Math.floor(getBytesLoaded()/getBytesTotal()*100); loading = "Now Loading..."+per+"%"; bar._width = defWidth*(per/100); }; /---rootの2フレーム目---/ this.stop(); mc_0.setMask(mask_0); mc_1.setMask(mask_1); mcPos=new Array(); mcPos=[-203, -589, -1361, 183, -975, -1747]; this.onLoad=function(){a=0;}; this.onEnterFrame = function(){ mc_0._x += (mcPos[a]-mc_0._x)/1.4; mc_1._x += (mcPos[a]-mc_1._x)/2; }; /---rootの2フレーム目(インターフェイス)---/ ボタン(mc)の編集画面 on(rollOver){_root.a = 0;gotoAndStop("top");} on(rollOut){gotoAndStop("out");} on (release, releaseOutside){getURL("index.html");}

    • ベストアンサー
    • Flash
  • カーナビでのMP3再生について

    今度、車を利用しての旅行を計画しており、 その際、トヨタでレンタカーを借りたいと思っております。 以前にもトヨタでは何度かレンタカーを借りたことがあり、 ほとんどの車に「NDDN-W56」系統のナビがついておりました。 (上記と同じ外観でAUX端子のみが無いものもございましたがこの型番は分かりません) いずれも前面にMP3と記載があり、CD-RでのMP3再生は可能かと思います。 万一、間違っておりましたらご指摘ください。 車内で音楽を聴きたいのですが、MP3形式のファイルをCD-Rに焼く際、 フォルダ等は下記のようにしても大丈夫なのでしょうか? ■アーティスト名(フォルダ) └ ■アルバム名(フォルダ)   └ ■複数の曲(.MP3) また、MP3をCD-Rに焼く時にCDの規格はどのようにすれば宜しいでしょうか? 焼く際のMP3のタグやフォルダ名の注意点などもございましたらお教えください。 レンタカーのため、ナビの説明書を読みたくても手元には無く、 メーカーで公開もされていないため困っておりました。 お手数をお掛けいたしますが皆様のお知恵を拝借できましたら幸いです。 何卒、宜しくお願いいたします。

専門家に質問してみよう