2

私は自分のアプリでバックグラウンドミュージックを再生しようとしています。敵を倒したときの効果音などもあります。

すべての効果音は機能しましたが、その後、MusicManagerクラス(このチュートリアルと同様:http ://www.rbgrn.net/content/307-light-racer-20-days-61-64-completion )を使用して試してみました。バックグラウンドミュージックを再生すると機能しますが、効果音は0.5秒ほどで途切れます。

私は以下を使用して効果音を再生しています:

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

1 に答える 1

2

代わりにサウンドプールを使用してください。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つはソースの種類で、次に品質です。

楽しんで!

于 2012-08-23T22:41:05.170 に答える