SoundPoolでゲームの効果音を鳴らす

ゲームなどでBGMとは別に効果音を鳴らしたい場合はSoundPoolを使います。

MediaPlayerと違い、次のような特徴があります。

このように複数の音を遅延なく再生できるので効果音を鳴らすのに向いています。

逆にBGMなど多少遅延があっても困らないものはMediaPlayerで再生するのがベストです。

鳴らしてみる

では、実際に音声ファイルから音を鳴らしてみたいと思います。

まず、リソースのrawフォルダに鳴らしたい音声ファイルを置きます。

rawフォルダ以下にsound.mp3というファイルを追加

上の画像ではsound.mp3という音声ファイルを追加しました。

実際に音声ファイルを鳴らすにはSoundPoolオブジェクトを作ります。

SoundPool soundPool = new SoundPool(
        50, AudioManager.STREAM_MUSIC, 0);

SoundPoolコンストラクタの第1引数には同時に再生できる最大の音源数を設定します。この例では1度に50まで音源を再生できることになります。

次に音声リソースから音源をSoundPoolに読み込みます。

int soundId = soundPool.load(this, R.raw.sound);

loadメソッドにリソースを読み込むと非同期で読み込みが開始され、再生用に使うIDを返してきます。

後は好きなタイミングでplayメソッドを使って音源を再生できます。

soundPool.play(soundId, 1.0f, 1.0f, 0, 0, 1.0f);
    ///音量1.0、再生なし1倍速で再生

playメソッドは次の引数をとります。

play(左の音量, 右の音量, 優先度, ループフラグ, 再生速度);

優先度にはとりあえず0を渡しておけばOKです。

ループフラグには、もしループさせたい場合は-1,そうでないなら0を渡します。

コードまとめ

最後に音源再生のコードをまとめて紹介します。

SoundPool soundPool = new SoundPool(
        50, AudioManager.STREAM_MUSIC, 0);
int soundId = soundPool.load(this, R.raw.sound);
soundPool.play(soundId, 1.0f, 1.0f, 0, 0, 1.0f);
    ///音量1.0、再生なし1倍速で再生

以上、SoundPoolで複数の効果音を非同期再生する方法でした。では、また!

関連項目
プライバシーポリシー