マルチメディア
オーディオ
オーディオ形式
Android標準で対応しているオーディオ形式
形式 | 録音 | 再生 | ファイルタイプ |
---|---|---|---|
AAC LC\LTP | 〇 | 〇 | 3GPP(.3gp),MPEG-4(.mp4, .m4a),ADTS raw AAC(.aac, Android3.1以降で再生可, Android4.0以降で録音可,ADIFはサポート外, MPEG-TS(.ts, シーク不可, Android3.0以降) |
HE-AACv1(AAC+) | 〇 | 3GPP(.3gp),MPEG-4(.mp4, .m4a),ADTS raw AAC(.aac, Android3.1以降で再生可, Android4.0以降で録音可,ADIFはサポート外, MPEG-TS(.ts, シーク不可, Android3.0以降) | |
HE-AACv2(enhanced AAC+) | 〇 | 3GPP(.3gp),MPEG-4(.mp4, .m4a),ADTS raw AAC(.aac, Android3.1以降で再生可, Android4.0以降で録音可,ADIFはサポート外, MPEG-TS(.ts, シーク不可, Android3.0以降) | |
AMR-NB | 〇 | 〇 | 3GPP(.3gp) |
AMR-WB | 〇 | 〇 | 3GPP(.3gp) |
FLAC | 〇 | FLAC(.flac) Android3.1以降 | |
MP3 | 〇 | MP3(.mp3) | |
MIDI | 〇 | Type 0と1(.mid, .xmf, .mxmf), RTTTL\RTX(.rtttl, .rtx), OTA(.ota), iMelody(.imy) | |
Vorbis | 〇 | Ogg(.ogg), Matroska(.mkv, Android4.0以降) | |
PCM/WAVE | 〇 | WAVE(.wav) |
利用できるオーディオ形式はAndroidのバージョンによって変わるため、Supported Media Formatを参照する必要あり
MediaPlayerクラス
android.mediaパッケージの、MediaPlayerクラスを使用する。ライフサイクルがある。
コンストラクタを使用する方法と、createメソッドを使う方法がある。
MediaPlayerのライフサイクル
インスタンス生成でIdle状態になる。各メソッドを呼び出すことで状態が変化する。
状態を無視したメソッドを呼び出すとError状態になる。
releaseはどの状態からでも呼び出せる。releaseメソッドでMediaplayerはEnd状態に移行し、終了する。
Initialize状態でprepareAsyncメソッドを呼び出すとPreparingに遷移し、その後自動的にOnPreparedListenerインタフェースのonPreparedメソッドが呼ばれてPrepared状態に遷移する。
Started状態で再生完了した場合、繰り返しモードではない場合は、自動的にPlaybackCompleted状態に遷移する。
MediaPlayerの状態
状態 | 説明 |
---|---|
Idle | インスタンス生成後やリセット後のアイドル状態 |
Initialized | 再生するデータを設定し終えた状態 |
Preparing | 準備中の状態で自動的にPreparedに移行する |
Prepared | 準備完了の状態 |
Started | 再生中の状態 |
Paused | 一時停止中の状態 |
PlaybackComplete | オーディオの再生が完了した状態 |
Stopped | 停止中の状態 |
End | ライフサイクルを終えた状態 |
Error | エラーが発生した状態 |
オーディオを再生する(コンストラクタ)
コンストラクタを使用し、MediaPlayerのインスタンスを生成する(Idle状態)
EnvironmentクラスのgetExternalStorageDirectoryメソッドを使用し外部ストレージのパスを取得して、
オーディオファイルへのパスを取得している。
setDataSourceメソッドの引数に、オーディオファイルのパスを設定して呼び出すとInitialize状態に遷移するので、
続けてprepareメソッドを呼び出しPrepared状態に移行させる。
最後にstartメソッドを呼び出すことで、Started状態に移行して、オーディオファイルが再生される。
オーディオを再生する(createメソッド)
MediaPlayerクラスのcreateメソッドを使用することで、Prepared状態のインスタンスを生成できる。
その場合はリソースIDが必要になる
createメソッドの第一引数はContextを指定する。第二引数にオーディオファイルのリソースIDを指定する。
オーディオファイルは/res/rawファイルに格納する必要がある。
リソースIDの代わりにUriクラスを利用して再生することも可能
MediaPlayerのメソッド
一時停止するにはpauseメソッドを呼び出す。呼び出したことでMediaPlayerはPaused状態に移行する。
Paused状態では、startメソッドか、stopメソッドを呼び出すことが出来る。
停止するにはstopメソッドを呼び出す。呼び出したことでMediaPlayerはStopped状態に移行する。
再度prepareメソッドを呼び出すことで、startメソッドが呼び出せるようになる。
Idle状態に戻すには、resetメソッドを使う。PreparingとEnd以外の時に使える。
MediaPlayerの使用をやめるにはreleaseメソッドを呼び出す。呼び出したことでEnd状態に移行する。
SoundPoolクラス
android.mediaパッケージのSoundPoolクラスも使用できる。
このクラスは効果音などの短いオーディオを再生するのに向いている。
オーディオを再生する
SoundPoolクラスのインスタンスを生成する。第一引数には同時に再生するオーディオ数を設定。第二引数にはストリームの種類を指定する(通常はSTREAM_MUSIC)。第三引数は0固定(現時点では)
次にloadメソッドを呼び出して、オーディオデータを読み込む。loadメソッドには、ContextやリソースID,ファイルパスなどを指定する。戻り値としてint型の値が返るので次に使う。
次にplayメソッドにint型の値を使って再生する(第一引数)。第二引数、第三引数には左右の音量を0.0-1.0の範囲で設定する。第四引数には優先度(0が一番低い)を設定し、第五引数にはループの有無(0:ループ無し、-1:無限ループ)を設定する。第6引数には再生速度を指定する(0.5~2.0の範囲)
使い終わったらreleaseメソッドを呼び出し終了する。
loadメソッドの直後にplayをしても、再生できない場合がある(ロードが済んでいない場合)Android2.2(APIレベル8以降)であれば、soundPoolクラスのsetOnLoadCompleteListenerメソッドを呼び出し、OnLoadCompleteListenerインタフェースを実装したクラスのインスタンスを登録することで、onLoadCompleteメソッドで行える。
MediaRecorderクラス
android.mediaパッケージのMediaRecorderクラスを使用する。MediaRecorderにもライフサイクルがある。
インスタンス作成にはコンストラクタを使用する方法がある。
MediaRecorderのライフサイクル
状態 | 説明 |
---|---|
Initial | インスタンス生成後や、リセット後の初期状態 |
Initialized | オーディオソースやビデオソースを設定し終えた状態 |
DataSourceConfigured | 出力形式を設定し終えた状態 |
Prepared | 準備完了の状態 |
Recording | 記録中の状態 |
Released | ライフサイクルを終えた状態 |
Error | エラーが発生した状態 |
オーディオを録音する
MediaRecorderのコンストラクタを使用し、Initial状態のインスタンスを生成する。
setAudioSourceメソッドの引数にAudioSourceクラスの定数を設定し、オーディオソースを指定する(MIC:マイクなど)指定したことでInitializedに移行する。
setOutputFormatメソッドの引数に、OutputFormatクラスの定数を設定し出力形式を指定する(THREE_GPPを指定)指定したことでDataSourceConfigured状態に移行する。
出力形式の定義
定数 | 説明 |
---|---|
AMR_NB | AMR NB形式 |
AMR_WB | AMR WB形式 |
DEFAULT | デフォルト |
MPEG_4 | MPEG4メディア形式 |
RAW_AMR | AMR NB形式 |
THREE_GPP | 3GPPメディア形式 |
DataSourceConfigured状態では、setAudioEncoderメソッドとsetOutputFileメソッドを呼び出し、圧縮方法とファイル名を指定する。
音声の圧縮方法
定数 | 説明 |
---|---|
ACC | ACCオーディオコーディック |
AMR_NB | AMR(Narrowband)オーディオコーディック |
AMR_WB | AMD(Wideband)オーディオコーディック |
DEFAULT | デフォルト |
設定が終わったら、prepareメソッドを呼び出しPrepared状態に移行する。
最後にstartメソッドを呼び出すとRecording状態に遷移して、録音を開始する。
MediaRecorderのメソッド
録音を終了するにはstopメソッドを呼び出す。
使用をやめるにはreleaseメソッドを呼び出す。Initial状態の時だけ呼び出せる。
許可情報の設定
録音するにはandroid.permission.RECORD_AUDIOを許可する必要がある、
SDカードに保存する場合はandroid.permission.WRITE_EXTERNAL_STORAGE
ビデオ
利用可能なビデオ形式
最新はデベロッパーサイトを参照
http://developer.android.com/intl/ja/guide/appendix/media-formats.html
ビデオ形式 | 再生 | ファイルタイプ |
---|---|---|
H.263 | 〇 | 3GPP(.3gp),MPEG-4(.mp4) |
H.264 AVC | 〇 | 3GPP(.3gp),MPEG-4(.mp4), MPEG-TS(.ts, ACCオーディオのみ、シーク不可, Android3.0以降 |
MPEG-4 SP | 〇 | 3GPP(.3gp) |
VP8 | 〇 | WebM(.webm), Matroska(.mkv, Android 4.0以降) |
VideoViewクラス
android.widgetパッケージのVideoViewクラスを利用する。
インスタンスを生成する方法と、レイアウトで定義する方法がある。
MediaControllerクラス
再生や、停止はVideoViewクラスのstartメソッドやstopPlaybackメソッドで行える。
MediaControllerクラスを利用すると操作用ボタンのビューが利用できる
ビデをを再生する
/res/layoutにレイアウトを作成してビデオを再生する
findViewByIdメソッドでレイアウトからVideoViewのインスタンスを取得する。
次にsetMediaControllerメソッドで、VideoViewにMediaControllerをセットする。
setVideoPathメソッドを呼び出して、ファイルへのパスを設定する。
setVideoUriを利用することでURI指定して再生できる(ネットワーク上のファイルを再生できる)