2012-06-12 5 views
5

पर कॉन्फ़िगर करने के लिए मैं एंड्रॉयड पर RecorderObject की SLDeviceVolumeItf इंटरफ़ेस पाने की कोशिश की, लेकिन मैं त्रुटि मिली: SL_RESULT_FEATURE_UNSUPPORTED.RecorderObject इंटरफ़ेस को लागू नहीं करता है वॉल्यूम सेट या Android

मुझे लगता है कि OpenSL के एंड्रॉयड कार्यान्वयन पढ़ ES AudioRecorder के लिए वॉल्यूम सेटिंग का समर्थन नहीं करता है। क्या यह सच है?

यदि हां कोई कामकाज है? मेरे पास एक वीओआईपी एप्लीकेशन है जो बहुत ही उच्च लाभ के कारण गैलेक्सी नेक्सस पर अच्छा नहीं है।

मैं भी SL_IID_ANDROIDCONFIGURATION नई VOICE_COMMUNINCATION ऑडियो स्रोत के लिए streamType स्थापित करने के लिए प्राप्त करने के लिए कोशिश की, लेकिन फिर मैं त्रुटि 12 (समर्थित नहीं) मिलता है।

// create audio recorder 
const SLInterfaceID id[2] = { SL_IID_ANDROIDSIMPLEBUFFERQUEUE, SL_IID_ANDROIDCONFIGURATION }; 
const SLboolean req[2] = { SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE }; 

result = (*engine)->CreateAudioRecorder(engine, &recorderObject, &audioSrc, &audioSnk, 2, id, req); 
if (SL_RESULT_SUCCESS != result) { 
    return false; 
} 

SLAndroidConfigurationItf recorderConfig; 
result = (*recorderObject)->GetInterface(recorderObject, SL_IID_ANDROIDCONFIGURATION, &recorderConfig); 
if(result != SL_RESULT_SUCCESS) { 
    error("failed to get SL_IID_ANDROIDCONFIGURATION interface. e == %d", result); 
} 

recorderObject बनाई गई है, लेकिन मैं SL_IID_ANDROIDCONFIGURATION इंटरफेस नहीं मिल सकता है। मैंने गैलेक्सी नेक्सस (आईसीएस), एचटीसी भावना (आईसीएस) और मोटोरोला ब्लर (जिंजरब्रेड) पर कोशिश की। मैं एनडीके संस्करण 6 का उपयोग कर रहा हूं।

उत्तर

1

अब मैं इंटरफ़ेस प्राप्त कर सकता हूं। मुझे एनडीके 8 और लक्ष्य -14 का उपयोग करना पड़ा। जब मैंने लक्ष्य के रूप में 10 का उपयोग करने की कोशिश की, तो मुझे मूल कोड संकलित करने में त्रुटि हुई (dirent.h नहीं मिला था)। मुझे लक्ष्य-प्लेटफ़ॉर्म -14 का उपयोग करना पड़ा।

+0

अजीब लगता है। मैं लक्ष्य = एंड्रॉइड 9 का उपयोग करता हूं और वही काम करता हूं जो आप करते हैं, लेकिन SLANDroidConfigurationItf इंटरफ़ेस सफलतापूर्वक पुनर्प्राप्त किया जाता है। हो सकता है कि यह आपके द्वारा रिकॉर्डर ऑब्जेक्ट बनाने के लिए उपयोग किए गए पैराम्स के कारण हो? –

0

मैं एक समान समस्या में भाग गया। मेरे परिणाम लागू नहीं किए गए त्रुटि कोड को वापस कर रहे थे। हालांकि, मेरी समस्या यह थी कि मैं SL_IID_ANDROIDCONFIGURATION इंटरफ़ेस ध्वज के साथ रिकॉर्डर नहीं बना रहा था।

0
apiLvl = (*env)->GetStaticIntField(env, versionClass, sdkIntFieldID); 

SLint32 streamType = SL_ANDROID_RECORDING_PRESET_GENERIC; 
    if(apiLvl > 10){ 
     streamType = SL_ANDROID_RECORDING_PRESET_VOICE_COMMUNICATION; 
     I("set SL_ANDROID_RECORDING_PRESET_VOICE_COMMUNICATION"); 
    } 

    result = (*recorderConfig)->SetConfiguration(recorderConfig, SL_ANDROID_KEY_RECORDING_PRESET, &streamType, sizeof(SLint32)); 
    if (SL_RESULT_SUCCESS != result) { 
     return 0; 
    } 
0

यहां तक ​​कि मैंने ओपनएसएल में लाभ बदलने का एक तरीका खोजने का प्रयास किया, ऐसा लगता है कि उसके लिए कोई एपीआई/इंटरफ़ेस नहीं है। मैं एक साधारण पारी लाभ गुणक को लागू करने से चारों ओर एक काम कार्यान्वित

शून्य multiply_gain (शून्य * बफर, पूर्णांक बाइट्स, पूर्णांक gain_val) { पूर्णांक मैं = 0, जे = 0;

 short *buffer_samples = (short*)buffer; 

    for(i = 0, j = 0; i < bytes; i+=2,j++) 
    { 
     buffer_samples[j] = (buffer_samples[j] >> gain_val); 
    } 

}

लेकिन यहाँ लाभ गुणा किया जाता है/विभाजित एक पहलू से या 2. (< < या >> के आधार पर) यदि आप एक चिकनी लाभ वक्र की जरूरत है, तो आप एक अधिक जटिल लिखने की ज़रूरत डिजिटल लाभ समारोह।

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