音楽ファイルを読み込んで再生する方法です。
Androidには音を鳴らす方法としてはSoundPoolクラスを使った方法もありますね。
SoundPoolクラスは短い音(効果音)を鳴らす時に使うと良いそうです(^ω^)
再生に使用するmp3ファイルを用意する
今回はリソースファイルから読み込んで再生する方法を紹介します。
resディレクトリの下に「raw」というディレクトリを作成してそこに読み込むmp3ファイルを置いておきます。
これにより、プログラム中で「R.raw.test」というリソース名で音楽ファイルを扱うことができます(^ω^)
MediaPlayerクラスのオブジェクトを取得して読込み、再生する
MediaPlayerクラスのオブジェクトをcreateメソッドで作成して、prepareメソッドで呼び出し、startメソッドで再生開始です。
createメソッドの引数には自身のコンテキスト(thisで問題無いです)とリソース名を指定します。
例外が発生する可能性があるのでtyu/catch文でくくっておきます。
MediaPlayer mp = MediaPlayer.create( this, R.raw.test ); try{ mp.prepare(); }catch( Exception e ){ } mp.start();
MediaPlayerクラスのメソッド例
取得したオブジェクトの関数を使って停止やシークができます。
アプリの停止するタイミングでreleaseメソッドを使わないとメモリに残り続けてしまうので注意です。
pauseメソッド | 再生の停止 |
---|---|
seetToメソッド | 引数で指定した秒数にシーク |
releaseメソッド | リソースの開放 |
setVolumeメソッド | 音量の設定 |
サンプルプログラム
再生、一時停止、停止ボタンを付けた簡単なサンプルです。
・Sample20120802Activity.java
※importは省略
public class Sample20120802Activity extends Activity { MediaPlayer mp; Button[] btn = new Button[3]; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout ll = new LinearLayout(this); ll.setOrientation(LinearLayout.VERTICAL); setContentView(ll); btn[0] = new Button(this); btn[1] = new Button(this); btn[2] = new Button(this); btn[0].setText("再生"); btn[1].setText("一時停止"); btn[2].setText("停止"); btn[0].setEnabled(true); btn[1].setEnabled(false); btn[2].setEnabled(false); ll.addView(btn[0]); ll.addView(btn[1]); ll.addView(btn[2]); btn[0].setOnClickListener( new sampleClickListener() ); btn[1].setOnClickListener( new sampleClickListener() ); btn[2].setOnClickListener( new sampleClickListener() ); } public void onResume(){ super.onResume(); mp = MediaPlayer.create( this, R.raw.test ); mp.setOnCompletionListener( new SampleCompListener() ); } public void onPause(){ super.onPause(); mp.release(); } class SampleCompListener implements OnCompletionListener{ @Override public void onCompletion(MediaPlayer mp) { btn[0].setEnabled(true); btn[1].setEnabled(false); btn[2].setEnabled(false); } } class sampleClickListener implements OnClickListener{ @Override public void onClick(View v) { if( v == btn[0] ){ btn[0].setEnabled(false); btn[1].setEnabled(true); btn[2].setEnabled(true); try{ mp.prepare(); }catch( Exception e ){ } mp.start(); }else if( v == btn[1] ){ btn[0].setEnabled(false); btn[1].setEnabled(true); btn[2].setEnabled(true); if( mp.isPlaying() ){ mp.pause(); }else{ mp.start(); } }else{ btn[0].setEnabled(true); btn[1].setEnabled(false); btn[2].setEnabled(false); mp.pause(); mp.seekTo(0); } } } }
【実行結果】