2012-03-11 12 views
36

मैं एक ऐसा एप्लिकेशन बना रहा हूं जिसमें स्क्रीन पर एकाधिक छवियां होंगी, ये छवियां बटन होंगी और जब टैप किया जाएगा तो एक छोटी आवाज बजाएगी। मैंने इसका शोध किया और केवल उस मौजूदा विधि को ढूंढ सकता हूं जिसे मैं ध्वनि चलाने के लिए उपयोग कर रहा हूं, जो बिल्कुल प्रतिक्रियाशील नहीं लगता है। मैं चाहता हूं कि ध्वनि जल्दी से खेलता है और कई तेज़ नल के प्रति उत्तरदायी है। मैं अनिश्चित था अगर यह एंड्रॉइड में भी संभव था।लघु ध्वनि एंड्रॉइड खेलने का सही तरीका?

कोड मैं अपने ध्वनि चलाने के लिए उपयोग कर रहा हूँ यह है:

Button sound1; 
MediaPlayer firstSound; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    firstSound = MediaPlayer.create(SoundActivity.this, R.raw.click); 


    sound1 = (Button) findViewById(R.id.Sound1); 


    beaver.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 

      firstSound.start(); 

      } 

    }); 



    } 

मेरे अंतराल मुद्दा भी शायद तरह से मैं मीडिया प्लेयर वस्तु का उपयोग कर रहा करने के लिए नीचे हो सकता है? मुझे लगता है कि यह मेरे फोन पर चिकना होना चाहिए, एंड्रॉइड में ध्वनि कैसे खेलें इस पर कोई सुझाव है।

धन्यवाद।

ध्वनि पूल की खोज के बाद से, मैं इस का उपयोग करने के लिए अपने कोड को संपादित किया है और यह पूरी तरह से काम करता है, नए कोड इस तरह दिखता है:

SoundPool soundPool; 
HashMap<Integer, Integer> soundPoolMap; 
int soundID = 1; 


Button sound1; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 


    soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 100); 
    soundPoolMap = new HashMap<Integer, Integer>(); 
    soundPoolMap.put(soundID, soundPool.load(this, R.raw.click, 1)); 

    sound1 = (Button) findViewById(R.id.bBeaver); 


    sound1.setOnClickListener(new View.OnClickListener() { 

       public void onClick(View v) { 

        AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); 
       float curVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC); 
       float maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); 
       float leftVolume = curVolume/maxVolume; 
       float rightVolume = curVolume/maxVolume; 
       int priority = 1; 
       int no_loop = 0; 
       float normal_playback_rate = 1f; 
       soundPool.play(soundID, leftVolume, rightVolume, priority, no_loop, normal_playback_rate); 

      } 

    }); 


    } 

धन्यवाद

+2

ऐसा लगता है कि आप अपने soundPoolMap का उपयोग नहीं कर रहे हैं? – Moberg

+1

आपके द्वारा कार्यान्वित तरीके से प्यार करता है, एक बार – desgraci

+0

पर अच्छी तरह से काम करता है बहुत बहुत धन्यवाद। यह बहुत अच्छा काम करता है ...! MediaPlayer मुद्दों के साथ कई घंटे बिताए जाने के बाद –

उत्तर

25

आप SoundPool उपयोग कर सकते हैं। यह ठीक है जो आप पूरी तरह से करना चाहते हैं।

आपको प्रत्येक छवि (या बटन) से संबंधित ध्वनि प्रभाव आईडी को स्टोर करने के लिए केवल एक तरीका चाहिए।

शायद संबंधित ध्वनि प्रभाव आईडी स्टोर करने के लिए बटन का विस्तार करें। और बटन स्पर्श होने पर आईडी से जुड़े ध्वनि प्रभाव को चलाने के लिए एक सामान्य ध्वनिपूल का उपयोग करें।

You can read more about SoundPool here

+1

आपकी सलाह और लिंक के लिए धन्यवाद। मैंने इसमें आगे देखा और एक ट्यूटोरियल मिला, इससे मेरी मदद मिली जो कुछ मैं चाहता था, वह निश्चित रूप से मीडिया प्लेयर से काफी बेहतर है! बहुत धन्यवाद! – deucalion0

+0

क्या आप ट्यूटोरियल के लिए एक लिंक पोस्ट करेंगे? – Moberg

+0

@Moberg यहां आपके पास एक http://stackoverflow.com/questions/17069955/play- ध्वनि-उपयोग-ध्वनिपूल-उदाहरण –

3

@ रिकोनेटर ध्वनिपूल के साथ सही रास्ते पर है। यह आपके द्वारा की जाने वाली कार्यक्षमता के लिए अधिक उपयुक्त है।

यदि आप मध्यस्थ के साथ जाने का निर्णय लेते हैं, फिर भी, UIA थ्रेड को लटकने से रोकने के लिए readyAsync() विधि को न भूलें। आप मीडिया here खेलने के बारे में और अधिक पढ़ सकते हैं।

+1

यूआई थ्रेड पर अवरुद्ध करना बेहतर हो सकता है क्योंकि ध्वनि के लिए ध्वनि का उपयोग किया जा रहा है। यूआई को लटका देना बुरा हो सकता है, लेकिन देर से फायरिंग लग रहा है थोड़ा कमजोर है। – Tonithy

2
MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.raw.sound); 

try { 
    if (mp.isPlaying()) { 
     mp.stop(); 
     mp.release(); 

     mp = MediaPlayer.create(getApplicationContext(), R.raw.sound); 
    } 

    mp.start(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
संबंधित मुद्दे