Android के लिए OpenSL ES

इस पेज में बताया गया है कि OpenSL को लागू करने के लिए NDK ईएसटीएम, OpenSL ES 1.0.1 के रेफ़रंस स्पेसिफ़िकेशन से अलग है. सैंपल कोड का इस्तेमाल करते समय, है, तो Android पर काम करने के लिए आपको इसमें बदलाव करना पड़ सकता है.

जब तक अलग से न बताया जाए, तब तक सभी सुविधाएं Android 2.3 (एपीआई लेवल 9) और उसके बाद वाले वर्शन पर उपलब्ध हैं. कुछ सुविधाएं सिर्फ़ Android 4.0 (एपीआई लेवल 14) के लिए उपलब्ध हैं; जिन्हें नोट कर लिया गया है.

ध्यान दें: Android के साथ काम करने की परिभाषा का दस्तावेज़ (सीडीडी), हार्डवेयर और सॉफ़्टवेयर की सूची बनाता है Android डिवाइस की ज़रूरी शर्तें पूरी करता हो. यहां जाएं: Android पर काम करने की सुविधा प्रोग्राम के बेहतर परफ़ॉर्मेंस के बारे में ज़्यादा जानकारी पाने के लिए, और CDD का इस्तेमाल करें.

OpenSL ES एक C देता है जो C++ का इस्तेमाल करके भी ऐक्सेस किया जा सकता है. यह ऑडियो से मिलती-जुलती सुविधाएं दिखाता है इन Android Java API के हिस्से:

सभी Android नेटिव डेवलपमेंट किट (एनडीके) की तरह ही, OpenSL ES का मुख्य मकसद Android, शेयर की गई लाइब्रेरी के लागू करने की प्रक्रिया को आसान बनाता है, ताकि Java नेटिव का इस्तेमाल करके उन्हें कॉल किया जा सके इंटरफ़ेस (JNI ). NDK, C/C++ ऐप्लिकेशन लिखने के लिए नहीं है. हालांकि, OpenSL ES सभी सुविधाओं वाला एपीआई उपलब्ध है. हमें उम्मीद है कि इससे आपकी ऑडियो से जुड़ी ज़्यादातर ज़रूरतें पूरी होनी चाहिए और इसके लिए, Android रनटाइम में कोड चलाने के लिए अप-कॉल की ज़रूरत नहीं होती.

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

रेफ़रंस स्पेसिफ़िकेशन से इनहेरिट की गई सुविधाएं

OpenSL ES में Android NDK को लागू करने पर, ज़्यादातर सुविधाओं का सेट यहां से लिया जाता है शामिल हैं, जिनमें कुछ शर्तें होती हैं.

ग्लोबल एंट्री पॉइंट

Android के लिए OpenSL ES, Android की विशेषताओं में दिए गए सभी ग्लोबल एंट्री पॉइंट के साथ काम करता है. इन एंट्री पॉइंट में ये शामिल हैं:

  • slCreateEngine
  • slQueryNumSupportedEngineInterfaces
  • slQuerySupportedEngineInterfaces

ऑब्जेक्ट और इंटरफ़ेस

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

ऑब्जेक्ट और इंटरफ़ेस के लिए, Android NDK की सुविधा उपलब्ध है.

सुविधा ऑडियो प्लेयर ऑडियो रिकॉर्डर इंजन आउटपुट मिक्स
बेस बढ़ाएं हां नहीं नहीं हां
बफ़र सूची हां नहीं नहीं नहीं
बफ़र क्यू डेटा लोकेटर हां: सोर्स नहीं नहीं नहीं
डाइनैमिक इंटरफ़ेस मैनेजमेंट हां हां हां हां
इफ़ेक्ट भेजा गया हां नहीं नहीं नहीं
इंजन नहीं नहीं हां नहीं
एनवायरमेंटल रीवर्ब नहीं नहीं नहीं हां
आवाज़ बराबर करने की सुविधा हां नहीं नहीं हां
I/O डिवाइस डेटा लोकेटर नहीं हां: सोर्स नहीं नहीं
मेटाडेटा निकालें हां: PCM में डिकोड करें नहीं नहीं नहीं
सोलो को म्यूट करें हां नहीं नहीं नहीं
ऑब्जेक्ट हां हां हां हां
आउटपुट मिक्स लोकेटर हां: सिंक करें नहीं नहीं नहीं
चलाएं हां नहीं नहीं नहीं
वीडियो चलाने की स्पीड हां नहीं नहीं नहीं
स्थिति प्रीफ़ेच करें हां नहीं नहीं नहीं
प्रीसेट रीवर्ब नहीं नहीं नहीं हां
रिकॉर्ड करें नहीं हां नहीं नहीं
खोजें हां नहीं नहीं नहीं
यूआरआई डेटा लोकेटर हां: सोर्स नहीं नहीं नहीं
वर्चुअलाइज़र हां नहीं नहीं हां
वॉल्यूम हां नहीं नहीं नहीं

