Android एक्सटेंशन

Android के लिए OpenSL ES ने इसके साथ काम करने के लिए, OpenSL ES से जुड़ी ज़रूरी शर्तों को आगे बढ़ा दिया है साथ ही, Android प्लैटफ़ॉर्म की सुविधाओं और ज़रूरत के हिसाब से सुविधाएं इस्तेमाल करने का भी मौका मिलता है.

Android एक्सटेंशन के लिए एपीआई की परिभाषा OpenSLES_Android.h में है हेडर फ़ाइलें भी शामिल होती हैं. OpenSLES_Android.h से सलाह लें देखें. यह फ़ाइल आपके इंस्टॉलेशन रूट के नीचे, sysroot/usr/include/SLES डायरेक्ट्री. जब तक अलग से न हो ध्यान दें, सभी इंटरफ़ेस अश्लील हैं.

ये एक्सटेंशन आपके ऐप्लिकेशन की पोर्टेबिलिटी को इस तक सीमित करते हैं: अन्य OpenSL ES लागू करना, क्योंकि वे Android के लिए खास तौर पर बने होते हैं. इस समस्या को एक्सटेंशन का इस्तेमाल न करें या कंपाइल करते समय उन्हें बाहर रखने के लिए, #ifdef का इस्तेमाल करें.

नीचे दी गई टेबल में, Android के लिए ऐसे इंटरफ़ेस और डेटा लोकेटर दिखाए गए हैं जो Android OpenSL ES पर काम करते हैं . सेल में मौजूद Yes वैल्यू, इंटरफ़ेस और डेटा को दिखाती हैं हर ऑब्जेक्ट टाइप के लिए उपलब्ध लोकेटर.

सुविधा ऑडियो प्लेयर ऑडियो रिकॉर्डर इंजन आउटपुट मिक्स
Android की बफ़र सूची हां: सोर्स (डिकोड) नहीं नहीं नहीं
Android कॉन्फ़िगरेशन हां हां नहीं नहीं
Android इफ़ेक्ट हां नहीं नहीं हां
Android इफ़ेक्ट की सुविधाएं नहीं नहीं हां नहीं
Android इफ़ेक्ट भेजा गया हां नहीं नहीं नहीं
Android की सामान्य बफ़र सूची हां: सोर्स (प्लेबैक) या सिंक (डीकोड) हां नहीं नहीं
Android बफ़र सूची का डेटा लोकेटर हां: सोर्स (डिकोड) नहीं नहीं नहीं
Android फ़ाइल डिस्क्रिप्टर डेटा लोकेटर हां: सोर्स नहीं नहीं नहीं
Android का आसान बफ़र क्यू डेटा लोकेटर हां: सोर्स (प्लेबैक) या सिंक (डीकोड) हां: सिंक करें नहीं नहीं

Android कॉन्फ़िगरेशन इंटरफ़ेस

Android कॉन्फ़िगरेशन इंटरफ़ेस, सेट करने का तरीका ऑब्जेक्ट के लिए प्लैटफ़ॉर्म के खास पैरामीटर. यह इंटरफ़ेस अन्य OpenSL ES से अलग है 1.0.1 ऐसे इंटरफ़ेस जिनमें आपका ऐप्लिकेशन, मिलते-जुलते ऑब्जेक्ट को इंस्टैंशिएट करने से पहले उसका इस्तेमाल कर सके; इसलिए, तो आप ऑब्जेक्ट को इंस्टैंशिएट करने से पहले उसे कॉन्फ़िगर कर सकते हैं. कॉन्टेंट बनाने OpenSLES_AndroidConfiguration.h हेडर फ़ाइल, जो यहां मौजूद होती है /sysroot/usr/include/SLES, नीचे दी गई उपलब्ध कॉन्फ़िगरेशन कुंजियों और वैल्यू का दस्तावेज़ देगा:

  • ऑडियो प्लेयर के लिए स्ट्रीम का प्रकार (डिफ़ॉल्ट SL_ANDROID_STREAM_MEDIA).
  • ऑडियो रिकॉर्डर के लिए प्रोफ़ाइल रिकॉर्ड करें (डिफ़ॉल्ट SL_ANDROID_RECORDING_PRESET_GENERIC).

यहां दिया गया कोड स्निपेट एक उदाहरण में बताया गया है कि किसी ऑडियो पर Android ऑडियो स्ट्रीम टाइप कैसे सेट करें खिलाड़ी:

