2012-12-14 18 views
10

Düğmeye dokunduktan sonra ses çalmak istiyorum. MediaPlayer iyi çalışıyor, ancak bu kütüphanenin uzun bir süre (.wav) (müzik gibi) için bir yerde olduğunu okudum.Çalınan kısa .wav dosyaları - Android

Kısaca .wav (2-3 sn.) Oynamak için daha iyi bir yol var mı?

+4

Evet, ['SoundPool'] (http://developer.android.com/reference/android/media/SoundPool.html) gitmenin yoludur. – kcoppock

cevap

24

SoundPool bunun için doğru sınıftır. Aşağıdaki kod, nasıl kullanılacağı ile ilgili bir örnektir. Ayrıca, sesleri yönetmek için birkaç uygulamasında kullandığım koddur. İstediğiniz gibi duyabilirsiniz (veya bellek izinleri olarak).

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

Sen arayarak bu kullanırsınız:

SoundPoolPlayer sound = new SoundPoolPlayer(this); 

sizin etkinlik'ın onCreate içinde() (ya da her zaman buna sonra). Eğer seslerle bitirdiğinizde

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

Son olarak, çağrı: Bundan sonra, bir ses basit çağrıyı oynamak için

sound.release(); 

kaynaklarını serbest bırakmak için.

+0

Çok iyi çalışıyor, ama iki sorum var. 1. Her kullanımdan sonra (MediaPlayer gibi) ya da belki de uygulamadan/etkinliğimden ayrıldığımda relase zorundayım. 2. örnek durdurmak için herhangi bir yolu var mı? – CookieMonssster

+0

Sadece uygulama oturumu için herhangi bir ses çalınırken bırakmanız gerekir (böylece onDestroy() iyi bir seçim olacaktır). SoundPools'un [pause() yöntemini] kullanan bir pause() yöntemi ekleyebilirsiniz (http://developer.android.com/reference/android/media/SoundPool.html#pause (int)). –

+0

Bu çok kolaydı. FWIW, Eclipse daha iyi performans için 'mSounds' için SparseIntArray()' i önerdi, ben de öyle yaptım. –