Android
AndroidSDK
android開発

Androidアプリケーション技術者認定試験ベーシックの試験範囲の知識をまとめた(10)

マルチメディア

オーディオ

オーディオ形式

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を参照する必要あり

http://developer.android.com/intl/ja/guide/appendix/media-formats.html

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指定して再生できる(ネットワーク上のファイルを再生できる)