代わりにサウンドプールを使用してください。SoundPoolは、さまざまな音量、速度、ループで一度に複数のストリームを再生できます。MediaPLayerは、実際にはゲームオーディオを処理するためのものではありません。
私は2つのゲームを市場に公開していますが、どちらもSoundPoolを使用しており、問題はありません。
ここで、これら2つの機能は私のゲームから直接取り出されています。
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;
これらの位置にサウンドをロードし、そこから再生します。(実行するたびにすべてのサウンドをロードするのではなく、一度ロードするだけです。)次の2つの引数は、左/右の音量、優先度、およびループに設定する-1です。
mSoundPool = new SoundPool(8, AudioManager.STREAM_MUSIC, 0);
これにより、サウンドプールが8ストリームに設定されます。もう1つはソースの種類で、次に品質です。
楽しんで!