// CreateAudioPlayer and specify SL_IID_ANDROIDCONFIGURATION
// in the required interface ID array. Do not realize player yet.
// ...
SLAndroidConfigurationItf playerConfig;
result = (*playerObject)->GetInterface(playerObject,
    SL_IID_ANDROIDCONFIGURATION, &playerConfig);
assert(SL_RESULT_SUCCESS == result);
SLint32 streamType = SL_ANDROID_STREAM_ALARM;
result = (*playerConfig)->SetConfiguration(playerConfig,
    SL_ANDROID_KEY_STREAM_TYPE, &streamType, sizeof(SLint32));
assert(SL_RESULT_SUCCESS == result);
// ...
// Now realize the player here.

ऑडियो रिकॉर्डर के लिए, पहले से सेट किए गए तापमान को कॉन्फ़िगर करने के लिए, मिलते-जुलते कोड का इस्तेमाल किया जा सकता है:

// ... obtain the configuration interface as the first four lines above, then:
SLuint32 presetValue = SL_ANDROID_RECORDING_PRESET_VOICE_RECOGNITION;
result = (*playerConfig)->SetConfiguration(playerConfig,
    RECORDING_PRESET, &presetValue, sizeof(SLuint32));

Android इफ़ेक्ट इंटरफ़ेस

Android का इफ़ेक्ट, इफ़ेक्ट भेजने, और इफ़ेक्ट की क्षमताओं के इंटरफ़ेस से आपको मदद मिलती है किसी ऐप्लिकेशन की क्वेरी करने और डिवाइस के हिसाब से उसे इस्तेमाल करने का सामान्य तरीका ऑडियो इफ़ेक्ट. डिवाइस बनाने वाली कंपनियों को, डिवाइस के हिसाब से उपलब्ध हर ऑडियो इफ़ेक्ट का रिकॉर्ड रखना चाहिए उपलब्ध कराते हैं.

पोर्टेबल ऐप्लिकेशन को ऑडियो इफ़ेक्ट के लिए, Android के बजाय OpenSL ES 1.0.1 एपीआई का इस्तेमाल करना चाहिए इफ़ेक्ट एक्सटेंशन.

Android फ़ाइल डिस्क्रिप्टर डेटा लोकेटर

Android फ़ाइल डिस्क्रिप्टर डेटा लोकेटर आपको पढ़ने के ऐक्सेस के साथ ओपन फ़ाइल डिस्क्रिप्टर के रूप में ऑडियो प्लेयर. डेटा का फ़ॉर्मैट MIME होना चाहिए.

यह एक्सटेंशन खास तौर पर नेटिव ऐसेट मैनेजर के साथ काम करता है, क्योंकि ऐप्लिकेशन, फ़ाइल डिस्क्रिप्टर की मदद से APK की ऐसेट को पढ़ता है.

Android का आसान बफ़र क्यू डेटा लोकेटर और इंटरफ़ेस

OpenSL ES 1.0.1 के रेफ़रंस स्पेसिफ़िकेशन में, बफ़र क्यू का इस्तेमाल सिर्फ़ ऑडियो प्लेयर के लिए किया जा सकता है. इनको और अन्य डेटा फ़ॉर्मैट के साथ काम करता है. Android की सामान्य बफ़र सूची का डेटा लोकेटर और इंटरफ़ेस की खास बातें जो दो अपवादों के साथ संदर्भ विनिर्देशों के समान है:

  • ऑडियो रिकॉर्डर और ऑडियो प्लेयर के साथ, Android की सामान्य बफ़र सूची का इस्तेमाल किया जा सकता है.
  • इन सूची में, सिर्फ़ PCM डेटा फ़ॉर्मैट का इस्तेमाल किया जा सकता है.

रिकॉर्डिंग के लिए, आपके ऐप्लिकेशन को खाली बफ़र को क्यू में रखना चाहिए. जब रजिस्टर किया गया कॉलबैक भेजता है यह सूचना मिलने पर कि सिस्टम ने बफ़र में डेटा लिखना पूरा कर लिया है, तो ऐप्लिकेशन उस बफ़र से पढ़ना शुरू करें.

वीडियो चलाने की सुविधा इसी तरह से काम करती है. आने वाले समय के सोर्स कोड के लिए हालाँकि, हमारा सुझाव है कि ऐप्लिकेशन Android के आसान वर्शन OpenSL ES 1.0.1 बफ़र क्यू के बजाय, बफ़र क्यू.

