সতর্কতা: OpenSL ES অবচিত হয়েছে। ডেভেলপারদের ওপেন সোর্স Oboe লাইব্রেরি ব্যবহার করা উচিত যা GitHub এ উপলব্ধ। Oboe হল একটি C++ র্যাপার যা একটি API প্রদান করে যা AAudio-এর সাথে সাদৃশ্যপূর্ণ। AAudio উপলব্ধ থাকলে Oboe AAudio-কে কল করে এবং AAudio উপলব্ধ না হলে OpenSL ES-এ ফিরে আসে৷
এই বিভাগটি OpenSL ES API ব্যবহার শুরু করার জন্য প্রয়োজনীয় তথ্য প্রদান করে।
আপনার অ্যাপে OpenSL ES যোগ করুন
আপনি C এবং C++ উভয় কোড থেকে OpenSL ES কল করতে পারেন। আপনার অ্যাপে মূল OpenSL ES বৈশিষ্ট্য সেট যোগ করতে, OpenSLES.h
হেডার ফাইলটি অন্তর্ভুক্ত করুন:
#include <SLES/OpenSLES.h>
OpenSL ES অ্যান্ড্রয়েড এক্সটেনশন যোগ করতে, OpenSLES_Android.h
হেডার ফাইলটি অন্তর্ভুক্ত করুন:
#include <SLES/OpenSLES_Android.h>
যখন আপনি OpenSLES_Android.h
হেডার ফাইলটি অন্তর্ভুক্ত করেন, নিম্নলিখিত শিরোনামগুলি স্বয়ংক্রিয়ভাবে অন্তর্ভুক্ত হয়:
#include <SLES/OpenSLES_AndroidConfiguration.h> #include <SLES/OpenSLES_AndroidMetadata.h>
দ্রষ্টব্য: এই শিরোনামগুলির প্রয়োজন নেই, তবে API শেখার জন্য একটি সহায়ক হিসাবে দেখানো হয়েছে৷
বিল্ড এবং ডিবাগ
আপনি Android.mk
ফাইলে এটি নির্দিষ্ট করে আপনার বিল্ডে OpenSL ES অন্তর্ভুক্ত করতে পারেন যা NDK বিল্ড সিস্টেমের মেকফাইলগুলির মধ্যে একটি হিসাবে কাজ করে। Android.mk
তে নিম্নলিখিত লাইন যোগ করুন:
LOCAL_LDLIBS += -lOpenSLES
শক্তিশালী ডিবাগিংয়ের জন্য, আমরা সুপারিশ করি যে আপনি SLresult
মান পরীক্ষা করুন যা বেশিরভাগ OpenSL ES API গুলি ফেরত দেয়। ডিবাগিংয়ের জন্য আপনি দাবী বা আরও উন্নত ত্রুটি-হ্যান্ডলিং যুক্তি ব্যবহার করতে পারেন; কোনটিই OpenSL ES এর সাথে কাজ করার জন্য একটি অন্তর্নিহিত সুবিধা প্রদান করে না, যদিও একটি বা অন্যটি প্রদত্ত ব্যবহারের ক্ষেত্রে আরও উপযুক্ত হতে পারে।
আমরা আমাদের উদাহরণগুলিতে দাবী ব্যবহার করি, কারণ তারা অবাস্তব অবস্থাগুলি ধরতে সাহায্য করে যা একটি কোডিং ত্রুটি নির্দেশ করে। উৎপাদনে ঘটতে পারে এমন অন্যান্য অবস্থার জন্য আমরা স্পষ্ট ত্রুটি হ্যান্ডলিং ব্যবহার করেছি।
অনেক API ত্রুটির ফলে একটি লগ এন্ট্রি হয়, একটি অ-শূন্য ফলাফল কোড ছাড়াও। এই ধরনের লগ এন্ট্রি অতিরিক্ত বিশদ প্রদান করতে পারে যা Engine::CreateAudioPlayer
এর মতো তুলনামূলকভাবে জটিল API-এর জন্য বিশেষভাবে উপযোগী প্রমাণ করে।
আপনি কমান্ড লাইন বা অ্যান্ড্রয়েড স্টুডিও থেকে লগ দেখতে পারেন। কমান্ড লাইন থেকে লগ পরীক্ষা করতে, নিম্নলিখিত টাইপ করুন:
$ adb logcat
অ্যান্ড্রয়েড স্টুডিও থেকে লগ পরীক্ষা করতে, দেখুন > টুল উইন্ডোজ > লগক্যাট নির্বাচন করুন। আরও তথ্যের জন্য, Logcat দিয়ে লগ লিখুন এবং দেখুন দেখুন ।
উদাহরণ কোড
আমরা সমর্থিত এবং পরীক্ষিত উদাহরণ কোড ব্যবহার করার পরামর্শ দিই যা আপনার নিজের কোডের মডেল হিসাবে ব্যবহারযোগ্য, যা android-ndk GitHub সংগ্রহস্থলের অডিও-ইকো এবং নেটিভ-অডিও ফোল্ডারে অবস্থিত।
সতর্কতা: OpenSL ES 1.0.1 স্পেসিফিকেশনে পরিশিষ্টে উদাহরণ কোড রয়েছে (আরো বিশদ বিবরণের জন্য Khronos OpenSL ES রেজিস্ট্রি দেখুন)। যাইহোক, পরিশিষ্ট B এর উদাহরণ: নমুনা কোড এবং পরিশিষ্ট C: কেস নমুনা কোড ব্যবহার করুন এমন বৈশিষ্ট্যগুলি ব্যবহার করে যা Android দ্বারা সমর্থিত নয়। কিছু উদাহরণে টাইপোগ্রাফিকাল ত্রুটিও রয়েছে, বা পরিবর্তন হতে পারে এমন API ব্যবহার করুন। এগুলি উল্লেখ করার সময় সতর্কতার সাথে এগিয়ে যান; যদিও কোডটি সম্পূর্ণ OpenSL ES স্ট্যান্ডার্ড বোঝার জন্য সহায়ক হতে পারে, তবে এটি অ্যান্ড্রয়েডের মতো ব্যবহার করা উচিত নয়।
অডিও বিষয়বস্তু
আপনার অ্যাপ্লিকেশানের জন্য অডিও সামগ্রী প্যাকেজ করার অনেক উপায়গুলির মধ্যে কয়েকটি নিম্নরূপ:
- সম্পদ : আপনার অডিও ফাইলগুলিকে
res/raw/
ফোল্ডারে রেখে, সেগুলিকেResources
জন্য সংশ্লিষ্ট API দ্বারা সহজেই অ্যাক্সেস করা যেতে পারে। যাইহোক, রিসোর্সগুলিতে সরাসরি নেটিভ অ্যাক্সেস নেই, তাই আপনাকে অবশ্যই জাভা প্রোগ্রামিং ল্যাঙ্গুয়েজ কোড লিখতে হবে যাতে ব্যবহারের আগে সেগুলি কপি করা যায়। - সম্পদ :
assets/
ফোল্ডারে আপনার অডিও ফাইল স্থাপন করে, সেগুলি সরাসরি Android নেটিভ অ্যাসেট ম্যানেজার API-এর মাধ্যমে অ্যাক্সেসযোগ্য। এই API গুলি সম্পর্কে আরও তথ্যের জন্যandroid/asset_manager.h
এবংandroid/asset_manager_jni.h
শিরোনাম ফাইলগুলি দেখুন৷ অ্যান্ড্রয়েড-এনডিকে গিটহাব রিপোজিটরিতে অবস্থিত উদাহরণ কোডটি এই নেটিভ অ্যাসেট ম্যানেজার এপিআইগুলিকে অ্যান্ড্রয়েড ফাইল বর্ণনাকারী ডেটা লোকেটারের সাথে ব্যবহার করে। - নেটওয়ার্ক : আপনি সরাসরি নেটওয়ার্ক থেকে অডিও সামগ্রী চালাতে URI ডেটা লোকেটার ব্যবহার করতে পারেন। যাইহোক, নিরাপত্তা এবং অনুমতি পড়তে ভুলবেন না।
- স্থানীয় ফাইল সিস্টেম : ইউআরআই ডেটা লোকেটার
file:
স্থানীয় ফাইলগুলির জন্য স্কিম, যদি ফাইলগুলি অ্যাপ্লিকেশন দ্বারা অ্যাক্সেসযোগ্য হয়। মনে রাখবেন যে অ্যান্ড্রয়েড নিরাপত্তা কাঠামো লিনাক্স ব্যবহারকারী আইডি এবং গ্রুপ আইডি প্রক্রিয়ার মাধ্যমে ফাইল অ্যাক্সেস সীমাবদ্ধ করে। - রেকর্ড করা : আপনার অ্যাপ্লিকেশন মাইক্রোফোন ইনপুট থেকে অডিও ডেটা রেকর্ড করতে পারে, এই বিষয়বস্তু সঞ্চয় করতে পারে এবং পরে এটিকে আবার চালাতে পারে। উদাহরণ কোড প্লেব্যাক ক্লিপ জন্য এই পদ্ধতি ব্যবহার করে.
- সংকলিত এবং লিঙ্ক ইনলাইন : আপনি আপনার অডিও বিষয়বস্তু সরাসরি শেয়ার্ড লাইব্রেরিতে লিঙ্ক করতে পারেন, এবং তারপর একটি বাফার কিউ ডেটা লোকেটার সহ একটি অডিও প্লেয়ার ব্যবহার করে এটি চালাতে পারেন৷ এটি ছোট পিসিএম ফরম্যাট ক্লিপগুলির জন্য সবচেয়ে উপযুক্ত। উদাহরণ কোডটি হ্যালো এবং অ্যান্ড্রয়েড ক্লিপগুলির জন্য এই কৌশলটি ব্যবহার করে। পিসিএম ডেটা একটি
bin2c
টুল ব্যবহার করে হেক্স স্ট্রিংয়ে রূপান্তরিত হয়েছিল (সরবরাহ করা হয়নি)। - রিয়েল-টাইম সংশ্লেষণ : আপনার অ্যাপ্লিকেশনটি ফ্লাইতে পিসিএম ডেটা সংশ্লেষিত করতে পারে এবং তারপরে বাফার কিউ ডেটা লোকেটার সহ একটি অডিও প্লেয়ার ব্যবহার করে এটি চালাতে পারে। এটি একটি অপেক্ষাকৃত উন্নত কৌশল, এবং অডিও সংশ্লেষণের বিশদ বিবরণ এই নিবন্ধের সুযোগের বাইরে।
দ্রষ্টব্য: আপনার অ্যাপ্লিকেশনের জন্য দরকারী অডিও সামগ্রী সন্ধান করা বা তৈরি করা এই নিবন্ধের সুযোগের বাইরে। আপনি আরও তথ্যের সন্ধান করতে ইন্টারেক্টিভ অডিও , গেম অডিও , সাউন্ড ডিজাইন এবং অডিও প্রোগ্রামিংয়ের মতো ওয়েব অনুসন্ধান শব্দগুলি ব্যবহার করতে পারেন।
সতর্কতা: এটা নিশ্চিত করা আপনার দায়িত্ব যে আপনি আইনত কন্টেন্ট প্লে বা রেকর্ড করার অনুমতি পেয়েছেন। বিষয়বস্তু রেকর্ড করার জন্য গোপনীয়তার বিবেচনা থাকতে পারে।
কোড নমুনা
এই নমুনা অ্যাপ্লিকেশনগুলি আমাদের GitHub পৃষ্ঠায় উপলব্ধ:
- অডিও-ইকো একটি ইনপুট-টু-আউটপুট রাউন্ডট্রিপ লুপ তৈরি করে।
- নেটিভ-অডিও একটি সাধারণ অডিও রেকর্ডার/প্লেয়ার।
OpenSL ES-এর Android NDK বাস্তবায়ন ওপেনএসএল ES 1.0.1-এর রেফারেন্স স্পেসিফিকেশন থেকে অনেক ক্ষেত্রে আলাদা। এই পার্থক্যগুলি হল একটি গুরুত্বপূর্ণ কারণ যে নমুনা কোডটি আপনি সরাসরি OpenSL ES রেফারেন্স স্পেসিফিকেশন থেকে কপি করেন আপনার Android অ্যাপে কাজ নাও করতে পারে।
রেফারেন্স স্পেসিফিকেশন এবং অ্যান্ড্রয়েড বাস্তবায়নের মধ্যে পার্থক্য সম্পর্কে আরও তথ্যের জন্য, Android এর জন্য OpenSL ES দেখুন।