2016-05-28 18 views
0

私は私のゲームのためのMediaPlayerの上のループへの音楽ファイルを設定し、それがループするときには2秒の遅延が発生します。アンドロイド - MediaPlayerのループ遅延を削除する方法?

マイコード:ゲームのために

boolean activateSounds = getIntent().getBooleanExtra("Activate sounds", true); 

    if(mp!=null){ 
     mp.reset(); 
     mp.release(); 
    } 
    mp = MediaPlayer.create(StartGame.this, R.raw.music1); 
    mp.setVolume(8f, 8f); 
    mp.setLooping(true); // This is causing delays 
    if (activateSounds) mp.start(); 

、これは興味深いものではありません。ループ遅延のうち、MediaPlayerの実行を作成する方法はありますか?

答えて

1

私が隙間なく仕事をsetLooping作ることができませんでした。私のために働いた

唯一の解決策は、と2 MediaPlayers(隙間なく次のループを開始することができる)setNextMediaPlayerコールを使用することでした。

'擬似' コード:

class Abc implements MediaPlayer.OnCompletionListener { 

private final MediaPlayer[] mps = new MediaPlayer[2]; 

public Abc() { 
    mps[0] = new MediaPlayer(); 
    mps[1] = new MediaPlayer(); 
    mps[0].setOnCompletionListener(this); 
    mps[1].setOnCompletionListener(this); 
} 

public void start() 
    initMediaPlayer(mps[0]); 
    initMediaPlayer(mps[1]); 

    mps[0].setNextMediaPlayer(mps[1]); 
    mps[0].start(); 
} 

private void initMediaPlayer(MediaPlayer mp) 
{ 
    if (mp.isPlaying()){ 
      mp.stop(); 
    } 
    mp.reset(); 

    final float volume = 0.07f; 

    mp.setDataSource(MY_SOURCE); 
    mp.setVolume(volume, volume); 
    mp.setLooping(false); 

    try { 
     mp.prepare(); 
    }catch(Exception error){ 
     Log.d("BackgroundMusic", error.toString()); 
    } 
} 

@Override 
public void onCompletion(MediaPlayer mp) 
{ 
    MediaPlayer cur = mps[0] == mp ? mps[1] : mps[0]; 

    initMediaPlayer(mp); 
    cur.setNextMediaPlayer(mp); 
} 

} 
関連する問題