अगले सेक्शन में, इनमें से कुछ सुविधाओं की सीमाओं के बारे में बताया गया है.

सीमाएं

टेबल 1 में दी गई सुविधाओं पर कुछ सीमाएं लागू होती हैं. ये सीमाएं यह रेफ़रंस स्पेसिफ़िकेशन से अलग है. इस सेक्शन के बाकी हिस्से में इन अंतरों के बारे में जानकारी.

डाइनैमिक इंटरफ़ेस मैनेजमेंट

Android के लिए OpenSL ES, RemoveInterface के साथ काम नहीं करता या ResumeInterface.

इफ़ेक्ट के कॉम्बिनेशन: एनवायरमेंट रीवर्ब और प्रीसेट रीवर्ब

एक ही आउटपुट मिक्स में, वातावरण के रीवर्ब और प्रीसेट रीवर्ब, दोनों को इस्तेमाल नहीं किया जा सकता.

अगर प्लैटफ़ॉर्म का अनुमान है कि सीपीयू लोड बहुत ज़्यादा होगा.

इफ़ेक्ट भेजा गया

SetSendLevel() में हर ऑडियो प्लेयर के लिए, मैसेज भेजने का एक लेवल काम करता है.

एनवायरमेंटल रीवर्ब

एनवायरमेंटल रीवर्ब reflectionsDelay के साथ काम नहीं करता, reflectionsLevel या reverbDelay फ़ील्ड SLEnvironmentalReverbSettings स्ट्रक्चर.

MIME डेटा फ़ॉर्मैट

MIME डेटा फ़ॉर्मैट का इस्तेमाल सिर्फ़ यूआरआई डेटा लोकेटर के साथ और सिर्फ़ ऑडियो के लिए किया जा सकता है प्लेयर. इस डेटा फ़ॉर्मैट का इस्तेमाल ऑडियो रिकॉर्डर के लिए नहीं किया जा सकता.

OpenSL ES के Android वर्शन को लागू करने के लिए, आपको mimeType शुरू करना होगा NULL या एक मान्य UTF-8 स्ट्रिंग में डालें. आपको यह भी शुरू करना होगा containerType से मान्य वैल्यू डालें. अन्य पहलुओं का ध्यान न होने पर, जैसे कि दूसरे पक्ष की सेवाओं के लिए पोर्टेबिलिटी लागू करना या कॉन्टेंट फ़ॉर्मैट जिन्हें ऐप्लिकेशन हेडर से नहीं पहचान सकता, हमारी सलाह है कि mimeType को NULL और containerType पर सेट करें SL_CONTAINERTYPE_UNSPECIFIED तक.

Android के लिए OpenSL ES, इन ऑडियो फ़ॉर्मैट के साथ तब तक काम करता है, जब तक Android प्लैटफ़ॉर्म भी इनका इस्तेमाल करता है:

  • WAV PCM.
  • WAV कानून.
  • WAV ulaw.
  • MP3 Ogg Vorbis.
  • एएसी एलसी.
  • HE-AACv1 (AAC+).
  • HE-AACv2 (बेहतर AAC+).
  • एएमआर.
  • FLAC.

ध्यान दें: Android पर काम करने वाले ऑडियो फ़ॉर्मैट की सूची के लिए, यहां देखें इस्तेमाल किए जा सकने वाले मीडिया फ़ॉर्मैट.

