◆MediaPlayerの特徴:データをストリーム形式で読み込み、破棄する。BGMなどの大きいファイルを再生するときによく使われる。
良い点:メモリの負担が小さい
悪い点:呼び出しから再生までの時間がSoundPoolに比べて遅い
◆MediaPlayerを使って、サウンドを再生するには、以下のようにします。
*サウンド再生
private MediaPlayer mBgm;
this.mBgm = MediaPlayer.create(this, R.raw.bgm_title);
this.mBgm.setLooping(true);
this.mBgm.setVolume(1.0f, 1.0f);
mBgm.seekTo(0);
mBgm.start();
*サウンドの休止
mBgm.pause();
*サウンドの停止と破棄
mBgm.stop();
mBgm.release();
◆MediaPlayerクラスのメソッド
○MediaPlayer.create(Context context, int resid)
第一引数:コンテキスト 第二引数:リソースID
○setLooping(boolean looping)
第一引数:ループするかどうか(true:ループする false:ループしない)
○setVolume(float leftVolume, float rightVolume)
ボリューム設定(0.0~1.0の間で設定する)
○seekTo(int msec)
音楽の開始位置をミリ秒単位で指定する。
◆ブログ記事「SoundPoolを利用したサウンドの再生」のサンプルに、MediaPlayerを利用したサウンドの再生機能を加えてみました。
*変更点
①「res」→「raw」フォルダの中にbgm_title.midファイルを加えました。
②src/com.example.android.sample/Sample.javaの変更
package com.example.android.sampletwo; import android.app.Activity; import android.content.SharedPreferences; import android.media.AudioManager; import android.media.MediaPlayer; import android.media.SoundPool; import android.os.Bundle; import android.view.MotionEvent; import android.view.Window; import android.view.WindowManager; import android.widget.TextView; public class SampleTwo extends Activity { private TextView aTextView; private TextView bTextView; private char[] charactor = new char[4]; private String moji; private int x, y; private SoundPool mSoundPool; private int SoundId; private MediaPlayer mBgm; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.main); aTextView = (TextView) findViewById(R.id.myTextView); bTextView = (TextView) findViewById(R.id.myTextPosition); //データの書き込み SharedPreferences pref = this.getSharedPreferences("MemoPrefs", MODE_PRIVATE); aTextView.setText(pref.getString("memo", "")); bTextView.setText("X:" + pref.getInt("xposition", 0) + " Y:" + pref.getInt("yposition", 0)); //SoundPoolの生成と読み込み this.mSoundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0); this.SoundId = mSoundPool.load(this, R.raw.sb_blast, 1); //MediaPlayerの生成と読み込み this.mBgm = MediaPlayer.create(this, R.raw.bgm_title); this.mBgm.setLooping(true); this.mBgm.setVolume(1.0f, 1.0f); mBgm.seekTo(0); mBgm.start(); } @Override public boolean onTouchEvent(MotionEvent event) { x = (int)event.getX(); y = (int)event.getY(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: charactor[0] = (char)(68); //D charactor[1] = (char)(79); //O charactor[2] = (char)(87); //W charactor[3] = (char)(78); //N moji = String.valueOf(charactor); aTextView.setText(moji); bTextView.setText("X:" + x + " Y:" + y); break; case MotionEvent.ACTION_UP: charactor[0] = (char)(85); //U charactor[1] = (char)(80); //P charactor[2] = (char)(32); //スペース charactor[3] = (char)(32); //スペース moji = String.valueOf(charactor); aTextView.setText(moji); bTextView.setText("X:" + x + " Y:" + y); mSoundPool.play(SoundId, 1.0f, 1.0f, 1, 0, 1.0f); break; case MotionEvent.ACTION_MOVE: charactor[0] = (char)(77); //M charactor[1] = (char)(79); //O charactor[2] = (char)(86); //V charactor[3] = (char)(69); //E moji = String.valueOf(charactor); aTextView.setText(moji); bTextView.setText("X:" + x + " Y:" + y); break; case MotionEvent.ACTION_CANCEL: aTextView.setText("ACTION_CANCEL"); break; } return super.onTouchEvent(event); } protected void onResume() { super.onResume(); mBgm.start(); } protected void onRestart() { super.onRestart(); mBgm.start(); } protected void onPause() { super.onPause(); mBgm.pause(); } protected void onStop() { super.onStop(); //データの保存 SharedPreferences pref = this.getSharedPreferences("MemoPrefs", MODE_PRIVATE); SharedPreferences.Editor editor = pref.edit(); editor.putString("memo", aTextView.getText().toString()); editor.putInt("xposition", x); editor.putInt("yposition", y); editor.commit(); mBgm.pause(); } protected void onDestroy() { super.onDestroy(); mBgm.stop(); mBgm.release(); } }
コメント