2014-05-03 112 views
1

例如:我有兩個聲音。持續40秒。我需要同時啓動它們。這是我的方法:如何同時啓動兩個媒體播放器(並讓其同步播放)?

private void startPlaying() { 
     mPlayerDrums = MediaPlayer.create(this, mCurrentDrumResId); 
     mPlayerDrums.setLooping(true); 

     mPlayerTrack = MediaPlayer.create(this, mCurrentTrackResId); 
     mPlayerTrack.setLooping(true); 

     if (STATE == STATE_PLAY) { 
      mPlayerDrums.start(); 
      mPlayerTrack.start(); 
     } 

     setPlayersVolume(mSeekbar.getProgress()); 
    } 

但有時它們不會同步播放。從日誌(每400ms顯示玩家的位置):

05-03 14:47:01.190: V/wise(23335): drums pos 0 track pos 0 
05-03 14:47:01.600: V/wise(23335): drums pos 93 track pos 0 
05-03 14:47:02.001: V/wise(23335): drums pos 766 track pos 766 
05-03 14:47:02.401: V/wise(23335): drums pos 1138 track pos 1138 
05-03 14:47:02.801: V/wise(23335): drums pos 1556 track pos 1509 
05-03 14:47:03.202: V/wise(23335): drums pos 1950 track pos 1950 
+1

我覺得你必須設置兩個媒體播放器對象setOnPreparedListener並把onPrepared標誌()..不要叫打,直到兩個標誌true.Haven't檢查但你應該嘗試。 – TheFlash

+0

感謝您的回覆!剛剛嘗試 - 仍然沒有。 –

+0

@Flash我已經檢查過這個,但有時候這個問題可以解決 – breceivemail

回答

2

您可以使用CyclingBarrier一次啓動兩個玩家。像這樣

CyclicBarrier cyclicBarrier = new CyclingBarrier(2); 
    public void onPrepared(MediaPlayer player) { 
     new StartThread(player).start(); 
    } 

    public class StartThread extends Thread { 
     private MediaPlayer player; 
     public StartThread(MediaPlayer player) { 
      this.player = player; 
     } 
     @Override 
     public void run(){ 
      cyclingBarrier.await(); 
      player.start(); 
     } 
    } 
相關問題