इस फ़ॉर्मैट और अन्य फ़ॉर्मैट के इस्तेमाल पर ये सीमाएं लागू होती हैं OpenSL ES को लागू करना:

  • एएसी फ़ॉर्मैट, MP4 या ADTS कंटेनर में मौजूद होने चाहिए.
  • Android के लिए OpenSL ES काम नहीं करता है एमआईडीआई का इस्तेमाल करते हैं.
  • WMA, AOSP का हिस्सा नहीं है और हम नहीं पता कि Android के लिए OpenSL ES के साथ इसकी सुविधा काम करती है या नहीं.
  • OpenSL ES को Android NDK में लागू करने की प्रोसेस, डायरेक्ट ट्रैफ़िक से डीआरएम या एन्क्रिप्ट (सुरक्षित) किया गया कॉन्टेंट चल रहा है. सुरक्षित ऑडियो कॉन्टेंट को फिर से चलाने के लिए, आपको किसी भी डीआरएम को लागू करके, अपने ऐप्लिकेशन में गेम खेलने से पहले उसे डिक्रिप्ट करें प्रतिबंध.

Android के लिए OpenSL ES, ऑब्जेक्ट में बदलाव करने के इन तरीकों के साथ काम नहीं करता है:

  • Resume()
  • RegisterCallback()
  • AbortAsyncOperation()
  • SetPriority()
  • GetPriority()
  • SetLossOfControlInterfaces()

PCM डेटा फ़ॉर्मैट

बफ़र क्यू के साथ, सिर्फ़ PCM डेटा फ़ॉर्मैट का इस्तेमाल किया जा सकता है. काम करने वाले PCM प्लेबैक कॉन्फ़िगरेशन में ये विशेषताएं होती हैं:

  • 8-बिट साइन नहीं किया गया या 16-बिट साइन किया गया.
  • मोनो या स्टीरियो.
  • लिटिल-एंडियन बाइट ऑर्डरिंग.
  • सैंपल रेट:
    • 8,000 हर्ट्ज़.
    • 11,025 हर्ट्ज़.
    • 12,000 हर्ट्ज़.
    • 16,000 हर्ट्ज़.
    • 22,050 हर्ट्ज़.
    • 24,000 हर्ट्ज़.
    • 32,000 हर्ट्ज़.
    • 44,100 हर्ट्ज़.
    • 48,000 हर्ट्ज़.

रिकॉर्डिंग के लिए, Android के लिए OpenSL ES से ये कॉन्फ़िगरेशन इस्तेमाल किए जा सकते हैं डिवाइस पर निर्भर करता है; आम तौर पर, 16,000 हर्ट्ज़ मोनो/16-बिट वाला हस्ताक्षर उपलब्ध होता है. भले ही, कोई भी डिवाइस हो.

गुमराह करने के बावजूद, samplesPerSec फ़ील्ड की वैल्यू, मिलीसेकंड में होती है नाम. गलती से गलत वैल्यू का इस्तेमाल न हो, इसके लिए हमारा सुझाव है कि आप इस मकसद के लिए तय किए गए किसी सिंबल के कॉन्सटेंट, जैसे कि SL_SAMPLINGRATE_44_1.

Android 5.0 (एपीआई लेवल 21) और इसके बाद के वर्शन की सुविधा फ़्लोटिंग-पॉइंट डेटा.

वीडियो चलाने की स्पीड

OpenSL ES प्लेबैक रेट से पता चलता है कि ऑब्जेक्ट डेटा दिखाता है, जिसे हज़ार में सामान्य रफ़्तार या हर 1, 000 हज़ार के हिसाब से दिखाया जाता है. उदाहरण के लिए, अगर वीडियो चलाने की स्पीड 1,000 प्रति 1,000 है, तो यह 1,000/1,000 या सामान्य स्पीड होती है. दर की सीमा एक क्लोज़्ड इंटरवल है. इससे वीडियो चलाने की संभावित दरों की जानकारी मिलती है.

वीडियो चलाने की दर की रेंज और दूसरी सुविधाओं के लिए, सहायता से जुड़ी सेटिंग अलग-अलग हो सकती हैं. के बारे में आपको पूरी जानकारी देनी होगी. आपका ऐप्लिकेशन, रनटाइम के दौरान इन क्षमताओं का पता लगा सकता है: PlaybackRate::GetRateRange() या का इस्तेमाल करके डिवाइस पर क्वेरी करने के लिए PlaybackRate::GetCapabilitiesOfRate().

