2013-03-21 226 views
0

我正在開發Android遊戲,並且我正在使用標準Android組件。Android背景音樂遊戲在循環播放之前暫停

我有一個應該一遍又一遍播放背景音樂的媒體播放器對象。 我編寫了一些音樂,並呈現它......並且完美循環。

現在,當我將音樂文件添加到遊戲中時...在每個循環音樂停止片刻之前......但它非常煩人。爲什麼會發生?

我已經在2.3.3手機設備和ICS仿真器上測試過它......每次都會發生同樣的事情。

這是我的代碼:

/** Play background music */ 
public static void playMusic() { 

    if (backgroundMusic == null) { 
     backgroundMusic = new MediaPlayer(); 
     backgroundMusic.setVolume(0.5f, 0.5f); 

     try { 
      backgroundMusic.setDataSource(activity.getAssets() 
        .openFd("background_music.ogg") 
        .getFileDescriptor()); 
      backgroundMusic.prepare(); 
      backgroundMusic.setAudioStreamType(AudioManager.STREAM_MUSIC); 
      backgroundMusic.setLooping(true); 
      backgroundMusic.start(); 
     } catch (IllegalArgumentException e) { 
      e.printStackTrace(); 
     } catch (IllegalStateException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

} 

當我在一些播放器中播放相同的文件在PC上它循環,聽起來很不錯... 如何解決這一問題? TNX!

回答

0

不幸的是,它的工作原理就是這樣。
問題是他重新啓動播放器,完成後。

如果您使用API​​ 16或更高版本,則可以使用setNextMediaPlayer(MediaPlayer)-方法。然後他試圖以一種方式開始下一個MediaPlayer,即沒有停頓。

如果您正在開發API小於16,我不知道如何處理這與MediaPlayer

您可能會嘗試使用2 MediaPlayers並在第一個停止之前開始第二個。但我不知道它有多好,因爲你不知何時必須知道何時開始新玩家。

編輯:
後一些谷歌的工作,我發現this
有人建議將mp3 -File轉換爲ogg -File,什麼可以讓它在沒有暫停的情況下進行循環。但我沒有嘗試過。
根據意見,這對一個人有效,但不適用於另一個人。

+0

好,很爛。 – Veljko 2013-03-21 16:48:31

+0

對不起,給你壞消息:/ – MalaKa 2013-03-21 17:03:20

+0

我試着用wav,mp3和ogg文件...同樣的事情發生 – Veljko 2013-03-21 17:23:13

0

我想我找到了一種方法,使這項工作...

我已經改變了代碼如下:

/** Play background music */ 
public static void playMusic() { 

    if (backgroundMusic == null) { 
     backgroundMusic = new MediaPlayer(); 
     backgroundMusic.setVolume(0.5f, 0.5f); 
     AssetFileDescriptor afd; 
     try { 
      afd = activity.getAssets().openFd(
        "background_music.ogg"); 
      backgroundMusic.setDataSource(afd.getFileDescriptor(), 
        afd.getStartOffset(), afd.getLength()); 
      backgroundMusic.setLooping(true); 
      backgroundMusic.prepare(); 
     } catch (IOException e1) { 
      e1.printStackTrace(); 
     } 

     backgroundMusic.start(); 
    } 

} 

現在循環罰款...問題是,我不我真的明白爲什麼...

希望這會對一些與我有同樣問題的人有所幫助。

乾杯!