बफ़र सूची की कार्रवाई

Android के लागू होने में रेफ़रंस के लिए खास जानकारी से जुड़ी ज़रूरी शर्त है कि कर्सर को शुरू से वापस शुरू करें SL_PLAYSTATE_STOPPED में आते समय, वीडियो चलाने वाले मौजूदा बफ़र का प्रतिशत राज्य. लागू किया जाना उस व्यवहार के मुताबिक हो सकता है या वह प्ले की जगह को छोड़ सकता है कर्सर में कोई बदलाव नहीं हुआ है. इस वजह से, आपका ऐप्लिकेशन यह नहीं मान सकता कि दोनों में से कोई भी व्यवहार हो रहा है. इसलिए, आपको ट्रांज़िशन के बाद, BufferQueue::Clear() तरीके को साफ़ तौर पर कॉल करना चाहिए SL_PLAYSTATE_STOPPED. ऐसा करने से बफ़र सूची की स्थिति तय हो जाती है.

इसी तरह, इस बात का कोई कंट्रोल नहीं है कि बफ़र क्यू कॉलबैक के लिए ट्रिगर को ट्रिगर करना है या नहीं SL_PLAYSTATE_STOPPED पर ट्रांज़िशन या BufferQueue::Clear(). इसलिए, हमारा सुझाव है कि आप इनमें से कोई एक; इसके बजाय, आपका ऐप्लिकेशन दोनों को मैनेज कर सकेगा.

ऑब्जेक्ट बनाते समय डाइनैमिक इंटरफ़ेस

सुविधा के लिए, OpenSL ES 1.0.1 का Android वर्शन लागू करना आपके ऐप्लिकेशन को किसी ऑब्जेक्ट को इंस्टैंशिएट करते समय, डाइनैमिक इंटरफ़ेस तय करने की अनुमति देता है. यह, DynamicInterfaceManagement::AddInterface() का इस्तेमाल करने का एक विकल्प है इंस्टैंशिएट करने के बाद इन इंटरफ़ेस को जोड़ने के लिए.

एक्सटेंशन की रिपोर्टिंग

यह प्लैटफ़ॉर्म, Android एक्सटेंशन के साथ काम करता है या नहीं, यह क्वेरी करने के तीन तरीके हैं. ये तरीके हैं:

  • Engine::QueryNumSupportedExtensions()
  • Engine::QuerySupportedExtension()
  • Engine::IsExtensionSupported()

इनमें से किसी भी तरीके से ANDROID_SDK_LEVEL_<API-level>, जहां API-level, प्लैटफ़ॉर्म का एपीआई लेवल है; उदाहरण के लिए, ANDROID_SDK_LEVEL_23. प्लैटफ़ॉर्म एपीआई लेवल 9 या उससे ज़्यादा होने का मतलब है कि प्लैटफ़ॉर्म, एक्सटेंशन के साथ काम करता है.

ऑडियो को PCM में डिकोड करें

इस सेक्शन में, Android के लिए ऐसे एक्सटेंशन के बारे में बताया गया है जो अब सेवा में नहीं है. यह एक्सटेंशन OpenSL ES 1.0.1 पर काम नहीं करेगा का इस्तेमाल करें. नीचे दी गई टेबल में, इस एक्सटेंशन और इसके दूसरे विकल्पों के इस्तेमाल के सुझाव दिए गए हैं.

API स्तर विकल्प
15 साल और इससे कम सही लाइसेंस वाला ओपन सोर्स कोडेक
16 से 20 MediaCodec क्लास या सही लाइसेंस वाला ओपन-सोर्स कोडेक
21 और इससे ज़्यादा <media/NdkMedia*.h> हेडर फ़ाइलों में NDK MediaCodec, MediaCodec क्लास या मान्य लाइसेंस वाला ओपन-सोर्स कोडेक

ध्यान दें: फ़िलहाल, MediaCodec एपीआई के एनडीके वर्शन के लिए कोई दस्तावेज़ मौजूद नहीं है. हालांकि, तो आप नेटिव-कोडेक का उदाहरण देखें.

