অডিও এফেক্ট

Android 11 থেকে শুরু করে, ডিভাইস প্রস্তুতকারকদের কাছে অটোমেটিক অ্যাটাচ করার এবং নির্দিষ্ট অডিও এফেক্ট চালু করার ক্ষমতা আছে, যখন কোনও প্রদত্ত অডিও ডিভাইস অডিও ক্যাপচার বা প্লেব্যাকের জন্য বেছে নেওয়া হয়। একটি বড় উন্নতি হল যে অডিও পাথে ঢোকানো অডিও এফেক্ট সম্পূর্ণরূপে অডিও HAL-এর নিচে প্রয়োগ করা হয়েছে (একটি ইনপুট ডিভাইস এবং একটি আউটপুট ডিভাইসের মধ্যে সরাসরি সংযোগ) অডিও এফেক্ট ফ্রেমওয়ার্ক দ্বারা নিয়ন্ত্রণ করা যেতে পারে।

এই ফিচারটি মূলত অটোমোটিভ OEM-এর জন্য তৈরি করা হয়েছে, তবে অন্যান্য Android ফর্ম ফ্যাক্টরেও ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, অডিও ডিএসপি-র মাধ্যমে স্পিকারের সাথে সরাসরি কানেক্ট করা হলে, অ্যাপটি এফএম টিউনার আউটপুটে ভয়েস এনহ্যান্সমেন্ট এফেক্ট যোগ করে।

পূর্বশর্ত

  • অন্য যেকোনও অডিও এফেক্টের মতো, এই এফেক্টটি অবশ্যই একটি ভেন্ডর লাইব্রেরি দ্বারা প্রয়োগ করা উচিত এবং audio_effects.xml কনফিগারেশন ফাইলে তালিকাভুক্ত করা উচিত।
  • এফেক্টটি অবশ্যই প্রিপ্রসেসিং বা পোস্টপ্রসেসিং ধরনের হতে হবে (EffectDescriptor.flags-এ সেট করা ফ্ল্যাগ TYPE_PRE_PROC বা TYPE_POST_PROC)।
  • ইফেক্ট প্রয়োগ HW অ্যাক্সিলারেটেড হলে (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>
  

সিস্টেম API ব্যবহার করা

ডিভাইস এফেক্ট তৈরি ও চালু করতে android.media.audiofx.AudioEffect ক্লাসে একটি নতুন @SystemApi কনস্ট্রাক্টর যোগ করা হয়েছে:

AudioEffect(@NonNull UUID uuid, @NonNull AudioDeviceAttributes device);

অনন্য অডিও এফেক্ট আইডি ও অডিও ডিভাইস ডেসক্রিপ্টর নির্দিষ্ট করার মাধ্যমে এফেক্ট তৈরি করার পরে, সেটি আগে থেকে থাকা AudioEffect API-এর সাহায্যে চালু বা বন্ধ করা যেতে পারে।

কোনও ইমপ্লিমেন্টেশন প্রদত্ত ডিভাইস/এফেক্ট কম্বিনেশনের সাথে কাজ করে কিনা তা কোয়েরি করার জন্য একটি 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 হতে হবে।
  • session যদি AudioSessionConsts.DEVICE হয়, তাহলে AudioIoHandle উপেক্ষা করা হয়।
  • device-কে অডিও ফ্রেমওয়ার্কের দেওয়া অনন্য AudioPortHandle -এর মাধ্যমে শনাক্ত করা হয়, যখন IDevice::createAudioPatch() পদ্ধতি সহ অডিও HAL-এ ডিভাইসটি বেছে নেওয়া হয়।

Audio HAL

ডিভাইস এফেক্ট ফিচার কাজ করানোর জন্য, অডিও HAL-কে IDevice::createAudioPatch() API ব্যবহার করে অডিও রাউটিং কন্ট্রোল প্রয়োগ করতে হবে। এটি IDevice::supportsAudioPatches() পদ্ধতি রিপোর্টিং true দ্বারা নির্দেশিত হয়।

দুটি নতুন API পদ্ধতি, IDevice::addDeviceEffect(AudioPortHandle device, uint64_t effectId) এবং IDevice::removeDeviceEffect(AudioPortHandle device, uint64_t effectId) HAL ইমপ্লিমেন্টেশনকে জানায় যে কোনও প্রদত্ত ডিভাইসে ডিভাইস এফেক্ট চালু বা বন্ধ করা হয়েছে।

AudioPortHandle আইডি দিয়ে ডিভাইসকে শনাক্ত করা হয়, যা IDevice::createAudioPatch() পদ্ধতি ব্যবহার করে অডিও প্যাচ তৈরি করার সময় ব্যবহার করা হয়।

কোনও এফেক্ট চালু বা বন্ধ করা হলে, অডিও এবং এফেক্ট HAL-এর মধ্যে কোঅর্ডিনেশন প্রয়োজন হলে, কোনও ইমপ্লিমেন্টেশন Audio HAL API ব্যবহার করতে পারে।