Full source code how to use the SoundPool class to play short, repetitive sound clips. Since API level 21 (Android Lollipop), the old SoundPool constructor is deprecated, so we will also learn, how to use the new SoundPool.Builder class. We will define a streamType for the old constructor and a usage and contentType for the new Builder. We will also set the number of maxStreams so we can play multiple sounds simultaneously and we will learn, how to pause and resume sound files by saving their streamID in a variable
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
tools:context="tech.codingpoint.soundpoolexample.MainActivity">
<Button
android:id="@+id/button_sound1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="playSound"
android:text="sound 1" />
<Button
android:id="@+id/button_sound2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="playSound"
android:text="sound 2" />
<Button
android:id="@+id/button_sound3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="playSound"
android:text="sound 3" />
<Button
android:id="@+id/button_sound4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="playSound"
android:text="sound 4" />
<Button
android:id="@+id/button_sound5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="playSound"
android:text="sound 5" />
<Button
android:id="@+id/button_sound6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="playSound"
android:text="sound 6" />
</LinearLayout>
MainActivity.java
package tech.codingpoint.soundpoolexample;
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;
public class MainActivity extends AppCompatActivity {
private SoundPool soundPool;
private int sound1, sound2, sound3, sound4, sound5, sound6;
private int sound3StreamId;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
AudioAttributes audioAttributes = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.build();
soundPool = new SoundPool.Builder()
.setMaxStreams(6)
.setAudioAttributes(audioAttributes)
.build();
} else {
soundPool = new SoundPool(6, AudioManager.STREAM_MUSIC, 0);
}
sound1 = soundPool.load(this, R.raw.sound1, 1);
sound2 = soundPool.load(this, R.raw.sound2, 1);
sound3 = soundPool.load(this, R.raw.sound3, 1);
sound4 = soundPool.load(this, R.raw.sound4, 1);
sound5 = soundPool.load(this, R.raw.sound5, 1);
sound6 = soundPool.load(this, R.raw.sound6, 1);
}
public void playSound(View v) {
switch (v.getId()) {
case R.id.button_sound1:
soundPool.play(sound1, 1, 1, 0, 0, 1);
//soundPool.pause(sound3StreamId);
soundPool.autoPause();
break;
case R.id.button_sound2:
soundPool.play(sound2, 1, 1, 0, 0, 1);
break;
case R.id.button_sound3:
sound3StreamId = soundPool.play(sound3, 1, 1, 0, 0, 1);
break;
case R.id.button_sound4:
soundPool.play(sound4, 1, 1, 0, 0, 1);
break;
case R.id.button_sound5:
soundPool.play(sound5, 1, 1, 0, 0, 1);
break;
case R.id.button_sound6:
soundPool.play(sound6, 1, 1, 0, 0, 1);
break;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
soundPool.release();
soundPool = null;
}
}