एक स्टैंडर्ड ऑडियो प्लेयर, ऑडियो डिवाइस पर वापस चलता है. इससे आउटपुट मिक्स को डेटा सिंक के तौर पर दिखाया जाता है. Android एक्सटेंशन एक ऑडियो प्लेयर से अलग है, अगर ऐप्लिकेशन ने डेटा सोर्स को यूआरआई या Android के तौर पर बताया है, तो यह डिकोडर की तरह काम करता है फ़ाइल डिस्क्रिप्टर डेटा लोकेटर, जिसके बारे में MIME डेटा फ़ॉर्मैट का इस्तेमाल करके बताया गया है. ऐसे मामले में, डेटा सिंक यह एक Android सामान्य बफ़र क्यू डेटा लोकेटर है, जो PCM डेटा फ़ॉर्मैट का इस्तेमाल करता है.

इस सुविधा का मकसद, गेम के लिए ऑडियो ऐसेट को पहले से लोड करने के लिए है. गेम का नया लेवल, जो कि SoundPool की सुविधाओं से मिलता-जुलता है क्लास की सुविधा देता है.

ऐप्लिकेशन को शुरुआत में, Android आसान बफ़र सूची. इसके बाद, यह ऐप्लिकेशन बफ़र में PCM डेटा को भर देता है. आसान Android हर बफ़र भरे जाने के बाद, बफ़र सूची का कॉलबैक चालू हो जाता है. कॉलबैक हैंडलर प्रोसेस PCM डेटा को हटाने के बाद, अब खाली बफ़र को फिर से क्यू में शामिल करता है और फिर वापस आता है. ऐप्लिकेशन इनके लिए ज़िम्मेदार होता है डिकोड किए गए बफ़र को ट्रैक करना; कॉलबैक पैरामीटर सूची में उस बफ़र को दिखाने के लिए ज़रूरी जानकारी जिसमें डेटा है या वह बफ़र जिसे इसके बाद सूची में है.

डेटा सोर्स, स्ट्रीम खत्म होने की प्रोसेस (ईओएस) की रिपोर्ट करता है. इसके लिए, स्ट्रीम के अंत में SL_PLAYEVENT_HEADATEND इवेंट. ऐप्लिकेशन को डिकोड करने के बाद उसे सारे डेटा मिल जाता है. यह Android के सामान्य बफ़र क्यू कॉलबैक को कोई और कॉल नहीं करता.

आम तौर पर, सिंक का PCM डेटा फ़ॉर्मैट, कोड में बदले गए डेटा सोर्स से मैच करता है जिसमें सैंपल रेट, चैनलों की संख्या, और बिट डेप्थ के बारे में बताया गया है. हालांकि, आपके पास डिकोड करने की सुविधा का इस्तेमाल करके, सैंपल रेट, चैनल की संख्या या बिट डेप्थ. असली PCM फ़ॉर्मैट का पता लगाने के प्रावधान के बारे में जानने के लिए, मेटाडेटा की मदद से डिकोड किए गए पीसीएम डेटा का फ़ॉर्मैट तय करना.

Android की PCM डिकोडिंग सुविधा के लिए OpenSL ES, रोकें और शुरुआती सीक का समर्थन करता है; यह काम नहीं करता आवाज़ कंट्रोल, इफ़ेक्ट, लूप में चलने की सुविधा या वीडियो चलाने की स्पीड.

प्लैटफ़ॉर्म के लागू होने के तरीके के आधार पर, डिकोड करने के लिए संसाधनों की ज़रूरत पड़ सकती है जिसे कुछ समय के लिए इस्तेमाल नहीं किया जा सकता. इसलिए, हमारी सलाह है कि आप खाली PCM बफ़र की ज़रूरी संख्या; अगर ऐसा नहीं होता है, तो डिकोडर भूखे रह जाता है. ऐसा हो सकता है, उदाहरण के लिए, अगर आपका ऐप्लिकेशन Android के आसान बफ़र लिस्ट कॉलबैक से बाहर आता है, तो पंक्ति में एक और खाली बफ़र जोड़ा गया है. डिकोडर भुखमरी का नतीजा होता है जानकारी उपलब्ध नहीं है, लेकिन इसमें डिकोड किया गया कोड शामिल हो सकता है पीसीएम डेटा, डिकोड करने की प्रोसेस को रोकना या डिकोडर को पूरी तरह से बंद करना.

ध्यान दें: कोड में बदली गई स्ट्रीम को पीसीएम में डिकोड करने के लिए, लेकिन उस समय चल रहे ऐप्लिकेशन के लिए तुरंत वापस नहीं चलाना Android 4.x (एपीआई लेवल 16 से 20) के लिए, हम MediaCodec क्लास इस्तेमाल करने का सुझाव देते हैं. Android 5.0 (एपीआई लेवल 21) या इसके बाद के वर्शन पर काम करने वाले नए ऐप्लिकेशन के लिए, हमारा सुझाव है कि आप एनडीके का इस्तेमाल करें <NdkMedia*.h> के बराबर. ये हेडर फ़ाइलें इसमें मौजूद होती हैं media/ डायरेक्ट्री को इंस्टॉल करें.

