・SoundPoolとMediaPlayerの違いについて
・SoundPool
だいたい5秒くらいの短い音声を再生することが出来る。
サンプルで押してみると分かるが、連打すると先に鳴った音をキャンセルして音が鳴る。
もちろん複数サウンドの同時再生も可能。(ここでは書かないけど)
音声ファイル形式はWAVE、ogg、(mp3)※機種によっては再生されないことがあるらしい。
この特性からしてSE向きってはっきりわかんだね
・MediaPlayer
長い音声が再生できる。
再生開始した後にまた再生しようとしても受け付けない。
SoundPoolのようにキャンセルして最初から再生するようにしたければ追加で記述する必要がある。
実際は再生、一時停止(再度再生時止めた場所から再生)、停止(再度再生時頭出し再生)
みたいに分けて管理してあげるといいんじゃないかな!
音声ファイル形式はmp3を筆頭に有名どころは揃ってるらしい。
この特性からしてBGM向きってはっきりわかんだね
・SoundPoolとMediaPlayerの使い方
・SoundPool
1:インスタンス生成
mSoundPool = new SoundPool(int maxStreams, int streamType, int srcQuality);
maxStreams:読み込むサウンドの最大数
streamType:Streamのタイプ(普通はSTREAM_MUSICを使用するらしい)
srcQuality:サンプリングレートのクオリティ(デフォルトは0)
2:読み込みする
mSoundId = mSoundPool.load(Context context, int resId, int priority);
context:getApplicationContext()を指定してあげるといい。
自分で破棄する必要のあるものにはこの指定をしたほうがいいらしい。
resId:Rからリソースを指定する。
priority:プライオリティ(優先度?)基本的に1を指定する。
3:再生する
mSoundPool.play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate);
soundID:loadしたときの戻り値。ここではmSoundId
leftVolume:スピーカの音量(0.0~1.0)
rightVolume:スピーカの音量(0.0~1.0)
priority:プライオリティ(優先度?0が一番高いらしい)
loop:ループ回数(-1のとき無限ループ、0のときループなし)
rate:再生速度(0.5~2.0 0.5倍から2.0倍の間で速度を設定できる)
4:終了時破棄
SoundPoolは自前で破棄しないとメモリリークが発生するので気を付けること。
・MediaPlayer
1:インスタンス生成&読み込み
mMediaPlayer = MediaPlayer.create(Context context, int resId);
SoundPoolのときとほぼ同じ。
2:再生、一時停止、停止
再生
読み込んだファイルを再生する。
一時停止
再生中の音を止める。再度再生されたとき止めた場所から再生される。
停止
再生中の音を止める。再度再生するためには、prepare()をstart前に呼び出す。
3:終了時破棄
こちらも自前で破棄しないとメモリリークが発生するので注意。
|