2010-12-28 18 views
6

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

एप्लिकेशन यह Soundpool शुरू की इस प्रकार चलाया जाता है,

public static final int SOUND_EXPLOSION = 1; 
public static final int SOUND_CLEAR = 2; 
public static final int SOUND_CLICK = 3; 
public static final int SOUND_MAGIC = 4; 
public static final int SOUND_ROCKET = 5; 
public static final int SOUND_MELT = 6; 

private SoundPool soundPool; 
private AudioManager mgr; 
private HashMap<Integer, Integer> soundPoolMap; 

private void initSounds() 
{ 
    soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 100); 

    soundPoolMap = new HashMap<Integer, Integer>(); 

    soundPoolMap.put(SOUND_EXPLOSION, soundPool.load(getContext(), R.raw.explosion3, 1)); 
    soundPoolMap.put(SOUND_CLEAR, soundPool.load(getContext(), R.raw.pop, 1)); 
    soundPoolMap.put(SOUND_CLICK, soundPool.load(getContext(), R.raw.click, 1)); 
    soundPoolMap.put(SOUND_MAGIC, soundPool.load(getContext(), R.raw.swoosh, 1)); 
    soundPoolMap.put(SOUND_ROCKET, soundPool.load(getContext(), R.raw.rocket, 1)); 
    soundPoolMap.put(SOUND_MELT, soundPool.load(getContext(), R.raw.melt3, 1)); 
    mgr = (AudioManager)getContext().getSystemService(Context.AUDIO_SERVICE); 
} 

ध्वनि fx उसके बाद निम्न उप फोन करके खेले जाते हैं, (PlaySound एक वैश्विक उपयोगकर्ता विकल्प द्वारा चालू किए जाने है)

public void playSound(int sound) 
{ 


if (PlaySound == true) 
{ 
    Log.w("playSound","Playing Sound" + sound);   
    float streamVolumeCurrent = mgr.getStreamVolume(AudioManager.STREAM_MUSIC); 
    float streamVolumeMax = mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC);  
    float volume = streamVolumeCurrent/streamVolumeMax; 
    soundPool.play(soundPoolMap.get(sound), volume, volume, 1, 0, 1f); 
} 

} 

जैसा कि आप देख सकते हैं कि एक लॉग कॉल है जिसे मैं देखता था कि उप बार कितनी बार बुलाया गया था, हालांकि यह पता चला कि जब बग होता है तो दिनचर्या को केवल एक बार बुलाया जाता है जब ध्वनि डिवाइस से दो बार सुनाई जाती है।

मेरे पास एक आखिरी सब भी है जिसे सतह दृश्य को साफ करने के लिए नष्ट कर दिया जाता है।

public void ReleaseSounds() 
{ 
    if (soundPool != null) 
    { 

    soundPool.release(); 
    soundPool = null; 

    } 
} 

क्या किसी और को यह समस्या है, यदि ऐसा है तो आपने इसे कैसे हल किया? इस पर किसी भी मदद बहुत सराहना किया जाएगा, अग्रिम

+0

ठीक दिनों के ठीक है लेकिन यह मुद्दा दूर चला गया प्रतीत होता है। कच्चे फ़ोल्डर में ध्वनि फाइलें Wav और एमपी 3 का मिश्रण थीं (मूल प्रारूप), मैंने बाद में उन्हें ओजीजी प्रारूप में परिवर्तित कर दिया है और प्रारंभिक परीक्षण से यह अधिक स्थिर लगता है। – Steven

उत्तर

8

कच्चे फ़ोल्डर में OGG करने के लिए ध्वनि फ़ाइलें परिवर्तित में

बहुत धन्यवाद इस बग का समाधान है लगता है - मैं इसे की पुनरावृत्ति के बाद से नहीं देखा है।

+1

आप भाग्यशाली हैं - कुछ फोन पर एमपी 3 + साउंडपूल दुर्घटनाएं, दूसरों पर काम करती हैं। मैंने ओजीजी को भी स्विच किया, हालांकि वे भी संपीड़ित नहीं होते हैं। – richq

+0

यह मेरे लिए भी इस अजीब बग को हल करने लगता है ... (wav-> ogg) धन्यवाद! – sstn

+0

क्या एंड्रॉइड फोन में अंडे के लिए हार्डवेयर डिकोडर हैं? – slf

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