SoundPoolクラスを利用する

本記事ではSoundPoolクラスを利用して効果音を鳴らす。

SoundPoolクラスはあらかじめ音声ファイルをデコードしてメモリに持っておく仕組みになっていてレイテンシが小さい。
速いフィードバックが求められる効果音の再生に向いている。

一方メモリに持っておく仕組みであるためにメモリを圧迫するため長い音声ファイルの再生には向かない。
BGMなど長めの音声ファイルの再生にはMediaPlayerクラスを利用する。

実装

音声ファイルをリソースとして保存する

音声ファイルをres/raw/ディレクトリに保存しておく。

音声ファイルの配置

再生可能な形式はmp3, ogg, wavなど。

音声を鳴らす

val audioAttributes = AudioAttributes.Builder()
    .setUsage(AudioAttributes.USAGE_MEDIA)
    .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
    .build()
val soundPool = SoundPool.Builder()
    .setMaxStreams(1)
    .setAudioAttributes(audioAttributes)
    .build()
// sound.ogg であれば音声のresouce id は R.raw.sound となる
val soundId = soundPool.load(context, R.raw.sound, 1)
soundPool.play(soundId, 1.0f, 1.0f, 0, 0, 1.0f)