2

MP3 ファイルを次々に再生できません。一方のファイルの再生が終了すると、もう一方のファイルを開始する必要があります。次のファイルを開始するコードを配置すると、何もしません。何らかの理由thread.sleep()で、ファイルの期間中は使用できません。これを行う他の方法はありますか?

//this is the basic code..
playq(String fname){
pl =  Manager.createPlayer(stream,"audio/mpeg");
pl.realize();

pl.prefetch();

pl.start();

// what should i use here?? pls i don't want to use thread.sleep..
playagain(fname);
}
void playagain(String fname){
        try {

    pl.stop();
    pl.deallocate();
   pl.close();

} catch (Exception ex) {}
 //change file name and stream and..
        playq(mp3f);
    }
4

1 に答える 1

2

あなたのコードは、ブロックからコードを再生しようとすべきではありませんcatch.1つには、例外が生成された場合にのみ呼び出されますException.

本当に使えませんThread.sleep()?とにかく本当にしたくないことは確かです(たとえば、ユーザーがクリップを一時停止できる場合...)。

代わりに、PlayerListenerインターフェースの使用を調べて、END_OF_MEDIAイベントをリッスンしてください。

非常に基本的な(これはテストされておらず、さらに作業が必要なため) 例:

public class PlayerRunner implements PlayerListener {

    private final String[] songFiles;
    private int songIndex = 0;

    public PlayerRunner(String[] songs) {
        this.songFiles = songs;
    }

    public void start() {
        playerUpdate(null, null, null);
    }

    // This method is required by the PlayerListener interface
    public void playerUpdate(Player player, String event, Object eventData) {
        // The first time through all parameters will be blank/null...
        boolean nextSong = (event == null);
        if (event == PlayerListener.END_OF_MEDIA) {
            player.stop();
            player.dallocate();
            player.close();
            nextSong = index < songIndex.length;
        }

        if (nextSong) {
            String fileName = songFiles[index++];
            if (fileName != null) {
                Player pl = Manager.createPlayer(fileName, "audio/mpeg");
                pl.addPlayerListener(this);
                pl.realize();
                pl.prefetch();
                pl.start();
            }
        }
    }
}

私がこれを完全に正しく行っているわけではないことに注意してください。たとえば、例外処理を行っていません。また、あなたの状況を詳しく知らなければ、他に何を心配すべきかわかりません。これは、これでどこに行くべきかを検討し始めるための簡単な答えにすぎません。

(また、私は JME のメディア プレーヤーを使用したことがないため、そこでの GC に関する注意事項などは知りません)。

于 2011-09-19T20:21:53.987 に答える