MediaPlayerは逐次再生するため、長大なファイルであってもメモリ消費量が少ない特徴があります。再生開始の遅延があるため、BGMのような再生開始タイミングの精度を厳しく求めないBGMのような再生に向いています。
再生できるファイルは参考にあるAndroid Supported Media Formatsを見てください。MP3やWAVなど、たいていのオーディオフォーマットはサポートしています。
MediaPlayerを使う注意点は、ステートマシン(つまりMediaPlayerそのものが状態をもっていて、ユーザーがきちんと状態を判断して制御する必要がある)なので、状態を把握して、その状態に応じたAPIを使用しなければなりません。ステートの遷移は参考にあるMediaPlayerから引用すると下記のようになっています。APIを発行するたびに状態が遷移していきます。
再生可能状態にするprepare()は時間のかかる処理のため、同期処理のprepare()だけでなく、非同期処理のprepareAsync()があります。onPrepared()を受け取ることで完了通知を受け取ることができます。また、使用が完了した場合(もう使わない場合)、release()を呼んでリソースを解放する必要があります。これをしないで何度もMediaPlayerを使うとそのうち使用できなくなる可能性があります。
MediaPlayerは再生、停止、一時停止、ループ再生、音量調整など機能もいろいろそろっています。
例)リソースにあるオーディオデータを再生する場合、res/raw/フォルダにデータをおきます。ここではbgm.mp3をおいています。create()は特殊で実行完了するとPrepared状態なので、いきなりstart()を呼ぶだけで再生できます。ループ再生するようにセットも加えています。
public class SampleAppActivity extends Activity {
private final static String TAB = "SampleAppActivity";
private MediaPlayer mBgmPlayer;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mBgmPlayer = MediaPlayer.create(this, R.raw.bgm);
mBgmPlayer.setLooping(true);
mBgmPlayer.start();
}
}
例)SDカードなど外部ストレージにあるファイル(ここでは/sdcard/bgm.mp3)を再生する場合、下記のように指定します。ファイル名をパスで指定しますが、このとき直接"sdcard"と指定せず、あえてEnvironment.getExternalStorageDirectory()でシステムから外部ストレージのフォルダを取得しています。必ずしも外部ストレージが"sdcard"とは限らない(内部ストレージの場合もある)ため、例ではこのようにしています。
public class SampleAppActivity extends Activity {
private final static String TAB = "SampleAppActivity";
private MediaPlayer mBgmPlayer;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mBgmPlayer = new MediaPlayer();
try {
mBgmPlayer.setDataSource(Environment.getExternalStorageDirectory().getPath() + "/" + "bgm.mp3");
mBgmPlayer.prepare();
} catch (IllegalArgumentException e) {
} catch (SecurityException e) {
} catch (IllegalStateException e) {
} catch (IOException e) {
}
mBgmPlayer.start();
}
}
参考:Android Developers:MediaPlayer
参考:Android Developers:Android Supported Media Formats

No comments:
Post a Comment