Android: SoundPoolクラスで sample 1 not READY 対応

AndroidSDK開発のレシピのレシピ61「音声ファイルを再生する」を読みながら、Androidでボタンが押されたタイミングで音を出そうとプログラムしたところ、出ない…。SoundPoolクラスを使ってoggファイルで音を出そうとしました。

// HogeというActivity内
btn.setOnClickListener(new OnClickListener(){
    public void onClick(View v){
        int[] sounds = new int[5];
        SoundPool soundPool = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
        sounds[0] = soundPool.load(Hoge.this, R.raw.switch, 1);
        soundPool.play(sounds[0], 1.0f, 1.0f, 0, 0. 1.0f);
        soundPool.release();
    }
});

DDMSでログを見たところ、WARN sample 1 not READYというメッセージが。準備できてへんと。sample 1 not READYでググったら、英語のサイトで「初期化するのに時間がかかるからちょっと時間を置け」って書かれてた。どうやって…?

ボタンを押したタイミングで鳴ればいいわけだから、onResumeのタイミングでロードしておき、onPauseのタイミングでリリースするようにしておけばいいのかなと思ってやってみたらビンゴでした。

// HogeというActivity内
private SoundPool mSoundPool;
private int[] mSounds = new int[5];

protected void onCreate(Bundle savedInstanceState) {
    // ... ゴニョゴニョと処理をしとく
    btn.setOnClickListener(new OnClickListener(){
        public void onClick(View v){
            mSoundPool.play(mSounds[0], 1.0f, 1.0f, 0, 0. 1.0f);
        }
    });
}

protected void onResume(){
    // 音をロードしておく
    mSoundPool = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
    mSounds[0] = mSoundPool.load(this, R.raw.switch, 1);    
}

protected void onPause(){
    // 音をリリース
    mSoundPool.release();
}

以上、備忘録でしたー!


カテゴリー Android, Java | タグ | パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です