Creating an Android sound pool and playing sounds by sound id


Following program shows you how to create your own sound pool and play sounds by passing id.

package com.test;

import android.content.Context;
import android.media.AudioAttributes;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Build;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Random;

public class SoundUtils {
    static SoundPool soundPool;
    static HashMap<Integer, Integer> soundPoolMap;
    static boolean muted = false;

    public static void loadSounds(Context context){
        try {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                AudioAttributes audioAttrib = new AudioAttributes.Builder()
                        .setUsage(AudioAttributes.USAGE_GAME)
                        .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
                        .build();
                soundPool = new SoundPool.Builder().setAudioAttributes(audioAttrib).setMaxStreams(6).build();
            }
            else {
                soundPool = new SoundPool(6, AudioManager.STREAM_MUSIC, 0);
            }
            soundPoolMap = new HashMap<Integer, Integer>();
            soundPoolMap.put(1, soundPool.load(context, R.raw.sound_input, 1));
            soundPoolMap.put(2, soundPool.load(context, R.raw.sound_erase, 1));
            soundPoolMap.put(3, soundPool.load(context, R.raw.sound_correct, 1));
            soundPoolMap.put(4, soundPool.load(context, R.raw.sound_wrong, 1));
        }catch (Exception e){
            // Ignore
        }
    }

    public static void playSound(int i){
        try {
            if(!muted && soundPoolMap.containsKey(i)){
                soundPool.play(soundPoolMap.get(i), 1, 1, 1, 0, 1f);
            }
        }catch (Exception e){
            // Ignore
        }
    }
}