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