Android アプリ開発 「MATRIX」

Androidアプリの開発に役立つサンプル集



Android開発レシピ ~ SoundPool ~ 「ボタンクリックで効果音を出す」

ボタンクリックで効果音を出します。この方法はロリポップ(OSバージョン5)以降で使えます。

import android.media.AudioAttributes;
import android.media.SoundPool;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

int mySoundID; //サウンド管理ID
int oto; //サウンド
SoundPool soundPool; //サウンドプール

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

//Buttonのインスタンス(button)にボタンを登録
Button button = (Button)findViewById(R.id.button);

//ボタンにクリックイベントを設定
button.setOnClickListener(this);

//サウンドプールをクリア
soundPool = null;

//音を出すための手続き1 ※音の出し方を設定している
AudioAttributes audioAttributes = new AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_ALARM).setContentType(AudioAttributes.CONTENT_TYPE_SPEECH).build();

//音を出すための手続き2 ※1の設定を利用してsoundPoolを設定
soundPool = new SoundPool.Builder().setAudioAttributes(audioAttributes).setMaxStreams(1).build();

//鳴らしたい音を設定(rawフォルダにあるsound1という音)
oto = getResources().getIdentifier("sound1", "raw", getPackageName());

//あらかじめ音をロードする必要がある ※直前にロードしても間に合わないので早めに
mySoundID = soundPool.load(getBaseContext(), oto, 1);
}

//ボタンがクリックされると呼び出される
@Override
public void onClick(View v) {
//音を鳴らす
soundPool.play(mySoundID, 1f, 1f, 0, 0, 1);
}
}

 

ロリポップより前の端末に対応する場合は音を読み込むコードをバージョンで振り分けると良いです。

import android.media.AudioAttributes;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

int mySoundID; //サウンド管理ID
int oto; //サウンド
SoundPool soundPool; //サウンドプール

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

//Buttonのインスタンス(button)にボタンを登録
Button button = (Button)findViewById(R.id.button);

//ボタンにクリックイベントを設定
button.setOnClickListener(this);

//サウンドプールを一旦クリア
soundPool = null;

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {

//ロリポップより前のバージョンに対応するコード
soundPool = new SoundPool(1, AudioManager.STREAM_ALARM, 0);
mySoundID = soundPool.load(getBaseContext(), oto, 1);

} else {

//音を出すための手続き1 ※音の出し方を設定している
AudioAttributes audioAttributes = new AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_ALARM).setContentType(AudioAttributes.CONTENT_TYPE_SPEECH).build();
//音を出すための手続き2 ※1の設定を利用してsoundPoolを設定
soundPool = new SoundPool.Builder().setAudioAttributes(audioAttributes).setMaxStreams(1).build();
//鳴らしたい音を設定(rawフォルダにあるsound1という音)
oto = getResources().getIdentifier("sound1", "raw", getPackageName());
//あらかじめ音をロードする必要がある ※直前にロードしても間に合わないので早めに
mySoundID = soundPool.load(getBaseContext(), oto, 1);
}
}

//ボタンがクリックされると呼び出される
@Override
public void onClick(View v) {
//音を鳴らす
soundPool.play(mySoundID, 1f, 1f, 0, 0, 1);
}
}

 

END