概ねタイトルとおりです。
音を鳴らす方法はいくつかありますが、今回は
・SoundPoolクラス
を使った方法を紹介してみます。
SoundPoolクラスは短い音をを再生するのに向いているそうです。
ゲームなどで短い効果音(SE)として利用するのに適してますね。
1.使い方としてはSoundPoolインスタンスを作成。
2.再生するファイルをロード。
3.再生!
といった流れですね。
SoundPoolクラスのインスタンスを生成
・第一引数
ロードするファイルの数。
・第二引数
ストリームのタイプ
・第三引数
サンプリングレートのクオリティ(デフォルトは0)
をそれぞれ設定して生成します。
SoundPool sp = new SoundPool( 1, AudioManager.STREAM_MUSIC, 0 );
再生する音声ファイルをロード
mp3も読み込めるようですが、wav、oggのどちらかにしておいた方がいいそうですね。
今回はwav形式のものを読み込んでみます。
予めいつものresディレクトリの中に「raw」というディレクトリを作成して、
中に「se01.wav」というファイルを用意しておきます。
sound_id = sp.load(this, R.raw.se01, 1 );
ファイル名のみで拡張子はいりません。
返り値としてint型のidを返します。
idや音量などを指定して音声を再生する
最後に再生です。
再生時には引数がたくさんあるのでちょっと注意ですね。
・第一引数
ロードした時のID
・第二引数
左側の音量
・第三引数
右側の音量
・プライオリティ
優先度(デフォルトは0)
・ループ指定
-1:無限ループ
0:一回再生
・再生速度
0.5~2.0まで
1.0で普通の速度
今回はこのような感じに。
sp.play(sound_id, 1.0F, 1.0F, 0, 0, 1.0F);
最後にサンプルを載せておきます。
アクティビティのonCreateでインスタンス生成、
onPauseでrelease関数を使いメモリを開放しています。
サンプルプログラム
import android.app.Activity; import android.media.AudioManager; import android.media.SoundPool; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.LinearLayout; public class Sample20120709Activity extends Activity { SoundPool sp; int sound_id; /** 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); //インスタンス作成 sp = new SoundPool( 1, AudioManager.STREAM_MUSIC, 0 ); sound_id = sp.load(this, R.raw.se01, 1 ); Button btn = new Button(this); btn.setText("ボタンを押すと音がなります"); btn.setOnClickListener( new OnClickListener(){ @Override public void onClick(View v) { sp.play(sound_id, 1.0F, 1.0F, 0, 0, 1.0F); } } ); ll.addView(btn); } @Override public void onPause(){ super.onPause(); sp.release(); } }
【実行結果】
ピンバック: 【Android】MediaPlayerクラスを使ってmp3形式の音楽ファイルを再生してみる | 桜花満開