Android携帯ゲームを作って世界に配信してみよう(3) ―― 効果音の入れ方とデータの保存処理を学ぶ
山田 元康
●くろまるBGM再生の流れをコードで追いかけてみる
それでは,今回のゲームでMediaPlayerクラスを使って,どのようにBGMを再生しているかを説明します.
まず,タイトル画面を開く処理を行うときに,音楽を管理するSoundsクラスのplayBgmTitleメソッドを呼び出します(リスト1).
リスト1 TitleSceneクラスのstartメソッド(TitleScene.javaより抜粋)
/** 表示開始 */
public void start(SurfaceView view) {
blinkStarted = System.currentTimeMillis();
Sounds.playBgmTitle();
}
public void start(SurfaceView view) {
blinkStarted = System.currentTimeMillis();
Sounds.playBgmTitle();
}
次に,playBGMTitleメソッドでは,タイトル画面で再生したい音楽のリソースIDを指定して,BGM再生メソッド(playBgmメソッド)を呼び出します(リスト2).
リスト2 SoundsクラスのplayBgmTitleメソッド(Sounds.javaより抜粋)
public static void playBgmTitle() {
playBgm(R.raw.bgm_title);
}
playBgm(R.raw.bgm_title);
}
playBGMメソッドでは,まず,現在再生しているBGMがある場合は,そのBGMのリソースを破棄します(リスト3).そして,引数で渡されたリソースIDの音声ファイルを読み込み,音声管理クラスを生成します.BGMなので,MediaPlayerクラスのsetLoopingメソッドを読み出し,無限ループするようにします.次に,効果音がBGMに埋もれてしまわないように,MediaPlayerクラスのsetVolumeメソッドを使い,BGMのボリュームを低めに設定しています.
リスト3 SoundsクラスのplayBgmメソッド(Sounds.javaより抜粋)
private static synchronized void playBgm(final int resourceId) {
if (mediaPlayer != null) {
mediaPlayer.release();
mediaPlayer = null;
}
mediaPlayer = MediaPlayer.create(context, resourceId);
mediaPlayer.setLooping(true);
mediaPlayer.start();
mediaPlayer.setVolume(0.1F, 0.1F);
}
}
if (mediaPlayer != null) {
mediaPlayer.release();
mediaPlayer = null;
}
mediaPlayer = MediaPlayer.create(context, resourceId);
mediaPlayer.setLooping(true);
mediaPlayer.start();
mediaPlayer.setVolume(0.1F, 0.1F);
}
}