【Android】SoundPoolクラスを使ってwav形式、ogg形式の効果音(SE)を鳴らしてみる


概ねタイトルとおりです。
音を鳴らす方法はいくつかありますが、今回は
・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();
    }
}



【実行結果】
SoundPoolを使ったサンプルプログラム

ボタンを押すと音が鳴るだけのサンプル


関連記事

【Android】SoundPoolクラスを使ってwav形式、ogg形式の効果音(SE)を鳴らしてみる” への1件のコメント

  1. ピンバック: 【Android】MediaPlayerクラスを使ってmp3形式の音楽ファイルを再生してみる | 桜花満開