2012-12-14 16 views
10

मैं बटन को छूने के बाद ध्वनि बजाना चाहता हूं। मीडियाप्लेयर ठीक काम करता है, लेकिन मैंने कहीं पढ़ा है कि यह पुस्तकालय लंबे समय तक है। वाव (संगीत की तरह)।लघु .wav फ़ाइलों को बजाना - एंड्रॉइड

क्या छोटा .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. मुझे हर उपयोग (जैसे मीडियाप्लेयर) के बाद रिलायंस करना पड़ सकता है या शायद जब मैं ऐप // गतिविधि से बाहर निकलता हूं? 2. नमूना रोकने के लिए कोई रास्ता है? – CookieMonssster

+0

आपको केवल तब ही रिलीज़ करना चाहिए जब आप पूरे ऐप सत्र के लिए कोई आवाज बजाएंगे (इसलिए ऑनस्ट्रोय() एक अच्छी पसंद होगी)। आप एक विराम() विधि जोड़ सकते हैं जो SoundPools की [रोकें) विधि विधि का उपयोग करता है (http://developer.android.com/reference/android/media/SoundPool.html#pause (int))। –

+0

यह बहुत आसान था। एफडब्ल्यूआईडब्लू, ग्रहण ने बेहतर प्रदर्शन के लिए 'mSounds' के लिए 'स्पैसइन्टएरे()' का सुझाव दिया, इसलिए मैंने यही किया। –

संबंधित मुद्दे