2014-02-12 66 views
1

我目前有一个SoundPool加载并在屏幕抖动时播放单个声音,如何在每次屏幕抖动时播放不同的声音?从原始文件夹播放随机声音

编辑---

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




} 
+1

你将不得不加载所有你想从成列表中进行选择的声音,然后选择一个随机指数。如果您需要更多帮助,您将需要发布更多代码。 – cbrulak

+0

我已经更新了我所拥有的内容,因为您可以在onShake中看到它只能播放soundOne,我将如何适应播放其中一种声音的随机播放? – SpunkTrumpet

回答

3

只需使用整数,而不是将它们存储所有单独的列表:

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); 
      } 
     } 
     }); 
} 
+0

这是辉煌的,完美的作品。谢谢。 – SpunkTrumpet

1

首先,你可以创建你所有的原材料的引用数组:

private int[] rawRef = {R.raw.1,R.raw.2,R.raw.3,R.raw.4,R.raw.5}; 

然后,你需要一种方法来播放音频:

 
private Random random = new Random(); 

private void play() { 
    MediaPlayer mp; 
    try { 
     mp = MediaPlayer.create(this, rawRef[random.nextInt(rawRef.length)]); 
     mp.start(); 
    } catch (Exception e) { 
     Log.e("ERROR", "Media Player", e); 
     mp = null; 
    } 
} 

For SoundPool

 
    private List pool = new ArrayList(); 
    private SoundPool sp; 

    private void loadSounds(){ 
     sp = new SoundPool(5, AudioManager.STREAM_MUSIC, 0); 
     pool.add(sp.load(context, R.raw.1, 1)); 
     pool.add(sp.load(context, R.raw.2, 1)); 
     pool.add(sp.load(context, R.raw.3, 1)); 
     pool.add(sp.load(context, R.raw.4, 1)); 
    } 

    private void play(){ 
     sp.play(pool.get(random.nextInt(pool.size()), 1, 1, 0, 0, 1); 
    } 
+0

我正在使用SoundPool,因为它们是非常短的剪辑,无论如何要适应这个使用SoundPool? – SpunkTrumpet