2013-03-21 140 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(); 
    } 

} 

现在循环罚款...问题是,我不我真的明白为什么...

希望这会对一些与我有同样问题的人有所帮助。

干杯!