Android携帯ゲームを作って世界に配信してみよう(3) ―― 効果音の入れ方とデータの保存処理を学ぶ
2.音声を再生しよう!
Androidアプリで音声を再生する方法は,複数あります.特によく使われるのは,MediaPlayerクラスとSoundPoolクラスを使う方法です.それぞれ,表1のようなメリット/デメリットがありますので,目的によって使い分けてください.一般的には,BGMの再生にはMediaPlayerクラスを,効果音の再生にはSoundPoolクラスを利用します.
MediaPlayer | SoundPool | |
メリット | ・長い曲を再生できる | ・再生時の遅延が比較的少ないので,連続再生に向いている |
デメリット | ・再生の開始・終了が遅い | ・一定時間(10秒前後と言われている)以上の長さの音声の再生ができない |
●BGMを再生するMediaPlayerクラスの基本的な使い方
MediaPlayerクラスを利用してBGMを再生する基本的な流れは,次のようになります(ソース・コードはSounds.java内に存在する).
(1)管理クラスの生成と音声の読み込み
MediaPlayer mediaPlayer = MediaPlayer.create(context, resourceId);
(2)再生開始 mediaPlayer.start();
(3)再生一時停止 mediaPlayer.pause();
(4)再生終了 mediaPlayer.stop();
(5)読み込んだリソースの破棄 mediaPlayer.relase();
ここでは,(1)管理クラスの生成と音声の読み込みを行う,MediaPlayerクラスのcreateメソッドについて,APIドキュメントの情報を基に詳しく説明します.その他のメソッドについては,以下のAPIドキュメントを参照してください.
MediaPlayer | Android Developers
http://developer.android.com/reference/android/media/MediaPlayer.html
●MediaPlayerクラスのcreateメソッドを理解する
MediaPlayerクラスの静的(static)メソッドであるcreateメソッドは,以下のように定義されています.なお,createメソッドは引き数の異なるいくつかのパターンが用意されていますが,今回は,リソースIDで指定するメソッドを紹介しています.
public static MediaPlayer create (Context context, int resid)
MediaPlayerクラスは,音声ファイルの読み込みから再生準備,再生までを含めて音声ファイルを管理するクラスです.createメソッドは,そのMediaPlayerクラスを生成します.大事なポイントは,MediaPlayerクラスが不要になった際には必ずreleaseメソッドを呼び,読み込んだリソースを破棄することです.破棄しないで複数のMediaPlayerクラスのインスタンスを四つ以上生成してしまうと,エラーが起こります.
このメソッドの引き数と戻り値は,表2の通りです.
第1引き数 context | 一般的には起動Activityクラスのインスタンスを指定するが,ViewクラスのgetContextメソッドを通じて取得したインスタンスでもかまわない |
第2引き数 resId | 読み込みたいファイルのリソースID(整数値)を指定する. リソースIDを使うと,resディレクトリ内の各種リソース・ファイルを,ファイル名ではなく,ID(整数値)で簡単に指定できる.Android SDKは,ビルド時に,ファイル名をリソースIDにマッピングした"R"クラスを自動で生成する.例えば,"res/raw"ディレクトリ内 の"sample.mp3"ファイルは,ビルド後に,ディレクトリ名を"."でつなぎ,ファイル名から拡張子を除いた"R.raw.sample"という 名前の変数にリソースIDを格納する |
戻り値 | 成功すると,読み込んだ音声ファイルを管理するMediaPlayerクラスのインスタンスが返る.失敗すると,nullが返る |