स्ट्रीमिंग ADTS AAC को PCM में डिकोड करें

अगर डेटा सोर्स Android बफ़र सूची का डेटा लोकेटर, जो MIME डेटा फ़ॉर्मैट और डेटा का इस्तेमाल करता है सिंक, एक Android सामान्य बफ़र क्यू डेटा लोकेटर है, जो PCM डेटा फ़ॉर्मैट का इस्तेमाल करता है. MIME डेटा फ़ॉर्मैट को इस तरह से कॉन्फ़िगर करें:

  • कंटेनर: SL_CONTAINERTYPE_RAW
  • MIME टाइप स्ट्रिंग: SL_ANDROID_MIME_AACADTS

यह सुविधा मुख्य रूप से उन मीडिया ऐप्लिकेशन की स्ट्रीमिंग के लिए है जिनमें AAC ऑडियो के साथ डील करते हैं, लेकिन कस्टम ऑडियो प्रोसेसिंग की ज़रूरत होती है पहले दिखाई देती है. ज़्यादातर ऐसे ऐप्लिकेशन जिन्हें ऑडियो को PCM में डिकोड करने की ज़रूरत होती है को ऑडियो को पीसीएम से डिकोड करने वाले तरीके का इस्तेमाल करना चाहिए, ऐसा इसलिए, क्योंकि यह आसान है और ज़्यादा ऑडियो फ़ॉर्मैट के साथ काम करता है. बताई गई तकनीक यहां एक ज़्यादा खास तरीका बताया गया है. इसका इस्तेमाल तभी किया जा सकता है, जब ये दोनों शर्तें लागू:

  • कंप्रेस किया गया ऑडियो सोर्स, ADTS हेडर में मौजूद AAC फ़्रेम की एक स्ट्रीम है.
  • ऐप्लिकेशन इस स्ट्रीम को मैनेज करता है. यह डेटा इसमें मौजूद नहीं है ऐसा नेटवर्क संसाधन जिसका आइडेंटिफ़ायर यूआरआई या किसी लोकल फ़ाइल में मौजूद है जिसका आइडेंटिफ़ायर फ़ाइल डिस्क्रिप्टर.

ऐप्लिकेशन को शुरुआत में, भरे हुए बफ़र के सेट को Android की बफ़र सूची में रखना चाहिए. हर बफ़र में एक या उससे ज़्यादा पूरे ADTS AAC फ़्रेम होते हैं. हर बफ़र को खाली किए जाने के बाद, Android की बफ़र सूची का कॉलबैक ट्रिगर होता है. कॉलबैक हैंडलर को बफ़र को फिर से भरना चाहिए और बफ़र करना चाहिए. इसके बाद, इसे फिर से क्यू में लागू करना चाहिए. ऐप्लिकेशन को कोड में बदले गए बफ़रों को ट्रैक करने की ज़रूरत नहीं होती; कॉलबैक पैरामीटर सूची में उस बफ़र को दिखाने के लिए काफ़ी जानकारी दी गई है जिसे आगे जोड़ा जाना चाहिए. लाइव स्ट्रीम खत्म होने के बारे में, साफ़ तौर पर ईओएस आइटम के साथ सूची में जोड़ा जाता है. ईओएस के बाद, और सूची बनाने की अनुमति नहीं है.

हमारा सुझाव है कि आप अपनी पूरी जानकारी डिकोडर को भूख से बचाने के लिए, ADTS AAC बफ़र. ऐसा हो सकता है, उदाहरण के लिए, अगर आपका ऐप्लिकेशन किसी दूसरे फ़ुल बफ़र के ज़रूरत के बिना, 'Android की बफ़र सूची' कॉलबैक से देता है. डिकोडर के भूख लगने की वजह का पता नहीं लगाया गया है.

डेटा सोर्स को छोड़कर, सभी मामलों में स्ट्रीमिंग डिकोड करने का तरीका इसका इस्तेमाल करके, ऑडियो को PCM में डिकोड करें.

