BGMとVoiceを想定して、MediaPlayer でサウンド・ファイルを再生してみたよ。
作ってみたのは、下記ソース。
public class mySound extends Activity { private MediaPlayer mp; private MediaPlayer mp1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // トラック 0 mp = MediaPlayer.create(this, R.raw.bgm); mp.setAudioStreamType(AudioManager.STREAM_MUSIC); mp.setLooping(true); mp.start(); //-- // トラック 1 mp1 = MediaPlayer.create(this, R.raw.voice); mp1.setAudioStreamType(AudioManager.STREAM_MUSIC); mp1.start(); //-- } @Override public void onDestroy(){ if(mp.isPlaying()){ mp.stop(); } if(mp1.isPlaying()){ mp1.stop(); } super.onDestroy(); // アクティビティの終了 finish(); } }
- 再生トラックを2つ設け、片方をループ再生、もう片方をループなしの再生をしている。
- 再生するファイルは、リソース・ファイル。
サウンド・ファイルは、res の中に raw というディレクトリを作って、その中に格納する。 - ファイル・フォーマットは、mp3, midi, ogg。それぞれ再生されることを確認。
13行目のsetAudioStreamType は、実行しなくても再生される。
ただし、今回のような、複数トラック時に再生されない時があった。
onDestroy
MediaPlayer での再生は、アプリ終了後も継続される。
そのため、onDestroy メソッドで再生停止するようにしているよ。
※.onDestroy は、アプリの終了時に実行されるmethod。
またアプリに実装する場合、onPause, onStop でも同様に、pause や stop を実行する必要がある。
じゃないと、アプリを切り替えられた時に、サウンドが再生され続けてしまうよ。
prepare ってナニよ?
MediaPlayer のprepare メソッドは、再生準備をするものらしい。
けれど、「create 直後はしなくていい」らしい。
どうも仕様の変更があったみたいで、昔はするものだったみたいだね。
今はcreate やstop と共に行われるようになっているみたいだ。
※.参考
https://groups.google.com/group/android-group-japan/msg/fdff0b4d0af94b4b?hl=ja
http://developer.android.com/reference/android/media/MediaPlayer.html