आरंभ करें

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

इस सेक्शन में, OpenSL ES एपीआई का इस्तेमाल शुरू करने के लिए ज़रूरी जानकारी दी गई है.

अपने ऐप्लिकेशन में OpenSL ES जोड़ें

C और C++, दोनों तरह के कोड से OpenSL ES को कॉल किया जा सकता है. अपने ऐप्लिकेशन में मुख्य OpenSL ES सुविधा जोड़ने के लिए, OpenSLES.h हेडर फ़ाइल शामिल करें:

#include <SLES/OpenSLES.h>

OpenSL ES Android एक्सटेंशन भी जोड़ने के लिए, OpenSLES_Android.h हेडर फ़ाइल शामिल करें:

#include <SLES/OpenSLES_Android.h>

OpenSLES_Android.h हेडर फ़ाइल शामिल करने पर, ये हेडर अपने-आप शामिल हो जाते हैं:

#include <SLES/OpenSLES_AndroidConfiguration.h>
#include <SLES/OpenSLES_AndroidMetadata.h>

ध्यान दें: ये हेडर ज़रूरी नहीं हैं, लेकिन इन्हें एपीआई को सीखने में मदद के तौर पर दिखाया गया है.

बिल्ड और डीबग करना

OpenSL ES को अपने बिल्ड में शामिल करने के लिए, Android.mk फ़ाइल में इसके बारे में बताएं. यह फ़ाइल, NDK बिल्ड सिस्टम की मेकफ़ाइलों में से एक है. Android.mk में यह लाइन जोड़ें:

LOCAL_LDLIBS += -lOpenSLES

बेहतर तरीके से डीबग करने के लिए, हमारा सुझाव है कि आप SLresult वैल्यू की जांच करें. यह वैल्यू, ज़्यादातर OpenSL ES एपीआई दिखाते हैं. डीबग करने के लिए, असर्ट या गड़बड़ी को मैनेज करने के बेहतर लॉजिक का इस्तेमाल किया जा सकता है. हालांकि, इनमें से कोई भी OpenSL ES के साथ काम करने के लिए कोई खास फ़ायदा नहीं देता. हालांकि, किसी खास इस्तेमाल के उदाहरण के लिए, इनमें से कोई एक ज़्यादा सही हो सकता है.

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

एपीआई की कई गड़बड़ियों की वजह से, नतीजे का कोड शून्य के अलावा कुछ और दिखता है. साथ ही, लॉग में भी गड़बड़ी की जानकारी दिखती है. ऐसी लॉग एंट्री से ज़्यादा जानकारी मिल सकती है. यह जानकारी, Engine::CreateAudioPlayer जैसे मुश्किल एपीआई के लिए खास तौर पर मददगार होती है.

लॉग को कमांड लाइन या Android Studio से देखा जा सकता है. कमांड लाइन से लॉग की जांच करने के लिए, यह टाइप करें:

$ adb logcat

Android Studio में लॉग की जांच करने के लिए, व्यू > टूल विंडो > Logcat चुनें. ज़्यादा जानकारी के लिए, Logcat की मदद से लॉग लिखना और देखना लेख पढ़ें.

कोड का उदाहरण

हमारा सुझाव है कि आप काम करने वाले और जांचे गए उदाहरण कोड का इस्तेमाल करें. इस कोड को अपने कोड के लिए मॉडल के तौर पर इस्तेमाल किया जा सकता है. यह कोड, android-ndk GitHub रिपॉज़िटरी के audio-echo और native-audio फ़ोल्डर में मौजूद है.

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

ऑडियो कन्‍टैंट

