2012-12-14 78 views
10

我想在觸摸按鈕後播放聲音。 MediaPlayer工作正常,但是我在某處看到這個庫很長時間.wav(如音​​樂)。播放簡短的.wav文件 - Android

有沒有更好的方法來播放簡短的.wav(2-3秒)?

+4

是的,['SoundPool'](http://developer.android.com/reference/android/media/SoundPool.html)是要走的路。 – kcoppock

回答

24

SoundPool是正確的類。下面的代碼是如何使用它的一個例子。這也是我在我的幾個應用程序中用來管理聲音的代碼。你可以聽起來像你想的那樣(或作爲記憶許可)。

public class SoundPoolPlayer { 
    private SoundPool mShortPlayer= null; 
    private HashMap mSounds = new HashMap(); 

    public SoundPoolPlayer(Context pContext) 
    { 
     // setup Soundpool 
     this.mShortPlayer = new SoundPool(4, AudioManager.STREAM_MUSIC, 0); 


     mSounds.put(R.raw.<sound_1_name>, this.mShortPlayer.load(pContext, R.raw.<sound_1_name>, 1)); 
     mSounds.put(R.raw.<sound_2_name>, this.mShortPlayer.load(pContext, R.raw.<sound_2_name>, 1)); 
    } 

    public void playShortResource(int piResource) { 
     int iSoundId = (Integer) mSounds.get(piResource); 
     this.mShortPlayer.play(iSoundId, 0.99f, 0.99f, 0, 0, 1); 
    } 

    // Cleanup 
    public void release() { 
     // Cleanup 
     this.mShortPlayer.release(); 
     this.mShortPlayer = null; 
    } 
} 

你會通過調用使用:在活動的onCreate

SoundPoolPlayer sound = new SoundPoolPlayer(this); 

()(或之後的任何時間的話)。在這之後,播放聲音簡單的調用:

sound.playShortResource(R.raw.<sound_name>); 

最後,一旦你用聲音做了,呼籲:

sound.release(); 

以釋放資源。

+0

它工作得很好,但我有兩個問題。 1.每次使用後(例如MediaPlayer)或者當我從應用程序//活動中退出時,我必須重新啓動?有什麼辦法可以停止抽樣? – CookieMonssster

+0

您應該只在完成整個應用程序會話的任何聲音播放時釋放它(所以onDestroy()將是一個不錯的選擇)。您可以添加一個使用SoundPools的[pause()方法](http://developer.android.com/reference/android/media/SoundPool.html#pause(int))的pause()方法。 –

+0

這很容易。 FWIW,Eclipse爲'mSounds'建議'SparseIntArray()'以獲得更好的性能,所以這就是我所做的。 –