[Android] SoundPool で効果音を鳴らしてみる

Androidで音を扱うクラスとしてSoundPoolがあります。ゲームの効果音の再生など比較的短いものを遅延が少なく再生できます。

下はAnimationとsound再生を同時に行った例です。

soundpool_1

Android Studio 2.1.3
Android 7.0

 

sponsored link

SoundPool

 
SoundPoolはLollipop以降使い方が変わりました。

  1. AudioAttributes audioAttributes = new AudioAttributes.Builder(…)
  2. SoundPool soundPool = new SoundPool.Builder()…
  3. soundPool.load(…)
  4. soundPool.play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)
    • soundID: load()で決めたID
    • leftVolume, rightVolume: 左音量, 右音量(range = 0.0 to 1.0)
    • priority: (0 = lowest priority) default 0
    • loop: (0 = no loop, -1 = loop forever)
    • rate: (1.0 = normal playback, range 0.5 to 2.0)

SoundPoolは、事前に音源をロードしておく必要があります。いきなりロード再生ではうまくいきません。そのためアプリとして音源を抱えたままになりかねないため、release, unload等を使ってOut Of memoryに陥らない対策が必要です。
SoundPoolAudioAttributes

wavファイルを res/raw/ 以下に置きます。多くの音声ファイルをフォルダ階層で管理したい場合はassetsに置きます。ただし、assetsからのデータ取得はAssetManagerを使う作業が必要です。簡単なMediaPlayerで音楽を再生

MainActivity.java

activity_main.xml

ついでに、ボタンを押してSoundPoolで音を再生し、ボタンを回転させてみました。

References:
SoundPool
AudioAttributes