2014-02-12 111 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