অ্যান্ড্রয়েড ১১ থেকে, ডিভাইস নির্মাতারা অডিও ক্যাপচার বা প্লেব্যাকের জন্য কোনো নির্দিষ্ট অডিও ডিভাইস নির্বাচন করা হলে, স্বয়ংক্রিয়ভাবে নির্দিষ্ট অডিও ইফেক্ট সংযুক্ত ও সক্রিয় করার ক্ষমতা পেয়েছেন। একটি প্রধান উন্নতি হলো, অডিও HAL (ইনপুট ডিভাইস এবং আউটপুট ডিভাইসের মধ্যে সরাসরি সংযোগ)-এর সম্পূর্ণ নিচে বাস্তবায়িত কোনো অডিও পাথে যুক্ত করা অডিও ইফেক্টগুলো এখন অডিও ইফেক্টস ফ্রেমওয়ার্ক দ্বারা নিয়ন্ত্রণ করা যাবে।
এই ফিচারটি মূলত অটোমোটিভ OEM-দের লক্ষ্য করে তৈরি করা হলেও, এটি অন্যান্য অ্যান্ড্রয়েড ফর্ম ফ্যাক্টরেও ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, অডিও DSP-এর মাধ্যমে সরাসরি স্পিকারের সাথে সংযুক্ত হলে এফএম টিউনার আউটপুটে একটি ভয়েস এনহ্যান্সমেন্ট এফেক্ট যুক্ত করা যায়।
পূর্বশর্ত
- অন্যান্য যেকোনো অডিও ইফেক্টের মতোই, ইফেক্টটি অবশ্যই কোনো ভেন্ডর লাইব্রেরি দ্বারা বাস্তবায়িত হতে হবে এবং
audio_effects.xmlকনফিগারেশন ফাইলে তালিকাভুক্ত থাকতে হবে। - ইফেক্টটি অবশ্যই প্রিপ্রসেসিং বা পোস্টপ্রসেসিং টাইপের হতে হবে (
EffectDescriptor.flagsফাইলেTYPE_PRE_PROCবাTYPE_POST_PROCফ্ল্যাগ সেট করা থাকলে)। - যদি এফেক্ট ইমপ্লিমেন্টেশনটি হার্ডওয়্যার অ্যাক্সিলারেটেড হয় (
EffectDescriptor.flagsফাইলেHW_ACC_TUNNELফ্ল্যাগ সেট করা থাকলে), তবে এটিকে HAL-এর সম্পূর্ণ নিচে সংযুক্ত একটি অডিও পাথের সাথে যুক্ত করা যেতে পারে (অডিও HAL-এ কোনো প্লেব্যাক বা ক্যাপচার অডিও স্ট্রিম খোলা হয় না)।
একটি ডিভাইস ইফেক্ট তৈরি এবং সক্রিয় করুন
নিচের দুটি পদ্ধতির যেকোনো একটি ব্যবহার করে ডিভাইস-নির্দিষ্ট অডিও এফেক্ট ইনস্ট্যানশিয়েট করা যায়।
একটি অডিও এফেক্টস কনফিগারেশন ফাইল ব্যবহার করুন
এই পদ্ধতির মাধ্যমে একটি নির্দিষ্ট ডিভাইসকে সিঙ্ক বা সোর্স হিসেবে নির্বাচন করে যেকোনো অডিও পাথে একটি অডিও ইফেক্ট পদ্ধতিগতভাবে সংযুক্ত ও সক্রিয় করা যায়।
এটি করার জন্য audio_effects.xml ফাইলে নিম্নরূপ একটি নির্দিষ্ট সেকশন যোগ করতে হয়:
<deviceEffects> <devicePort type="AUDIO_DEVICE_IN_BUILTIN_MIC" address="bottom"> <apply effect="agc"/> </devicePort> </deviceEffects>
একটি সিস্টেম এপিআই ব্যবহার করুন
ডিভাইস এফেক্ট তৈরি ও সক্রিয় করার জন্য android.media.audiofx.AudioEffect ক্লাসে একটি নতুন @SystemApi কনস্ট্রাক্টর যোগ করা হয়েছে:
AudioEffect(@NonNull UUID uuid, @NonNull AudioDeviceAttributes device);
অনন্য অডিও এফেক্ট আইডি এবং অডিও ডিভাইস ডেসক্রিপ্টর নির্দিষ্ট করে এফেক্টটি তৈরি করার পর, বিদ্যমান AudioEffect API ব্যবহার করে এটিকে সক্রিয় বা নিষ্ক্রিয় করা যায়।
কোনো ইমপ্লিমেন্টেশন একটি নির্দিষ্ট ডিভাইস/ইফেক্ট কম্বিনেশন সমর্থন করে কিনা, তা জিজ্ঞাসা করার জন্য একটি এপিআই-ও উপলব্ধ আছে।
static boolean isEffectSupportedForDevice( @NonNull UUID uuid, @NonNull AudioDeviceAttributes device);
নতুন HAL API
অডিও এফেক্ট HAL
অডিও ইফেক্ট HAL V6.0-এর createEffect() মেথডের একটি নতুন সিগনেচার রয়েছে, যা কোনো ডিভাইসের সাথে সংযুক্ত একটি ইফেক্ট তৈরি করার সুযোগ দেয়:
IEffectFactory::createEffect(Uuid uid, AudioSession session, AudioIoHandle ioHandle, AudioPortHandle device)
- নির্দিষ্ট
AudioSessionঅবশ্যইAudioSessionConsts.DEVICEহতে হবে। -
sessionAudioSessionConsts.DEVICEহলেAudioIoHandleউপেক্ষা করা হয়। -
IDevice::createAudioPatch()মেথড ব্যবহার করে অডিও HAL-এ ডিভাইসটি নির্বাচন করার সময়, অডিও ফ্রেমওয়ার্ক কর্তৃক নির্ধারিত এর অনন্যAudioPortHandleমাধ্যমেdeviceশনাক্ত করা হয়।
অডিও এইচএএল
ডিভাইস এফেক্ট ফিচারটি সমর্থন করার জন্য, অডিও HAL-কে অবশ্যই IDevice::createAudioPatch() API ব্যবহার করে অডিও রাউটিং কন্ট্রোল প্রয়োগ করতে হবে। IDevice::supportsAudioPatches() মেথডটির true রিপোর্ট করার মাধ্যমে এটি নির্দেশিত হয়।
দুটি নতুন API মেথড, IDevice::addDeviceEffect(AudioPortHandle device, uint64_t effectId) এবং IDevice::removeDeviceEffect(AudioPortHandle device, uint64_t effectId) HAL ইমপ্লিমেন্টেশনকে জানায় যে কোনো নির্দিষ্ট ডিভাইসে একটি ডিভাইস এফেক্ট চালু বা বন্ধ করা হয়েছে।
ডিভাইসটিকে তার AudioPortHandle ID দ্বারা শনাক্ত করা হয়, যা IDevice::createAudioPatch() মেথড ব্যবহার করে একটি অডিও প্যাচ তৈরি করার সময় ব্যবহৃত হয়।
কোনো ইফেক্ট চালু বা বন্ধ করার সময় অডিও এবং ইফেক্ট HAL-এর মধ্যে সমন্বয়ের প্রয়োজন হলে, কোনো ইমপ্লিমেন্টেশন অডিও HAL API ব্যবহার করতে পারে।