android:当使用MediaPlayer播放背景音乐时,声音效果会过早停止

时间:2012-08-23 21:41:25

标签: android background effects

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

所有声音效果都有效,但后来我开始使用MusicManager类(类似于本教程:http://www.rbgrn.net/content/307-light-racer-20-days-61-64-completion)尝试播放背景音乐并且它可以正常工作,但声音效果在半秒后被切断或者如此。

我正在播放声音效果:

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

1 个答案:

答案 0 :(得分:2)

改用soundpool。 SoundPool可以以不同的音量,速度和循环一次播放多个流。 MediaPLayer并不是真正意义上的游戏音频。

我在市场上发布了2款游戏,两款都使用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);

这将我的soundpool设置为8个流。另一种是源类型,然后是质量。

玩得开心!