3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SoundPoolで「Sample 1 not READY」と出た時の対応

Posted at

はじめに

SoundPoolを使って音楽を再生する時、

val id = soundPool.load(context, R.raw.hoge1, 1)
soundPool.play(id, 1.0F, 1.0F, 0, 0, 1.0F)

のように、音楽ファイルを読み込んでから再生します。

しかし、以下のようにWarningが出て、音楽が再生されない場合があります。

W/SoundPool: sample 1 not READY

Warningが出てしまう原因は、soundPool.load()による音楽ファイルの読み込みが完了していないためです。

対策

soundPool.load()の完了を待つには、soundPool.setOnLoadCompleteListenerを使います。
loadが完了するとこのリスナーが呼ばれる仕組みです。

val id = soundPool.load(context, R.raw.hoge1, 1)
soundPool.setOnLoadCompleteListener { soundPool, sampleId, status ->
    // status = 0 でロード成功したことを表す
    if (status == 0) {
        soundPool.play(sampleId, 1.0F, 1.0F, 0, 0, 1.0F)
    }
}

 
 
 
また、複数の音楽ファイルを読み込む場合は個別処理ができます。
「いつでも再生できるよ」とユーザーに通知してあげることもできます。

val firstId = soundPool.load(context, R.raw.hoge1, 1)
val secondId = soundPool.load(context, R.raw.hoge2, 1)
soundPool.setOnLoadCompleteListener { soundPool, sampleId, status ->
    if (status == 0) {
        when (sampleId) {
            firstId -> soundPool.play(sampleId, 1.0F, 1.0F, 0, 0, 1.0F)
            secondId -> Toast.makeText(this, "READY secondId", Toast.LENGTH_SHORT)
        }
    }
}

これで安全に音楽ファイルを再生することができます!

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?