Android एक्सटेंशन

चेतावनी: OpenSL ES अब इस्तेमाल नहीं किया जा रहा है. डेवलपर को GitHub पर उपलब्ध, ओपन सोर्स Oboe लाइब्रेरी का इस्तेमाल करना चाहिए. Oboe एक C++ रैपर है, जो AAudio से मिलता-जुलता एपीआई उपलब्ध कराता है. AAudio उपलब्ध होने पर, Oboe इसकी मदद लेता है. अगर AAudio उपलब्ध नहीं है, तो यह OpenSL ES का इस्तेमाल करता है.

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

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

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

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

सुविधा ऑडियो प्लेयर ऑडियो रिकॉर्डर इंजन आउटपुट मिक्स
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 रेफ़रंस स्पेसिफ़िकेशन में, बफ़र कतार का इस्तेमाल सिर्फ़ ऑडियो प्लेयर के लिए किया जा सकता है. ये PCM और अन्य डेटा फ़ॉर्मैट के साथ काम करते हैं. Android के सिंपल बफ़र क्यू डेटा लोकेटर और इंटरफ़ेस की स्पेसिफ़िकेशन, रेफ़रंस स्पेसिफ़िकेशन से मेल खाती हैं. हालांकि, इनमें दो अपवाद हैं:

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

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

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

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

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

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

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

Android पर OpenSL ES 1.0.1 को लागू करने से, आपके ऐप्लिकेशन को किसी ऑब्जेक्ट को इंस्टैंशिएट करते समय डाइनैमिक इंटरफ़ेस तय करने की सुविधा मिलती है. यह, 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 API के NDK वर्शन के लिए कोई दस्तावेज़ उपलब्ध नहीं है. हालांकि, उदाहरण के लिए, नेटिव-कोडेक सैंपल कोड देखें.

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

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

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

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

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

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

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

ध्यान दें: Android 4.x (एपीआई लेवल 16 से 20) पर चलने वाले ऐप्लिकेशन के लिए, एन्कोड की गई स्ट्रीम को PCM में डिकोड करने के बाद, उसे तुरंत चलाए बिना उसे स्टोर करने के लिए, हमारा सुझाव है कि आप 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 की बफ़र सूची का कॉलबैक ट्रिगर होता है. कॉलबैक हैंडलर को बफ़र को फिर से भरना चाहिए और बफ़र करना चाहिए. इसके बाद, इसे फिर से क्यू में लागू करना चाहिए. ऐप्लिकेशन को एन्कोड किए गए बफ़र का ट्रैक रखने की ज़रूरत नहीं है; कॉलबैक पैरामीटर सूची में, उस बफ़र के बारे में ज़रूरी जानकारी शामिल होती है जिसे अगले क्रम में जोड़ा जाना चाहिए. लाइव स्ट्रीम खत्म होने के बारे में, साफ़ तौर पर ईओएस आइटम के साथ सूची में जोड़ा जाता है. ईओएस के बाद, सूची में और प्रॉडक्ट जोड़े नहीं जा सकते.

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

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

नामों में एक जैसे होने के बावजूद, Android की बफ़र सूची नहीं है Android सिंपल बफ़र क्यू की तरह. स्ट्रीमिंग डिकोडर, दोनों तरह की बफ़र कतार का इस्तेमाल करता है: ADTS AAC डेटा सोर्स के लिए Android बफ़र कतार और 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) और इसके बाद के वर्शन पर चलने वाला ऐप्लिकेशन, AudioPlayer को सिंगल-प्रिसीज़न, फ़्लोटिंग-पॉइंट फ़ॉर्मैट में डेटा दे सकता है.

नीचे दिए गए उदाहरण कोड में, 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;
फ़्लोटिंग-पॉइंट ऑडियो के बारे में और पढ़ें पर क्लिक करें.