MediaPlayerを使って音楽を鳴らすには

MediaPlayerでの音再生方法は下の通り。

MediaPlayer gameBgm;

gameBgm = MediaPlayer.create(this, R.raw.gameBgm); // BGMファイルを読み込み
gameBgm.setLooping(true); // ループ設定

gameBgm.seekTo(0); // 再生位置を0ミリ秒に指定
gameBgm.start(); // 再生開始
		

MediaPlayer.startメソッドを実行すればBGMが再生され、停止したいときはMediaPlayer.stopもしくは MediaPlayer.pauseメソッドを使う。

ゲームアプリを開発していて、ゲームを開始するとゲームプレイ中のBGMが流れ、ゲームオーバーになると別のBGMを再生する処理を作ることになった。

 // ゲームオーバー時にBGMを切り替える
gameplayBgm.stop(); // プレイ中のBGMを停止する
gameoverBgm.start(); // ゲームオーバー時のBGMを再生する
		

ゲームオーバー時に上のコードを実行しBGMを切り替えていたが、再度ゲームを開始したときにゲームプレイ中のBGMが再生されなかった。

回避策としてMediaPlayer.stopメソッドでBGMを止めるのではなく、MediaPlayer.pauseメソッドでBGMを停止させることにした。

 // ゲームオーバー時にBGMを切り替える
gameplayBgm.pause(); // プレイ中のBGMを停止する
gameoverBgm.start(); // ゲームオーバー時のBGMを再生する
		

再度ゲームプレイ中のBGMを再び流すときはMediaPlayer.seekToメソッドでBGMをスタート位置に戻し再生した。

gameplayBgm.seekTo(0); // プレイ中のBGMをスタート位置に戻す
gameplayBgm.start(); // プレイ中のBGMを再生する
		

またBGMが停止しているときにMediaPlayer.pauseメソッドを実行してしまうと、MediaPlayer.startメソッドを実行しても再生されないので注意。下のようにMediaPlayer.isPlayingメソッドを使い再生しているかチェックすることが出来る。

 // BGMが再生されていれば停止する
if(gameBgm.isPlaying()) {
 gameBgm.pause();
}
gameBgm.start();