अपने ऐप्लिकेशन के लिए ऑडियो कॉन्टेंट को पैकेज करने के कई तरीके हैं. इनमें से कुछ तरीके यहां दिए गए हैं:

  • रिसॉर्स: अपनी ऑडियो फ़ाइलों को res/raw/ फ़ोल्डर में डालकर, Resources के लिए उनसे जुड़े एपीआई से उन्हें आसानी से ऐक्सेस किया जा सकता है. हालांकि, संसाधनों का सीधा नेटिव ऐक्सेस नहीं है. इसलिए, इस्तेमाल करने से पहले उन्हें कॉपी करने के लिए, आपको Java प्रोग्रामिंग भाषा का कोड लिखना होगा.
  • ऐसेट: अपनी ऑडियो फ़ाइलों को assets/ फ़ोल्डर में रखने पर, उन्हें Android के नेटिव ऐसेट मैनेजर एपीआई से सीधे ऐक्सेस किया जा सकता है. इन एपीआई के बारे में ज़्यादा जानकारी के लिए, हेडर फ़ाइलें android/asset_manager.h और android/asset_manager_jni.h देखें. उदाहरण के लिए, android-ndk GitHub रिपॉज़िटरी में मौजूद कोड, Android फ़ाइल डिस्क्रिप्टर डेटा लोकेटर के साथ इन नेटिव ऐसेट मैनेजर एपीआई का इस्तेमाल करता है.
  • नेटवर्क: यूआरआई डेटा लोकेटर का इस्तेमाल करके, सीधे नेटवर्क से ऑडियो कॉन्टेंट चलाया जा सकता है. हालांकि, सुरक्षा और अनुमतियां ज़रूर पढ़ें.
  • लोकल फ़ाइल सिस्टम: यूआरआई डेटा लोकेटर, लोकल फ़ाइलों के लिए file: स्कीम के साथ काम करता है. हालांकि, इसके लिए ज़रूरी है कि फ़ाइलों को ऐप्लिकेशन ऐक्सेस कर सके. ध्यान दें कि Android के सुरक्षा फ़्रेमवर्क में, Linux यूज़र आईडी और ग्रुप आईडी के ज़रिए फ़ाइल को ऐक्सेस करने पर पाबंदी है.
  • रिकॉर्ड किया गया: आपका ऐप्लिकेशन, माइक्रोफ़ोन इनपुट से ऑडियो डेटा रिकॉर्ड कर सकता है, इस कॉन्टेंट को स्टोर कर सकता है, और फिर उसे बाद में चला सकता है. उदाहरण के तौर पर दिए गए कोड में, वीडियो चलाएं क्लिप के लिए इस तरीके का इस्तेमाल किया जाता है.
  • कंप्यूट और लिंक किए गए इनलाइन: अपने ऑडियो कॉन्टेंट को सीधे शेयर की गई लाइब्रेरी से लिंक किया जा सकता है. इसके बाद, बफ़र सूची के डेटा लोकेटर वाले ऑडियो प्लेयर का इस्तेमाल करके, इसे चलाया जा सकता है. यह तरीका, कम अवधि वाली PCM फ़ॉर्मैट वाली क्लिप के लिए सबसे सही है. उदाहरण के तौर पर दिए गए कोड में, नमस्ते और Android क्लिप के लिए इस तकनीक का इस्तेमाल किया गया है. bin2c टूल (इसे उपलब्ध नहीं कराया गया है) का इस्तेमाल करके, पीसीएम डेटा को हेक्स स्ट्रिंग में बदला गया था.
  • रीयल-टाइम सिंथेसिस: आपका ऐप्लिकेशन, फ़्लाई पर PCM डेटा को सिंथेसाइज़ कर सकता है और फिर उसे बफ़र कतार डेटा लोकेटर वाले ऑडियो प्लेयर का इस्तेमाल करके चला सकता है. यह ज़्यादा ऐडवांस तकनीक है. ऑडियो सिंथेसिस की जानकारी इस लेख में नहीं दी गई है.

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

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

कोड के सैंपल

ये सैंपल ऐप्लिकेशन, हमारे GitHub पेज पर उपलब्ध हैं:

  • audio-echo इनपुट से आउटपुट तक राउंड ट्रिप लूप बनाता है.
  • नेटिव-ऑडियो एक सामान्य ऑडियो रिकॉर्डर/प्लेयर है.

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

रेफ़रंस स्पेसिफ़िकेशन और Android के लागू होने के बीच के अंतर के बारे में ज़्यादा जानकारी के लिए, Android के लिए OpenSL ES देखें.