How to make SoundPool in Android

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;
    }
}

Leave a Comment