पीसीएम फ़ॉर्मैट में, किसी डिवाइस पर डेटा सोर्स के लिए आम तौर पर एक जैसी रेट रेंज काम करती है. साथ ही, एक यूनिट रेट भी काम करता है अन्य फ़ॉर्मैट के लिए, 1,000 प्रति 1,000 से लेकर 1,000 की रेंज तक; इसका मतलब है कि यूनिटी रेट रेंज एक ही वैल्यू का इस्तेमाल करते हैं.

रिकॉर्ड करें

Android के लिए OpenSL ES, SL_RECORDEVENT_HEADATLIMIT के साथ काम नहीं करता है या SL_RECORDEVENT_HEADMOVING इवेंट.

खोजें

SetLoop() तरीका, पूरी फ़ाइल को लूप में चलाने की सुविधा चालू करता है. लूपिंग को चालू करने के लिए, startPos पैरामीटर को 0 पर और endPos पैरामीटर को SL_TIME_UNKNOWN के लिए.

बफ़र क्यू डेटा लोकेटर

बफ़र क्यू के लिए डेटा लोकेटर वाला ऑडियो प्लेयर या रिकॉर्डर, सिर्फ़ PCM डेटा फ़ॉर्मैट के साथ काम करता है.

I/O डिवाइस डेटा लोकेटर

Android के लिए OpenSL ES सिर्फ़ तब I/O डिवाइस डेटा लोकेटर का इस्तेमाल करने की सुविधा देता है, जब आपके पास लोकेटर को Engine::CreateAudioRecorder() के लिए डेटा सोर्स के तौर पर बताया है. नीचे दिए गए कोड स्निपेट में शामिल वैल्यू का इस्तेमाल करके, डिवाइस डेटा लोकेटर शुरू करें:

SLDataLocator_IODevice loc_dev =
  {SL_DATALOCATOR_IODEVICE, SL_IODEVICE_AUDIOINPUT,
  SL_DEFAULTDEVICEID_AUDIOINPUT, NULL};

यूआरआई डेटा लोकेटर

Android के लिए OpenSL ES सिर्फ़ MIME डेटा फ़ॉर्मैट के साथ यूआरआई डेटा लोकेटर का इस्तेमाल कर सकते हैं, ऐसा सिर्फ़ ऑडियो प्लेयर के लिए किया जा सकता है. ऑडियो रिकॉर्डर के लिए, यूआरआई डेटा लोकेटर का इस्तेमाल नहीं किया जा सकता. यूआरआई सिर्फ़ ये काम कर सकता है http: और file: स्कीम का इस्तेमाल करते हैं. अन्य स्कीम, जैसे कि https:, ftp: या content: की अनुमति नहीं है.

हमने Android प्लैटफ़ॉर्म पर ऑडियो के साथ rtsp: के लिए सहायता की पुष्टि नहीं की है.

डेटा स्ट्रक्चर

Android, OpenSL ES 1.0.1 डेटा स्ट्रक्चर के साथ काम करता है:

  • SLDataFormat_MIME
  • SLDataFormat_PCM
  • SLDataLocator_BufferQueue
  • SLDataLocator_IODevice
  • SLDataLocator_OutputMix
  • SLDataLocator_URI
  • SLDataSink
  • SLDataSource
  • SLEngineOption
  • SLEnvironmentalReverbSettings
  • SLInterfaceID

प्लैटफ़ॉर्म कॉन्फ़िगरेशन

Android के लिए OpenSL ES को मल्टी-थ्रेड वाले ऐप्लिकेशन के लिए डिज़ाइन किया गया है और यह थ्रेड-सुरक्षित है. यह हर ऐप्लिकेशन में एक इंजन और हर इंजन के लिए ज़्यादा से ज़्यादा 32 ऑब्जेक्ट. डिवाइस की उपलब्ध मेमोरी और सीपीयू (CPU) और ऑब्जेक्ट की इस्तेमाल की जा सकने वाली संख्या को सीमित करते हैं.

इन इंजन विकल्पों की पहचान की जाती है, लेकिन slCreateEngine इन्हें अनदेखा कर देता है:

  • SL_ENGINEOPTION_THREADSAFE
  • SL_ENGINEOPTION_LOSSOFCONTROL

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

प्रोग्रामिंग से जुड़े नोट

