Android携帯ゲームを作って世界に配信してみよう(3) ―― 効果音の入れ方とデータの保存処理を学ぶ

山田 元康

tag: 組み込み

エレキ系DIY 2011年12月 7日

2.音声を再生しよう!

 Androidアプリで音声を再生する方法は,複数あります.特によく使われるのは,MediaPlayerクラスとSoundPoolクラスを使う方法です.それぞれ,表1のようなメリット/デメリットがありますので,目的によって使い分けてください.一般的には,BGMの再生にはMediaPlayerクラスを,効果音の再生にはSoundPoolクラスを利用します.

 

表1 MediaPlayerクラスとSoundPoolクラスのメリット/デメリット

  MediaPlayer SoundPool
メリット

・長い曲を再生できる
・256種類の音声を同時に読み込み,管理することができる

・再生時の遅延が比較的少ないので,連続再生に向いている
デメリット

・再生の開始・終了が遅い
・一つのクラスで管理できる音声は1種類
・MediaPlayerクラスのインスタンスは最大四つまでしか生成できない

・一定時間(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の通りです.

 

表2 MediaPlayerクラス createメソッドの引き数と戻り値

第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が返る

 

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日