効果音の再生
Androidの効果音の再生のときには
応答性が速く、短い音声データの再生になるので
android.mediaパッケージの
SoundPoolクラスを使う
res/rawsに音声データ配置して
SoundPool.load()
で読み込んで
SoundPool.play()
で再生する
大抵はタッチしたら音を鳴らすので
implements OnClickListener, OnLoadCompleteListener
を追加する
次に、メンバ変数の宣言
private SoundPool mSoundPool; private int mSoundID;
あとは、onCreate()の中へ動作の追加をする
まずは、ボタンのインスタンスの取得
findViewById(R.id.button).setOnClickListener(this); findViewById(R.id.button).setEnabled(false); //SoundPool初期化 mSoundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0); //音声データの読み込み終了を検知するリスナーの設定 mSoundPool.setOnCompleteListener(this); //音声データの読み込み開始 mSoundID = mSoundPool.load(this, R.raw.test, 1);
そして、画面破棄したときにSoundPoolを解放するので
@Override public void onDestroy(){ super.onDestroy(); mSoundPool.release(); }
クリック時の処理も実装
@Override public void onClick(View v){ if(v.getId() == R.id.button){ //音声の再生 mSoundPool.play(mSoundID, 1.0F, 1.0F, 0,0,1.0F); } }
そして、読み込み完了したときの処理を
onLoadComplete()へ実装
@Override public void onLoadComplete(SoundPool soundPool, int sampleId, int status){ //音声が読み込み完了したら再生ボタンを有効にする findViewById(R.id.button).setEnabled(true); }
最初は
setEnabled(false)でボタン無効化しておき
音声が再生できるようになってから
setEnabled(true)でボタンを押せるようにしている
SoundPool()
の初期化パラメーターは
第1引数は、再生されたSoundPoolで同時再生できる数
今回は1
第2引数は、音声の出力先
今回は、res/raws/でのデータを使ったけど
定数も使える
AudioManager.STREAM_ALERM
アラーム音
AudioManager.STREAM_NOTIFICATION
通知音
AudioManager.STREAM_DTMF
トーン信号音
AudioManager.STREAM_RING
着信音
AudioManager.STREAM_SYSTEM
システム音
となる
第3引数は、再生品質 デフォルトでは0になる
SoundPoolの初期化後、再生したい音楽データをメモリ上にロードする必要があるため
load()を使う
load()の引数は
第1引数は、Contextの設定
第2引数は、再生した音声のリソースID
第3引数は、再生品質を指定する
再生品質は、1が推奨となっている
今回なら
load(this, R.raw.test, 1)
となる
load()を実行すると、戻り値に
int型の soundIDが帰ってくる
soundID は、
読み込まれた音声データの番号なので
あとで再生するのに使う
再生については、自動では再生されないため
取得した soundIDを引数にして
play()で再生する