OpenSL ES प्रोग्रामिंग नोट OpenSL ES का सही तरीके से लागू होना पक्का करने के लिए पूरक जानकारी देता है.

ध्यान दें: आपकी सुविधा के लिए, हमने NDK के साथ OpenSL ES 1.0.1 की एक कॉपी docs/opensles/OpenSL_ES_Specification_1.0.1.pdf.

प्लैटफ़ॉर्म से जुड़ी समस्याएं

इस सेक्शन में, शुरुआती प्लैटफ़ॉर्म रिलीज़ में ऐसी समस्याओं के बारे में बताया गया है जो इन एपीआई के साथ काम करती हैं.

डाइनैमिक इंटरफ़ेस मैनेजमेंट

DynamicInterfaceManagement::AddInterface काम नहीं करता. इसके बजाय, इंटरफ़ेस की जानकारी दें वह अरे जो Create() को पास की जाती है, जैसा कि एनवायरमेंटल रीवर्ब के उदाहरण कोड में दिखाया गया है.

OpenSL ES के आने वाले वर्शन के लिए प्लान बनाएं

Android के लिए, बेहतर परफ़ॉर्मेंस वाले ऑडियो एपीआई, इन चीज़ों पर आधारित होते हैं Khronos ग्रुप ओपनएसएल ईएस 1.0.1 के बाद लागू होगा. Kronos ने स्टैंडर्ड का अपडेट किया गया 1.1 वर्शन रिलीज़ किया है. कॉन्टेंट बनाने अपडेट किए गए वर्शन में नई सुविधाएं, साफ़ तौर पर जानकारी, टाइपोग्राफ़ी की गड़बड़ियों को ठीक करना, और कुछ सही तरीके से काम नहीं कर रहा है. ज़्यादातर गड़बड़ियां हुईं या तो OpenSL ES के ऐसे इलाके जो Android पर काम नहीं करते.

ऐप्लिकेशन इस वर्शन के साथ डेवलप किए गए ऐप्लिकेशन, Android प्लैटफ़ॉर्म के आने वाले वर्शन पर काम करने चाहिए, बशर्ते आपको बाइनरी प्लान के लिए दिशा-निर्देशों का पालन करना होगा कम्पैटबिलटी सेक्शन देखें.

ध्यान दें: यह लक्ष्य नहीं है कि आने वाले समय में सोर्स को किस तरह से ऑप्टिमाइज़ किया जाए. इसका मतलब है कि अगर एनडीके के नए वर्शन पर अपग्रेड किया जाता है, नए API के अनुरूप होने के लिए आपको अपने ऐप्स स्रोत कोड को संशोधित करने की आवश्यकता हो सकती है. हमें उम्मीद है कि ऐसे बदलाव छोटे होंगे; इसकी जानकारी नीचे देखें.

बाइनरी कंपैटबिलिटी के लिए प्लान बनाएं

हमारा सुझाव है कि आपका ऐप्लिकेशन, आने वाले समय में बाइनरी के साथ बेहतर तरीके से काम करने के लिए, इन दिशा-निर्देशों का पालन करे:

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

ध्यान दें: बफ़र क्यू की सुविधा सेक्शन देखें.

सोर्स के साथ काम करने की सुविधा के लिए प्लान बनाना

