<< Android-Note
SoundPoolでゲームの効果音を鳴らす
ゲームなどでBGMとは別に効果音を鳴らしたい場合はSoundPoolを使います。
MediaPlayerと違い、次のような特徴があります。
- 音声ファイルを非同期に読み込み
- 遅延が発生しない
- 複数の音源を同時に再生できる
このように複数の音を遅延なく再生できるので効果音を鳴らすのに向いています。
逆にBGMなど多少遅延があっても困らないものはMediaPlayerで再生するのがベストです。
鳴らしてみる
では、実際に音声ファイルから音を鳴らしてみたいと思います。
まず、リソースのrawフォルダに鳴らしたい音声ファイルを置きます。
上の画像では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で複数の効果音を非同期再生する方法でした。では、また!
© Kaz