2012-06-25 10 views
17

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

यह विधि मुझे पहले ऑडियोफैक्स बनाने की अनुमति देगी और बाद में इस audioSessionId पर एक नया मीडियाप्लेयर या ऑडियोट्रैक संलग्न करेगी।

मैं वर्तमान में एंड्रॉइड 2.3.6 पर इस विधि का उपयोग करने में सक्षम हूं लेकिन एंड्रॉइड 4.x पर मैं त्रुटियों के साथ समस्याओं में भाग रहा हूं कि प्रारंभिक विफलता या अन्य आईसीएस/जेलीबीन डिवाइस पर यह त्रुटि चुप है लेकिन एक फ़ंक्शन कॉल करना अपवाद की ओर जाता है।

Samsung Galaxy S II [एंड्रॉयड 4.0.3]:

E/AudioEffect(13250): set(): AudioFlinger could not create effect, status: -38 
E/AudioEffects-JNI(13250): AudioEffect initCheck failed -5 
E/AudioEffect-JAVA(13250): Error code -5 when initializing AudioEffect. 
W/WrapEqualizer(13250): createEqualizer() -> Effect library not loaded 

Motorola Xoom [एंड्रॉयड 4.1.2] [मुद्दा नहीं रह गया है एंड्रॉयड 4.0.4 के साथ होता है] विफल यह कन्स्ट्रक्टर के बाद चुपचाप लगता है। फिर GetProperties() पर कॉल करना यह दुर्घटनाग्रस्त हो जाता है।

java.lang.RuntimeException: AudioEffect: set/get parameter error 
    at android.media.audiofx.AudioEffect.checkStatus(AudioEffect.java:1247) 
    at android.media.audiofx.Equalizer.getProperties(Equalizer.java:532) 

नेक्सस 4 [एंड्रॉयड 4.2.1]
का उपयोग audioSessionId = 0 सब कुछ ठीक है, लेकिन किसी अन्य नंबर डिवाइस का उपयोग हर बार निम्नलिखित चुप त्रुटि रिपोर्ट करेंगे काम करता है मैं पूर्व निर्धारित बदलने की कोशिश, बैंड स्तर , चालू करने के लिए बास बूस्ट या वर्चुअलाइज़र चालू करने के लिए। एफएक्स के आधार पर रिपोर्ट की गई प्रभाव आईडी अलग है जो मैं संशोधित करने की कोशिश कर रहा हूं।

W/AudioPolicyManagerBase(165): unregisterEffect() unknown effect ID 1381 

अद्यतन 08/11/12:
मैं उपयोग करने के लिए audioSessionId 0. के रूप में मैं जानता हूँ कि यह पदावनत है कर सकती हूं, लेकिन यह अनुमति का उपयोग कर काम करता है। <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> क्या मुझे ऑडियो सत्र आईडी 0 के साथ ऑडियोएफएक्स का उपयोग करना चाहिए?

+1

यदि आप कम से कम वोट करते हैं तो टिप्पणी करने का समय है कि आपने वोट क्यों दिया! – Jona

+0

कोई भी बस हर बाउंटी प्रश्न और उसके उत्तरों को कम करने के लिए चला गया ... मुझे उम्मीद है कि वे प्रतिबंधित हो जाएंगे। – Eric

+0

हैलो जोना, क्या आपको इसका कोई समाधान मिला है। मैं ऐप में ऑडियो प्रभाव को भी कार्यान्वित करना चाहता हूं लेकिन ऊपर की त्रुटि मिली है। –

उत्तर

5

आप दिखना चाहिए पर: this

जाहिर है यह एक अनसुलझा मुद्दा आईसीएस में आया है, और शायद या तो जेबी में हल नहीं किया गया था।

+0

लिंक के लिए धन्यवाद लेकिन मैंने वास्तव में उस बग को पोस्ट किया: पी – Jona

+0

@Android जोकर: मैंने लिंक देखा है। मुझे पता है कि मुद्दा अभी भी हल नहीं हुआ है, लेकिन अगर मैं ऑडियो, जैसे बास, परेशानी और तुल्यकारक को लागू करना चाहता हूं तो क्या होगा? कृपया कोई भी डेमो प्रदान करें जो पूरे काम करता है। –

3

क्या मुझे ऑडियो सत्र आईडी 0 के साथ ऑडियोएफएक्स का उपयोग करना चाहिए?

यह शायद कुछ मामलों में काम करेगा, लेकिन भविष्य में एंड्रॉइड संस्करणों पर ऐसा करने के लिए इसे जारी रखने के लिए इस पर भरोसा न करें। आप जेलीबीन पर अपने ऐप और अन्य ऐप्स के बीच पहले से ही अंतःक्रियाशीलता समझौता करेंगे।बस क्या AudioFlinger does when an effect is enabled पर एक नज़र डालें:

// suspend all effects in AUDIO_SESSION_OUTPUT_MIX when enabling any effect on 
// another session. This gives the priority to well behaved effect control panels 
// and applications not using global effects. 
// Enabling post processing in AUDIO_SESSION_OUTPUT_STAGE session does not affect 
// global effects 
if ((sessionId != AUDIO_SESSION_OUTPUT_MIX) && (sessionId != AUDIO_SESSION_OUTPUT_STAGE)) { 
    setEffectSuspended_l(NULL, enabled, AUDIO_SESSION_OUTPUT_MIX); 
} 
+0

मैंने SO पर आपका उत्तर दूसरी बार देखा है। क्या आप इस मामले को हल करने के लिए कुछ और विवरण और जावा कोड के साथ मदद कर सकते हैं? –

+0

मैंने ओपी के साथ किसी भी डिवाइस के साथ काम नहीं किया है, इसलिए मैं वास्तव में किसी भी समाधान के साथ मदद नहीं कर सकता। मैंने ऑडियो सत्र 0 का उपयोग करने के जोखिम को संबोधित करने के लिए केवल अपना जवाब जोड़ा, क्योंकि यह प्रश्न का एक हिस्सा था। – Michael

0

मैं इस मुद्दे जानते हैं कि किसी को

कोशिश करने के लिए इस

Equalizer eq=null; 
. 
. 
. 
. 
. 
//in any function before initialization do this 
if(eq!=null) 
     eq.release(); 
eq=new Equalizer(0, audiosessionid); 

यह एक बार

0

अन्य कोशिश सत्र 0 से करना चाहते हैं जो "बहिष्कृत वैश्विक सत्र" है, ऑडियोफ्लिंगर कोड की मेरी समझ से पता चलता है कि सत्र केवल उन कक्षाओं के लिए बनाए जाते हैं जो वास्तव में ऑडियो IO करते हैं, वह है, ऑडियो रिकॉर्ड, ऑडियोट्रैक, मीडियाप्लेयर इत्यादि। आपको इन कक्षाओं को बनाना चाहिए, और फिर अपना सत्र आईडी प्राप्त करना चाहिए, और फिर प्रभाव संलग्न करना चाहिए।

सत्र आईडी के लिए आप जो भी अन्य मूल्य प्रदान करते हैं वह एक ऑडियो सत्र के अनुरूप होगा जो अस्तित्व में नहीं है, और इसलिए असफल हो जाएगा।

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

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