3

Serviceを拡張するクラスがあり、アプリのバックグラウンドミュージックを管理するMediaPlayerがあります。

MediaPlayer player = MediaPlayer.create(this, R.raw.background_music);
player.setLooping(true); 

問題は、それがうまく「ループ」しないことです。つまり、mp3ファイルが終了すると、再開する前に1秒間の無音状態が発生します。しかし、mp3ファイルでは、実際には、沈黙の秒はありません。

どうすればこの問題を解決できますか?

4

2 に答える 2

3

できません。このバグは何年も前から存在していましたが、まだ修正されておらず、近い将来に修正されるようには見えません!

http://code.google.com/p/android/issues/detail?id=18756

于 2013-02-22T11:44:49.150 に答える
0

SoundPool を使用してオーディオ ファイルを再生することができます (ループは非常に良好で、遅延はありませんが、オーディオ リソースによっては不適切な場合があります)。

これはある種の実装です(非推奨の削除とリソースの適切な閉鎖は宿題として残されています:))

SoundPool pool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
afd = getResources().openRawResourceFd(audioResource);
pool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
    @Override
    public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
        if (0 == status) {
            soundPool.play(sampleId, 1f, 1f, 10, -1 /* looping parameter */, 1f);
        }
    }
});
pool.load(afd, 10);
afd.close();

反対側から MediaPlayer が必要な場合は、メソッドsetNextMediaPlayerを調べることができます。したがって、アイデアは、同じファイルに対していくつかの MediaPlayer を初期化し (なんて混乱)、それらをスマートな方法で設定することです。

于 2015-11-05T08:07:42.187 に答える