効果音の再生

効果音の再生

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()で再生する

コメントを残す

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