【Android Studio】SoundPoolを使って効果音を再生する方法

スポンサーリンク

Android StudioのSooundPoolクラスを使って効果音を再生する

Android StudioではSoundPoolクラスを使うことによって効果音を再生できます。ですが若干準備に手間がかかるのでおおまかな手順を下記にしめそうと思います。

    1. 音楽ファイルを準備してResourceとしてAndroid Studioに登録する
    2. SoundPoolを実装する
    3. 音楽用のフィールド(int型)とSoundPoolのフィールドを宣言しておく
    4. 音楽用のフィールドに登録したリソースをロード
    5. soundPool.play()メソッドで音楽を再生するが、これをメソッド化して汎用できるようにする

音楽ファイルを準備してResourceとしてAndroid Studioに登録する

まずはAndroid Studio側でリソースディレクトリ(フォルダ)を作成します。リソースディレクトリを作成するには。
「res」のところで右クリック→「new」→「Android Resource Directory」を選択します
android studio resource
選択すると次のような画面が現れます
android studio resource2
resouce typeはrawを選択する必要があります。名前はとくになんでもいいのですがresource typeでrawを選択するとrawという名前に自動で変わるのでrawでいいでしょう。このディレクトリに音楽ファイルを貼り付けます(ドラッグ&ドロップは不可)

これで音楽ファイルをリソースとして登録する作業は完了です。

SoundPoolを実装する

ここから先はSoundPoolの実装、音楽用のフィールド宣言、音楽用のフィールドに登録したリソースをロード、soundPool.play()をメソッド化したコードをすべて書いていきます。

public class MainActivity extends AppCompatActivity {
    //音楽用のフィールドとSoundPoolのフィールド
    int mp3a;
    int mp3b;
    SoundPool soundPool;
    //音楽再生用のメソッド
    public void play_mp3a(){soundPool.play(mp3a,1f , 1f, 0, 0, 1f);};
    public void play_mp3b(){soundPool.play(mp3b,1f , 1f, 0, 0, 1f);};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //soundPoolの初期化
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {

            //1個目のパラメーターはリソースの数に合わせる
            soundPool = new SoundPool(2, AudioManager.STREAM_MUSIC, 0);

        } else {
            AudioAttributes attr = new AudioAttributes.Builder()
                    .setUsage(AudioAttributes.USAGE_MEDIA)
                    .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                    .build();
            soundPool = new SoundPool.Builder()
                    .setAudioAttributes(attr)
                    //パラメーターはリソースの数に合わせる
                    .setMaxStreams(2)
                    .build();
        }
        //音楽の読み込み
        mp3a = soundPool.load(this, R.raw.a, 1);
        mp3b = soundPool.load(this, R.raw.b, 1);
    }
}

sound pool

SoundPoolと音楽用のフィールドを宣言しておきます

SoundPoolクラスは現実世界に例えるとコンポ(音楽プレイヤー)に該当します。SoundPoolの初期化と音楽リソースの読み込みをonCreate()メソッドの中で行っていることに注目します。

SoundPoolの初期化はすべてコピペでOKですがリソースの数に応じてパラメーターを変える部分があるのでそこだけ注意です。あとここで条件分岐を行っているのはAndroidのバージョンによって行う処理が異なるためのようです。古いバージョンと新しいバージョンどちらにも対応できるコードのようです。

実際に音楽を再生させたい部分に音楽再生用のメソッドを呼び出します。soundPool.play()メソッドのパラメーターですが特殊なことをしない限りはこのままコピペでOKです。たとえばbuttonをクリックして音楽再生したいならば以下のようにします。

((Button) findViewById(R.id.button1)).setOnClickListener(new ViewOnClickListener(){
@Override
public void onClick(){
play_mp3a();//音楽再生用のメソッドを呼び出す
}
})

音楽ファイルのFileType

コードを実行して音がでなかったときに音楽リソースファイルのファイルタイプを疑うことがあります。しかしこのファイルタイプは音楽再生に影響はありません。

スポンサーリンク

まとめ

とりとめのない記事になってしまいました。ごちゃごちゃしていますが基本的にはコピペで使用できます。リソースファイルから音楽を読みこむところと、SoundPoolのパラメーターでリソースの数を指定する部分に注意する程度です。

音楽再生は若干敷居が高いような気もしますので他のサイトも参考にするとよいかと思います。URLを貼り付けておきます

コメント

タイトルとURLをコピーしました