【Android】MediaPlayerクラスを使ってmp3形式の音楽ファイルを再生してみる


音楽ファイルを読み込んで再生する方法です。
Androidには音を鳴らす方法としてはSoundPoolクラスを使った方法もありますね。

MediaPlayerクラスは再生時間が長いファイルを再生する時に使い、
SoundPoolクラスは短い音(効果音)を鳴らす時に使うと良いそうです(^ω^)



再生に使用するmp3ファイルを用意する


今回はリソースファイルから読み込んで再生する方法を紹介します。
resディレクトリの下に「raw」というディレクトリを作成してそこに読み込むmp3ファイルを置いておきます。
【Android】MediaPlayerクラスを使ってmp3形式の音楽ファイルを再生してみる01

これにより、プログラム中で「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);
			}
		}

    }
}


【実行結果】
【Android】MediaPlayerクラスを使ってmp3形式の音楽ファイルを再生してみる02 【Android】MediaPlayerクラスを使ってmp3形式の音楽ファイルを再生してみる03


関連記事

コメントは受け付けていません。