जैसा कि बताया गया है, OpenSL ES के अगले वर्शन में ऐसा हो सकता है कि सोर्स कोड ठीक से काम न करे ख्रोनोस ग्रुप. बदलाव की ये वजहें हो सकती हैं:

  • बफ़र क्यू के इंटरफ़ेस में अहम बदलाव हो सकते हैं. खास तौर पर, इन इलाकों में BufferQueue::Enqueue की, slBufferQueueCallback की पैरामीटर सूची और SLBufferQueueState.playIndex फ़ील्ड का नाम. हम सलाह देते हैं कि आप अपने ऐप्लिकेशन कोड का इसके बजाय, Android सामान्य बफ़र लिस्ट का इस्तेमाल करता है. उदाहरण में जिस कोड की स्ट्रीमिंग के लिए एनडीके (NDK) के साथ इस्तेमाल किया जाता है, हमने इस वजह से. (पीसीएम में रिकॉर्डिंग और डिकोड करने के लिए, हम Android की सामान्य बफ़र सूची का इस्तेमाल करते हैं. हालांकि, ऐसा इसलिए है, क्योंकि OpenSL ES 1.0.1, बफ़र क्यू डेटा के लिए रिकॉर्ड या डिकोड करने की सुविधा नहीं देता सिंक.)
  • रेफ़रंस से पास किए गए इनपुट पैरामीटर में, const को जोड़ दिया जाएगा और ताकि SLchar * इनपुट वैल्यू के तौर पर इस्तेमाल किए गए फ़ील्ड बनाए जा सकें. इसमें किसी बदलाव की ज़रूरत नहीं होनी चाहिए आपका कोड.
  • फ़िलहाल, साइन किए गए कुछ पैरामीटर के लिए, साइन नहीं किए गए टाइप की जगह कोई और टाइप काम आ सकता है. आपको पैरामीटर टाइप को SLint32 से SLuint32 या इससे मिलते-जुलते पैरामीटर में बदलना पड़ सकता है या कास्ट करें.
  • Equalizer::GetPresetName लौटने के बजाय स्ट्रिंग को ऐप्लिकेशन मेमोरी में कॉपी करता है मेमोरी लागू करने के लिए पॉइंटर. यह एक बड़ा बदलाव होगा, इसलिए हमारा सुझाव है कि आप इस तरीके को कॉल करने से बचें या इसके इस्तेमाल को अलग रखें.
  • स्ट्रक्चर टाइप में अतिरिक्त फ़ील्ड होंगे. आउटपुट पैरामीटर के लिए, ये नए फ़ील्ड इसे अनदेखा किया जा सकता है, लेकिन इनपुट पैरामीटर के लिए नए फ़ील्ड शुरू करने होंगे. अच्छी बात यह है कि ये सभी फ़ील्ड उन इलाकों में होने चाहिए जहां Android काम नहीं करता.
  • इंटरफ़ेस जीयूआईडी बदल जाएंगे. इंटरफ़ेस में जीयूआईडी के बजाय सिम्बॉलिक नाम का इस्तेमाल करें निर्भर है.
  • SLchar, unsigned char से बदलकर char हो जाएगा. इससे मुख्य तौर पर असर पड़ता है यूआरआई डेटा लोकेटर और MIME डेटा फ़ॉर्मैट के साथ काम करता है.
  • SLDataFormat_MIME.mimeType का नाम बदलकर pMimeType कर दिया जाएगा. SLDataLocator_URI.URI का नाम बदलकर pURI कर दिया जाएगा. हमारा सुझाव है कि आप SLDataFormat_MIME और SLDataLocator_URI डेटा स्ट्रक्चर आपके कोड को आइसोलेट करने के लिए, फ़ील्ड के नाम के बजाय, ब्रैकेट के साथ कॉमा लगाकर अलग की गई वैल्यू की सूची इस बदलाव से. उदाहरण कोड में इस तकनीक का इस्तेमाल किया गया है.
  • SL_DATAFORMAT_PCM, ऐप्लिकेशन को यह बताने की अनुमति नहीं देता है कि डेटा को हस्ताक्षर किए गए पूर्णांक, बिना साइन वाले पूर्णांक या फ़्लोटिंग-पॉइंट के तौर पर दिखाना. Android को लागू करना मानता है कि 8-बिट डेटा, साइन नहीं किया गया पूर्णांक है और 16-बिट साइन किया हुआ पूर्णांक है. इसके अलावा, फ़ील्ड samplesPerSec का मतलब गलत है, क्योंकि असल इकाइयां मिलीसेकंड में होती हैं. ये समस्याएं हो सकती हैं अगले OpenSL ES वर्शन में इसके बारे में ही बताया जाएगा. इसमें, बढ़ाया गया नया PCM डेटा शामिल किया जाएगा फ़ॉर्मैट, जो ऐप्लिकेशन को साफ़ तौर पर प्रतिनिधित्व की जानकारी देने और सही करने के लिए फ़ील्ड का नाम. हालांकि, यह डेटा का नया फ़ॉर्मैट होगा और पीसीएम का मौजूदा डेटा फ़ॉर्मैट अब भी उपलब्ध (हालांकि यह अब सेवा में नहीं है), लेकिन इसके लिए आपके कोड में तुरंत बदलाव करने की ज़रूरत नहीं होनी चाहिए.