Androidで音楽再生
Androidで音楽再生
アプリケーション機能
- 上ボタンを押すとウィンドウズの警告音がなる
- 下ボタンを押すと音楽再生
- センターボタンを押すと音楽停止
準備
- 適当な音楽ファイルを用意する
Andoroidのオーディオサポートフォーマット
プロジェクト概要
- プロジェクト名:SoundSample
- BuildTarget:sdk1.5
追加リソース
-
- 「res」フォルダ以下に「raw」フォルダ
- 「raw」フォルダ以下に「sample.mp3」ファイル
プログラム作成
MediaPlayerの作成
MediaPlayerオブジェクトをprivateで定義する
private MediaPlayer sample;
MediaPlayerのインスタンス作成し、sample.mp3で初期化
this.sample = MediaPlayer.create(this, R.raw.sample);
音楽の再生処理
onKeyDownメソッドをオーバーライドし、ローカルMediaPlayerオブジェクトを定義する。
※特にローカルで定義する必要はないが、複数の音楽の同時に再生に対応させるためここではローカル変数を用意した
MediaPlayer mp;
各キーに対応したコードを記述
- 上下ボタンで再生する音楽を決定
- 上:警告音
- 下:適当な音楽
- seekTo()で音楽ファイルの先頭にまき戻しを行う
- start()メソッドで再生開始
- stop()メソッドで停止する
- prepare()メソッドで再生準備をする
※停止後はprepare()メソッドを呼び出さないと以下のエラーが発生する
06-15 16:08:53.902: ERROR/MediaPlayer(470): Attempt to perform seekTo in wrong state: mPlayer=0x18b5b8, mCurrentState=64 06-15 16:08:53.902: ERROR/MediaPlayer(470): error (-38, 0) 06-15 16:08:53.902: ERROR/MediaPlayer(470): start called in state 0 06-15 16:08:53.902: ERROR/MediaPlayer(470): error (-38, 0) 06-15 16:08:53.902: ERROR/MediaPlayer(470): Error (-38,0) 06-15 16:08:53.902: ERROR/MediaPlayer(470): Error (-38,0)
public boolean onKeyDown(int keyCode, KeyEvent event) { MediaPlayer mp; switch(keyCode){ case KeyEvent.KEYCODE_DPAD_CENTER: mp = this.sample; if(mp.isPlaying()){ mp.stop(); try { mp.prepare(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return true; case KeyEvent.KEYCODE_DPAD_DOWN: mp = this.sample; break; default : return super.onKeyDown(keyCode, event); } mp.seekTo(0); mp.start(); return true; }
全体ソース
package sound.sample; import java.io.IOException; import android.app.Activity; import android.media.MediaPlayer; import android.os.Bundle; import android.view.KeyEvent; public class SoundSample extends Activity { private MediaPlayer sample; private MediaPlayer chord; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); this.sample = MediaPlayer.create(this, R.raw.sample); this.chord = MediaPlayer.create(this, R.raw.chord); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { MediaPlayer mp; switch(keyCode){ case KeyEvent.KEYCODE_DPAD_CENTER: mp = this.sample; if(mp.isPlaying()){ mp.stop(); try { mp.prepare(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return true; case KeyEvent.KEYCODE_DPAD_DOWN: mp = this.sample; break; case KeyEvent.KEYCODE_DPAD_UP: mp = this.chord; break; default : return super.onKeyDown(keyCode, event); } mp.seekTo(0); mp.start(); return true; } }