Play sound using soundpool example

AndroidMediaSoundpool

Android Problem Overview


I would like to learn how to use soundpool method. I would like you to show me a very simple example that run 2 sounds.

Android Solutions


Solution 1 - Android

Create a folder named as raw under your_app/res/. Then paste your ringtone in this folder, for example your_app/res/raw/ringtone.mp3. Now use the following code:

SoundPool soundPool = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
int soundId = soundPool.load(context, R.raw.ringtone, 1);
// soundId for reuse later on

soundPool.play(soundId, 1, 1, 0, 0, 1);

Be sure to release the SoundPool resources after use:

soundPool.release();
soundPool = null;

Solution 2 - Android

Yes. i went through this too. but for safety i have saved a piece of code i found online. Though havent used it, i know it will come in handy soon...

  1. You need to create AudioAttributes object:

    AudioAttributes attributes = new AudioAttributes.Builder() .setUsage(AudioAttributes.USAGE_GAME) .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) .build();

  2. Create SoundPool object:

    SoundPool sounds = new SoundPool.Builder() .setAudioAttributes(attributes) .build();

  3. How to use SoundPool on all API levels example :

    SoundPool sound;

    protected void createSoundPool() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { createNewSoundPool(); } else { createOldSoundPool(); } }

    @TargetApi(Build.VERSION_CODES.LOLLIPOP) protected void createNewSoundPool(){ AudioAttributes attributes = new AudioAttributes.Builder() .setUsage(AudioAttributes.USAGE_GAME) .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) .build(); sounds = new SoundPool.Builder() .setAudioAttributes(attributes) .build(); }

    @SuppressWarnings("deprecation") protected void createOldSoundPool(){ sounds = new SoundPool(5,AudioManager.STREAM_MUSIC,0); }

Solution 3 - Android

Here is a small, working example of soundPool, it is taken from here and slightly modified to match post 21 API's.

One thing to notice is maxStreams, which indicates how many streams are allowed to run in parallel, if it is one(default), it can be removed from the builder.

import android.app.Activity;
import android.content.Context;
import android.media.AudioManager;
import android.media.SoundPool;

public class SoundManager extends Activity
{
  static SoundPool soundPool;
  static int[] sm;
  
  public static void InitSound() {
    
    int maxStreams = 1;
    Context mContext = getApplicationContext();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        soundPool = new SoundPool.Builder()
                .setMaxStreams(maxStreams)
                .build();
    } else {
        soundPool = new SoundPool(maxStreams, AudioManager.STREAM_MUSIC, 0);
    }
    
    sm = new int[3];
    // fill your sounds
    sm[0] = soundPool.load(mContext, R.raw.sound_1, 1);
    sm[1] = soundPool.load(mContext, R.raw.sound_2, 1);
    sm[2] = soundPool.load(mContext, R.raw.sound_3, 1);
    
  }
 
  static void playSound(int sound) {
	  
      soundPool.play(sm[sound], 1, 1, 1, 0, 1f);
  }
 
   public final void cleanUpIfEnd() {
    sm = null;
    soundPool.release();
    soundPool = null;
  } 
}

Solution 4 - Android

I have written a SoundPoolManager which can be used to load sound files and play as and when required. You can see it here.

Thanks.

Solution 5 - Android

private final int NUMBER_OF_SIMULTANEOUS_SOUNDS = 5;
        private final float LEFT_VOLUME_VALUE = 1.0f;
        private final float RIGHT_VOLUME_VALUE = 1.0f;
        private final int MUSIC_LOOP = 0;
        private final int SOUND_PLAY_PRIORITY = 0;
        private final float PLAY_RATE= 1.0f;

        
        SoundPool soundPool;

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            soundPool= new SoundPool.Builder()
                    .setMaxStreams(NUMBER_OF_SIMULTANEOUS_SOUNDS)
                    .build();
        } else {
            // Deprecated way of creating a SoundPool before Android API 21.
            soundPool= new SoundPool(NUMBER_OF_SIMULTANEOUS_SOUNDS, AudioManager.STREAM_MUSIC, 0);
        }
        int soundId = soundPool.load(getApplicationContext(), R.raw.sound_1, 1);

        soundPool.play(soundId , LEFT_VOLUME_VALUE , RIGHT_VOLUME_VALUE, SOUND_PLAY_PRIORITY , MUSIC_LOOP ,PLAY_RATE);

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSally GomezView Question on Stackoverflow
Solution 1 - AndroidTheFlashView Answer on Stackoverflow
Solution 2 - Androiduser3833732View Answer on Stackoverflow
Solution 3 - AndroidIdanView Answer on Stackoverflow
Solution 4 - AndroidAshwani KView Answer on Stackoverflow
Solution 5 - AndroidAjay PrajapatiView Answer on Stackoverflow