नामों में एक जैसे होने के बावजूद, Android की बफ़र सूची नहीं है Android सिंपल बफ़र क्यू की तरह. स्ट्रीमिंग डिकोडर दोनों तरह की बफ़र क्यू का इस्तेमाल करता है: ADTS के लिए Android बफ़र क्यू AAC डेटा सोर्स और PCM डेटा के लिए Android की सामान्य बफ़र सूची सिंक. Android के सामान्य बफ़र सूची एपीआई के बारे में ज़्यादा जानकारी के लिए, Android सामान्य बफ़र क्यू डेटा लोकेटर और इंटरफ़ेस के लिए. Android बफ़र सूची एपीआई के बारे में ज़्यादा जानकारी के लिए, index.html फ़ाइल को इसमें देखें docs/Additional_library_docs/openmaxal/ डायरेक्ट्री को इंस्टॉल करें.

मेटाडेटा के ज़रिए, डिकोड किए गए PCM डेटा का फ़ॉर्मैट तय करना

SLMetadataExtractionItf इंटरफ़ेस, रेफ़रंस के लिए दिए गए स्पेसिफ़िकेशन का हिस्सा है. हालांकि, डिकोड की गई PCM डेटा का असली फ़ॉर्मैट दिखाने वाली मेटाडेटा कुंजियां खास तौर पर Android. OpenSLES_AndroidMetadata.h हेडर फ़ाइल में इन मेटाडेटा कुंजियों के बारे में जानकारी दी गई है. यह हेडर फ़ाइल आपके इंस्टॉलेशन रूट के नीचे, इसमें /sysroot/usr/include/SLES डायरेक्ट्री.

मेटाडेटा कुंजी का इंडेक्स, इसके तुरंत बाद उपलब्ध होता है Object::Realize() तरीके से एक्ज़ीक्यूट किया जा चुका है. हालांकि, संबंधित मान यह तब तक उपलब्ध रहता है, जब तक ऐप्लिकेशन कोड में बदले गए पहले डेटा को डीकोड नहीं करता. बहुत अच्छा Object::Realize तरीका इस्तेमाल करने के बाद, मुख्य थ्रेड में मुख्य इंडेक्स के लिए क्वेरी करना और Android के आसान मोड में, PCM फ़ॉर्मैट की मेटाडेटा वैल्यू को पढ़ना पहली बार कॉल करते समय बफ़र क्यू कॉलबैक हैंडलर. सहायता टीम से संपर्क करें उदाहरण के लिए, NDK पैकेज देखें.

मेटाडेटा कुंजी के नाम एक जैसे हैं, लेकिन मुख्य इंडेक्स रिकॉर्ड नहीं किए गए हैं, इनमें बदलाव हो सकता है. ऐप्लिकेशन को यह नहीं मानना चाहिए कि इंडेक्स अलग-अलग एक्ज़ीक्यूशन चलाए जाने पर लगातार चलते रहते हैं और उन्हें यह नहीं मानना चाहिए कि कई ऑब्जेक्ट इंस्टेंस एक ही रन के अंदर इंडेक्स शेयर करते हैं.

फ़्लोटिंग-पॉइंट डेटा

Android 5.0 (एपीआई लेवल 21) और इसके बाद के वर्शन पर चलने वाला ऐप्लिकेशन, सिंगल-प्रीसिज़न, फ़्लोटिंग-पॉइंट फ़ॉर्मैट.

नीचे दिए गए उदाहरण कोड में, Engine::CreateAudioPlayer() तरीका एक ऑडियो प्लेयर बनाता है जो फ़्लोटिंग-पॉइंट डेटा का इस्तेमाल करता है:

#include <SLES/OpenSLES_Android.h>
...
SLAndroidDataFormat_PCM_EX pcm;
pcm.formatType = SL_ANDROID_DATAFORMAT_PCM_EX;
pcm.numChannels = 2;
pcm.sampleRate = SL_SAMPLINGRATE_44_1;
pcm.bitsPerSample = 32;
pcm.containerSize = 32;
pcm.channelMask = SL_SPEAKER_FRONT_LEFT | SL_SPEAKER_FRONT_RIGHT;
pcm.endianness = SL_BYTEORDER_LITTLEENDIAN;
pcm.representation = SL_ANDROID_PCM_REPRESENTATION_FLOAT;
...
SLDataSource audiosrc;
audiosrc.pLocator = ...
audiosrc.pFormat = &pcm;
फ़्लोटिंग-पॉइंट ऑडियो के बारे में ज़्यादा जानें पर क्लिक करें.