0

1 つのフレームに再生、一時停止、次のボタンがあるフラッシュ mp3 プレーヤーがあります。
曲は配列に格納されます。

一時停止ボタン以外はすべて正常に動作します。音楽
を一時停止し、曲の位置を変数に保存します。一時停止
ボタンをもう一度クリックすると、曲は保存された曲の位置から再生されるはず
です。問題は、配列の最初の曲も再生することです。
一時停止した曲ではありません。Googleで解決策を見つけようとしました。しかし
、1 曲しか再生されなかった mp3 プレーヤーに関するトピックを見つけることができました。
これがコードです。ありがとう。

var i:Number = 0;
var myMusic:Sound = new Sound();
var mySongs:Array = ["Kalimba.mp3","Sleep Away.mp3","Maid with the Flaxen Hair.mp3"];
var soundFile:URLRequest = new URLRequest(mySongs[i++]);
var channel:SoundChannel = new SoundChannel();
var sTransform:SoundTransform = new SoundTransform();
var songPosition:Number;
var myContext:SoundLoaderContext = new SoundLoaderContext(5000);
myMusic.load(soundFile, myContext);

btnPlay.addEventListener(MouseEvent.CLICK, playMusic);
btnNext.addEventListener(MouseEvent.CLICK, nextMusic);
btnPause.addEventListener(MouseEvent.CLICK, pauseMusic);
channel.addEventListener(Event.SOUND_COMPLETE, nextMusic);

function playMusic(evt:MouseEvent):void
{
   channel = myMusic.play(songPosition);
   channel.addEventListener(Event.SOUND_COMPLETE, nextMusic);
}

function nextMusic(evt:Event):void
{
    channel.stop();
    var myMusic:Sound = new Sound();
    var mySongs:Array = ["Kalimba.mp3","Sleep Away.mp3","Maid with the Flaxen Hair.mp3"];
    var soundFile:URLRequest = new URLRequest(mySongs[i]);
    myMusic.load(soundFile, myContext);
    channel = myMusic.play(i);
    channel.addEventListener(Event.SOUND_COMPLETE, nextMusic);
    if(i==mySongs.length-1) {
    i=0;
    }
    else {
        i++;
    }
}

var Paused:Boolean = false;

function pauseMusic(evt:MouseEvent):void
{
    if(Paused==false) {
    songPosition = channel.position;
    channel.stop();
    Paused = true;
    }
    else if(Paused==true) {
        channel = myMusic.play(songPosition);
        Paused = false;
    }
}
4

1 に答える 1

0

channel.addEventListener(Event.SOUND_COMPLETE, nextMusic); を追加し続けるべきではありません。

一時停止すると SOUND_COMPLETE イベントが発生するためです。

とにかく、このイベントリスナーを一度だけ追加するだけで十分です。

于 2013-10-07T14:48:31.857 に答える