2015-11-25 62 views
0

當兩個音頻的是在同一時間打了聲被抵消。我如何解決這個奇怪的現象?我該如何修復我的音頻? (優先)

我有一些代碼,音頻按鈕上點擊音頻在10秒的時間間隔(在後臺服務)。我有以下代碼停止按鈕音頻十秒間隔播放時,它工作正常:

public static void myPop(Context context){ 
    AudioManager manager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE); 
    if(!manager.isMusicActive()) {  //Only if there isn't any other audio playing 
     MediaPlayer pop = MediaPlayer.create(context, R.raw.pop); 
     pop.start(); 
    } 
    else{ 
     Log.v(TAG, "Audio is already playing"); 
    } 
} 

這工作得很好,並停止一個聲音從播放(POP),讓其他音頻播放(來自後臺服務的人)。現在,當他們都在同一時間進行比賽時,我會遇到問題。例如,當我點擊確切的按鈕時,就會發出後臺服務音頻即將開始的時間。當他們都在同一時間播放時,聲音剛剛被切斷

有什麼辦法給予優先後臺服務音響?不知怎的,說:如果兩個音頻片段同時開始,我想讓後臺服務音頻播放。

想到這一點視覺:

enter image description here

https://upload.wikimedia.org/wikipedia/en/4/49/Preference_example.jpg

我想說的是,如果我有蘋果和橘子之間的選擇,摘蘋果。 AKA如果我有兩個音頻播放器同時播放,請選擇一個(蘋果)。

感謝您的幫助,

Ruchir

回答

2

你可能有一個競爭條件。在這三條線

1 if(!manager.isMusicActive()) { 
2  MediaPlayer pop = MediaPlayer.create(context, R.raw.pop); 
3  pop.start(); 

1號線和3號線之間,有機會爲另一個球員得到媒體播放器,並開始播放,尤其是如果線2是緩慢的。

我建議做一個媒體播放器,兩個玩家進行訪問(即在其他地方打造的「MediaPlayer的流行」,並分享),或者找到另一種方式來同步不同的球員。也許在比賽之前發出停止,而不是檢查比賽狀態。

+0

你介意提供關於如何做到這一點的例子嗎?我不確定是如何因爲這兩個媒體播放器在兩個不同的類別... –

+0

你介意提供一個如何做到這一點的例子嗎?我不知道是怎麼回事,因爲這兩位媒體球員分屬兩個不同的類別...... –

0

可以使用代碼進行播放或暫停音頻當其他球員開始或暫停。

AudioManager.OnAudioFocusChangeListener afChangeListener = 
    new AudioManager.OnAudioFocusChangeListener() { 
     public void onAudioFocusChange(int focusChange) { 
      if (focusChange == AUDIOFOCUS_LOSS_TRANSIENT) { 
       // Pause playback 
      } else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) { 
       // Resume playback 
      } else if (focusChange == AudioManager.AUDIOFOCUS_LOSS) { 
       am.unregisterMediaButtonEventReceiver(RemoteControlReceiver); 
       am.abandonAudioFocus(afChangeListener); 
       // Stop playback 
      } 
     } 
    }; 

更多referernce http://developer.android.com/training/managing-audio/audio-focus.html