2010-10-03 9 views
6

मुझे एंड्रॉइड मार्केट पर एक ऐप मिला है और ध्वनि प्रभाव के लिए ध्वनिपूल कक्षाओं का उपयोग कर रहा है। मैंने देखा है कि एंड्रॉइड एपीआई के सभी हिस्सों में, ऐसा लगता है कि मुझे सबसे अधिक समस्याएं हुई हैं। उदाहरण के लिए:एंड्रॉइड साउंडपूल समस्या

  • एचटीसी डिजायर में डब्ल्यूएवी फाइलें चलाने में समस्याएं हैं (इससे यह यादृच्छिक रूप से लॉक हो जाता है)। फ़ाइलों .ogg का उपयोग करते हुए इस

  • Droid पर ठीक करता है, अगर आप init सेटअप कॉल में चैनलों की संख्या से अधिक है:

mSoundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 0);

हैंडसेट बंद होगा। यदि आप डीबगिंग में कठिनाई की कल्पना कर सकते हैं! एक हैंडसेट पर मेरा स्वामित्व नहीं है। इसे अपने ग्राहकों से बहुत निःस्वार्थ सहायता की आवश्यकता थी। '4' से '16' को बदलना समस्या को समाप्त कर दिया। मुझे कोई संदेह नहीं है कि अगर 16 ध्वनियां एक साथ खेली जाती हैं तो यह अभी भी दुर्घटनाग्रस्त हो जाएगी। शुक्र है कि इसकी संभावना कम है।

  • विभिन्न उपकरणों पर यादृच्छिक क्रैश भी प्राप्त करना। मुझे अपने ग्राहकों में से एक कालॉग मिला है जिसमें ध्वनि सुनने से संबंधित 'हीप ओवरफ्लो' त्रुटियां हैं।

अब मैंने मीडियाप्लेयर का उपयोग करने के लिए अपने ध्वनि प्रबंधक को बदल दिया है। ऐसा लगता है कि अब के लिए ठीक काम कर रहा है। मैं बस सोच रहा हूं कि क्या कोई अन्य डेवलपर्स इन समस्याओं का सामना कर रहा है?

+0

कृपया मुझे यहाँ मदद, धन्यवाद ... [एंड्रॉयड soundpool त्रुटि] [1] [1]: http://stackoverflow.com/questions/29199164/android-soundpool- त्रुटि – 5h177y

उत्तर

4

यह लगता है ऑडियोफ्लिंगर को किसी भी समय 1 एमबी लायक ऑडियो चल रहा है। ढेर त्रुटियां तब होती हैं जब यह सीमा पार हो जाती है।

AudioFlinger::Client::Client(const sp<AudioFlinger>& audioFlinger, pid_t pid) 
    : RefBase(), 
     mAudioFlinger(audioFlinger), 
     mMemoryDealer(new MemoryDealer(1024*1024)), 
     mPid(pid) 
{ 
    // 1 MB of address space is good for 32 tracks, 8 buffers each, 4 KB/buffer 
} 

और यह:: यह अनुमान कुछ कोड मैं AudioFlinger स्रोत कोड में पाया पर आधारित है

size_t size = sizeof(audio_track_cblk_t); 
size_t bufferSize = frameCount*channelCount*sizeof(int16_t); 
if (sharedBuffer == 0) { 
    size += bufferSize; 
} 
mCblkMemory = client->heap()->allocate(size); 
if (mCblkMemory != 0) { 
    ... 
} else { 
    LOGE("not enough memory for AudioTrack size=%u", size); 
    client->heap()->dump("AudioTrack"); 
} 

कोई और बेहतर जानकारी प्राप्त हुई?

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