android:当使用MediaPlayer播放背景音乐时,音效会提前停止



我正试图在我的应用程序上播放背景音乐,以及在你杀死敌人时偶尔播放的音效。

所有的音效都起作用了,但后来我开始使用MusicManager类(类似于本教程:http://www.rbgrn.net/content/307-light-racer-20-days-61-64-completion)尝试播放背景音乐,效果很好,但音效在半秒钟左右后就被剪掉了。

我正在使用播放音效

 MediaPlayer mp = MediaPlayer.create(context, R.raw.fire); 
 mp.start();

请改用声池。SoundPool可以同时以不同的音量、速度和循环播放多个流。MediaPLayer并不是真正用来处理游戏音频的。

我在市场上发布了两款游戏,都使用SoundPool,没有任何问题。

在这里,这两个函数直接从我的游戏中删除。

   public static void playSound(int index, float speed) 
{       
         float streamVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); 
         streamVolume = streamVolume / mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
         mSoundPool.play(mSoundPoolMap.get(index), streamVolume, streamVolume, 1, 0, speed); 
}
public static void playLoop(int index, float speed) 
{       
         float streamVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); 
         streamVolume = streamVolume / mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
         streamVolume = streamVolume / 3f;
         mSoundPool.play(mSoundPoolMap.get(index), streamVolume, streamVolume, 1, -1, speed); 
}

这就是它的简单之处。仔细观察一下,我只使用我的playLoop()来播放背景音乐,所以我降低了音量,但你可以很容易地修改代码,每次播放时手动设置音量。

还有

     mSoundPool.play(mSoundPoolMap.get(index), streamVolume, streamVolume, 1, -1, speed);

第一个参数mSoundPoolMap.get(index)只是一个包含我所有声音的容器。我给每个声音分配一个最后的数字,比如

    final static int SOUND_FIRE = 0, SOUND_DEATH = 1, SOUND_OUCH = 2;

我把这些声音加载到这些位置,然后从中播放。(记住,你不想每次运行一个都加载所有的声音,只需加载一次。)接下来的两个参数是左/右音量、优先级,然后-1设置为循环。

    mSoundPool = new SoundPool(8, AudioManager.STREAM_MUSIC, 0);

这使我的声音池有8条溪流。另一个是源类型,然后是质量。

玩得开心!

相关内容

  • 没有找到相关文章

最新更新