অডিও প্রভাব

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

এই বৈশিষ্ট্যটি প্রাথমিকভাবে স্বয়ংচালিত OEM গুলিকে লক্ষ্য করে তবে অন্যান্য Android ফর্ম ফ্যাক্টরগুলিতেও ব্যবহার করা যেতে পারে৷ একটি উদাহরণ অ্যাপ এফএম টিউনার আউটপুটে একটি ভয়েস বর্ধিত প্রভাব সন্নিবেশ করাচ্ছে যখন সরাসরি অডিও ডিএসপির মাধ্যমে স্পিকারের সাথে সংযুক্ত থাকে।

পূর্বশর্ত

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

একটি এপিআই ক্যোয়ারী করার জন্যও পাওয়া যায় যদি একটি ইমপ্লিমেন্টেশন একটি প্রদত্ত ডিভাইস/ইফেক্ট কম্বিনেশনকে সমর্থন করে।

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 দ্বারা নির্ধারিত অডিও পোর্টহ্যান্ডেল দ্বারা চিহ্নিত করা হয় যখন অডিও HAL-এ IDevice::createAudioPatch() পদ্ধতিতে ডিভাইসটি নির্বাচন করা হয়।

অডিও 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 ID দ্বারা চিহ্নিত করা হয়, যা IDevice::createAudioPatch() পদ্ধতিতে একটি অডিও প্যাচ তৈরি করা হলে ব্যবহৃত হয়।

অডিও HAL APIs একটি বাস্তবায়ন দ্বারা ব্যবহার করা যেতে পারে যদি কোনো প্রভাব সক্রিয় বা নিষ্ক্রিয় করা হলে অডিও এবং প্রভাব HAL-এর মধ্যে সমন্বয় প্রয়োজন হয়।

,

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

এই বৈশিষ্ট্যটি প্রাথমিকভাবে স্বয়ংচালিত OEM গুলিকে লক্ষ্য করে তবে অন্যান্য Android ফর্ম ফ্যাক্টরগুলিতেও ব্যবহার করা যেতে পারে৷ একটি উদাহরণ অ্যাপ এফএম টিউনার আউটপুটে একটি ভয়েস বর্ধিত প্রভাব সন্নিবেশ করাচ্ছে যখন সরাসরি অডিও ডিএসপির মাধ্যমে স্পিকারের সাথে সংযুক্ত থাকে।

পূর্বশর্ত

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

একটি এপিআই ক্যোয়ারী করার জন্যও পাওয়া যায় যদি একটি ইমপ্লিমেন্টেশন একটি প্রদত্ত ডিভাইস/ইফেক্ট কম্বিনেশনকে সমর্থন করে।

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 দ্বারা নির্ধারিত অডিও পোর্টহ্যান্ডেল দ্বারা চিহ্নিত করা হয় যখন অডিও HAL-এ IDevice::createAudioPatch() পদ্ধতিতে ডিভাইসটি নির্বাচন করা হয়।

অডিও 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 ID দ্বারা চিহ্নিত করা হয়, যা IDevice::createAudioPatch() পদ্ধতিতে একটি অডিও প্যাচ তৈরি করা হলে ব্যবহৃত হয়।

অডিও HAL APIs একটি বাস্তবায়ন দ্বারা ব্যবহার করা যেতে পারে যদি কোনো প্রভাব সক্রিয় বা নিষ্ক্রিয় করা হলে অডিও এবং প্রভাব HAL-এর মধ্যে সমন্বয় প্রয়োজন হয়।