AndroidSDK開発のレシピのレシピ61「音声ファイルを再生する」を読みながら、Androidでボタンが押されたタイミングで音を出そうとプログラムしたところ、出ない…。SoundPoolクラスを使ってoggファイルで音を出そうとしました。
01 02 03 04 05 06 07 08 09 10 | // 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のタイミングでリリースするようにしておけばいいのかなと思ってやってみたらビンゴでした。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | // 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(); } |
以上、備忘録でしたー!