- ベストアンサー
flash MX での mp3ファイルの途中再生と停止
mp3 ファイルの頭からの再生は、 bgSndObj = new Sound(this); bgSndObj.LoadSound("a.mp3",true); bgSndObj.Start(); で、停止は、 bgSndObj.Start(); ですが、 途中で停止、そこから再生するにはどうすればいいでしょうか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
サウンドの演奏を始める Sound オブジェクトの start メソッドは、正式には引数を2つ渡す仕様になっています。第1引数がサウンドの何秒の位置から演奏を始めるか、第2引数が何回ループするかの指定です。引数は不要なら省略可能で、1つだけ指定した場合は演奏開始位置の指定と見なされます。 また、現在再生している位置をミリ秒で返す、 Sound.position というプロパティがあります。 この2つを利用して、次のように考えてはいかがでしょう。 変数を1つ用意します。 一時停止でサウンドを止める処理の時に、Sound.position で再生している位置を取得して、この値を変数に保存しておきます。 停止位置から再生する時は、変数に残した情報を元に、Sound.start の第1引数で演奏開始位置を指定します。 ただし、position の単位はミリ秒で、start の第1引数の単位は秒です。start に渡す時は、変数に保存してある値を 1000 で割って秒に直す必要があります。 例えば、一時停止の時の再生位置を保持する pause_point という変数を用意するとします。 一時停止の時は、 //現時点の再生位置を保存 pause_point = bgSndObj.position; //サウンドを停止 bgSndObj.stop(); 停止したところから再生し始める場合は、 //停止位置から再生 bgSndObj.start( pause_point / 1000 ); //停止位置をリセット pause_point = 0; ミリ秒と秒の違いのため、微妙に演奏開始位置がズレる場合もあります(あまり目立たない程度です)が、基本的には、こんな感じのスクリプトでできると思います。 なお、pause_point は必要に応じて0にリセットしてください。この値を元に演奏位置を指定しますから、位置が狂っていると変な位置から再生されてしまいます。 0にする目安は、停止した時・再生を再開した時・ループする場合はループの最初の時点などです。
お礼
いつもありがとうございます。 演奏曲が複数あるときは曲単位で、終了時間を定義しておき、どの曲が演奏されているかを判定し、その曲が終了時間に達したときに 対応する pause_point = 0; にすればいいわけですね。