Android : SoundPoolやMediaActionSoundで効果音を利用する
Androidでの効果音の実装方法に個人的にいろいろUpdateがあったのでまとめておきたいと思います。
SoundPool.Builderを利用する
Androidで効果音をつけるときに利用するのがSoundPoolですが、API 21からSoundPoolインスタンスの生成方法が変わったようです。
Android Developerでは、
This constructor was deprecated in API level 21. use SoundPool.Builder instead to create and configure a SoundPool instance
ということで、SoundPool.Builderの利用を推奨されています。これまでのコンストラクタはdeprecatedになります。
SoundPool.Builder | Android Developers
SoundPool.Builder
を利用したコード例です。
mSoundPool = new SoundPool.Builder() .setAudioAttributes(new AudioAttributes.Builder() .setUsage(AudioAttributes.USAGE_GAME) .build()) .setMaxStreams(2) .build();
MaxStreamなどは同様ですが、STREAMの指定がなくなって、かわりにAudioAttributesの指定が必要になります。 通常はデフォルトでよさそうですが、例えばゲーム利用などの場合はUSAGE_GAMEの利用が推奨されています。
まだ個人的に不要なので、あまり細かいところまで見ていないですが、STREAM含め細かいSound周りの設定をラップしているのだと想定されます。
API 21以上のアプリを作成する場合にはこちらを利用することになりそうです。
MediaActionSoundでOSに含まれているサウンドリソースを利用する
あまりユースケースはないのかもしれませんが、Android 4.1 (API 16)からMediaActionSound
を通じてカメラ周りの音源を任意に利用することができるようです。
MediaActionSound | Android Developers
日本語での解説はTechBoosterにもありましたので、こちらも参考になります。
例として、シャッター音を利用するコードを掲載しておきます。
まずonCreate
あたりでリソースをロードします。
mShutterSound = new MediaActionSound();
mShutterSound.load(MediaActionSound.SHUTTER_CLICK);
解放するコードも忘れずに記述します。
public void onDestroy() { if (mShutterSound != null) { mShutterSound.release(); mShutterSound = null; } }
再生するときは、下記のようにID指定で呼び出します。
SoundPool
と違って、IDは固定なのでロードしておけば提供されている定数で利用できます。
mShutterSound.play(MediaActionSound.SHUTTER_CLICK);
以上MediaPlayerとは別に、SE的な音源利用の方法について最近気づいた内容のまとめでした。