Search code examples
javaandroideclipserandomsoundpool

Playing random sound from raw folder


I've currently got a SoundPool that loads and plays a single sound when the screen is shaken, how would I go about it playing a different sound each time the screen is shaken?

EDIT ---

private SensorManager mSensorManager;
private ShakeEventListener mSensorListener;
SoundPool sp;
int soundOne;
int soundTwo;
int soundThree;

protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.test);
    //Shake sound
    sp =  new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
    soundOne = sp.load(this, R.raw.one, 1);
    soundTwo = sp.load(this, R.raw.two, 1);
    soundThree = sp.load(this, R.raw.three, 1);     

    //Shake
    mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    mSensorListener = new ShakeEventListener();   
    mSensorListener.setOnShakeListener(new ShakeEventListener.OnShakeListener() {

        public void onShake() {
            if (acceptCheck == 1)
            {
                sp.play(soundOne, 1, 1, 0, 0, 1);
            }
        }
      });




}

Solution

  • Just use a list of ints instead of storing them all individually:

    private SensorManager mSensorManager;
    private ShakeEventListener mSensorListener;
    SoundPool sp;
    List<Integer> mSounds = new ArrayList<Integer>();
    private Random mRandom = new Random();
    
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.test);
        //Shake sound
        sp =  new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
        mSounds.add(sp.load(this, R.raw.one, 1));
        mSounds.add(sp.load(this, R.raw.two, 1));
        mSounds.add(sp.load(this, R.raw.three, 1);     
    
        //Shake
        mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        mSensorListener = new ShakeEventListener();   
        mSensorListener.setOnShakeListener(new ShakeEventListener.OnShakeListener() {
    
            public void onShake() {
                if (acceptCheck == 1)
                {
                    sp.play(mSounds.get(mRandom.nextInt(mSounds.size())), 1, 1, 0, 0, 1);
                }
            }
          });
    }