1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

マルチメディア

オーディオ

オーディオ形式

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

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?