Android 14, ডেভেলপার API প্রদান করে যা অ্যাপগুলি USB অডিও প্লেব্যাকের জন্য পছন্দের মিক্সার অ্যাট্রিবিউট কোয়েরি ও কনফিগার করতে ব্যবহার করতে পারে। এই পছন্দের মিক্সার অ্যাট্রিবিউট অ্যাপকে অডিও ফর্ম্যাট, চ্যানেল মাস্ক, স্যাম্পেল রেট ও মিক্সার আচরণ সেট করতে দিয়ে USB অডিও প্লেব্যাক অভিজ্ঞতা উন্নত করে। কাজ করে এমন USB ডিভাইসে পছন্দের মিক্সার API ব্যবহার করে, ব্যবহারকারীরা কম-লেটেন্সি অডিও প্লেব্যাক এবং উচ্চ-রেজোলিউশন অডিও কন্টেন্ট পেতে পারেন।
এছাড়াও, এই ফিচার USB ডিভাইসের জন্য ঐচ্ছিক বিট-পারফেক্ট প্লেব্যাক মিক্সার বিহেভিয়ারের ক্ষেত্রে সহায়তা প্রদান করে। বিট-পারফেক্ট মোড, মাস্টার কোয়ালিটি অথেন্টিকেটেড (MQA) এবং ডাইরেক্ট স্ট্রিম ডিজিটাল (DSD) ফর্ম্যাটের প্লেব্যাককে মানানসই ডিজিটাল থেকে অ্যানালগ কনভার্টার (DAC)-এ চালু করে।
ইন্টারফেস
ফ্রেমওয়ার্কে অডিও নীতি ম্যানেজার মিক্সার অ্যাট্রিবিউট ম্যানেজ করে। The
AudioMixerAttributes
ক্লাসটি মিক্সারের অ্যাট্রিবিউটকে বোঝায়। AudioMixerAttributes ক্লাসে একটি
AudioFormat
অবজেক্ট অন্তর্ভুক্ত থাকে যা মিক্সারের জন্য অডিও ডেটা ফর্ম্যাট, চ্যানেল মাস্ক এবং স্যাম্পেল রেট
বর্ণনা করে। ডিফল্ট হিসেবে, ফ্রেমওয়ার্ক মিক্সারের আচরণ নির্ধারণ করে, যা
সব অডিও সোর্স মিক্স করে এবং ভলিউম কন্ট্রোল ও এফেক্ট প্রয়োগ করে।
মিক্সার বিহেভিয়ার BIT_PERFECT মোড ব্যবহার করলে, সিস্টেম অডিও ফ্রেমওয়ার্ক, HAL এবং ঐচ্ছিকভাবে ডিজিটাল সিগনাল প্রসেসর (DSP) ব্যবহার করে API থেকে USB ডিভাইস পর্যন্ত কোনও পরিবর্তন না করেই অডিও কন্টেন্ট পাঠায়। BIT_PERFECT
মোড MQA বা DSD-এর মতো এনকোড করা ফর্ম্যাট সাপোর্ট করে, যার উপর কোনও
ভলিউম স্কেলিং বা মিক্সিং ডেটার অর্থ নষ্ট করে দিতে পারে।
অ্যাপ মিক্সার অ্যাট্রিবিউট কনফিগার করলে, ফ্রেমওয়ার্ক নতুন অ্যাট্রিবিউট সহ আউটপুট স্ট্রিম আবার খোলে, যদি প্রয়োজন হয়। মিক্সার অ্যাট্রিবিউট সেট করা হলে, নিম্নলিখিত ছবিতে অ্যাপ, ফ্রেমওয়ার্ক ও HAL-এর মধ্যে ইন্টারফেস দেখানো হয়েছে:
ছবি ১. অ্যাপ, ফ্রেমওয়ার্ক ও HAL-এর মধ্যে ইন্টারফেস।
প্রয়োগ
Android 14-এর জন্য USB অডিওর ক্ষেত্রে BIT_PERFECT
অ্যাট্রিবিউট ছাড়া পছন্দের মিক্সার অ্যাট্রিবিউট প্রয়োগ করা বাধ্যতামূলক।
পছন্দসই মিক্সার অ্যাট্রিবিউট
পছন্দের মিক্সার অ্যাট্রিবিউট সাপোর্ট করতে, ভেন্ডরদের অবশ্যই ডাইনামিক মিক্স পোর্টে USB ডিভাইস রাউটিং সাপোর্ট করতে হবে, যেমন:
usb_audio_policy_configuration.xml-এ ডায়নামিক মিক্স পোর্ট নির্ধারণ করুন।অডিও নীতি কনফিগারেশন অথবা
getAudioPortsএবংgetAudioRoutesAIDL পদ্ধতিতে ডাইনামিক মিক্স পোর্টে USB ডিভাইস রুট করার ক্ষমতা ঘোষণা করুন।
hardware/libhardware/modules/usbaudio-এর অধীনে USB অডিও HAL-এর রেফারেন্স প্রয়োগ দেখুন।
frameworks/av/services/audiopolicy/config/usb_audio_policy_configuration.xml-এ ডায়নামিক মিক্স পোর্টের উদাহরণ দেখুন।
বিট-পারফেক্ট প্লেব্যাক অ্যাট্রিবিউট
বিট-পারফেক্ট প্লেব্যাক অ্যাট্রিবিউট ঐচ্ছিক এবং এটি শুধুমাত্র Audio HAL-এর AIDL
ইমপ্লিমেন্টেশনে কাজ করে। বিট-পারফেক্ট প্লেব্যাক সাপোর্ট করার জন্য, ভেন্ডরদের অবশ্যই
বিট-পারফেক্ট আউটপুট ফ্ল্যাগ AUDIO_OUTPUT_FLAG_BIT_PERFECT ডাইনামিক মিক্স পোর্টে
যোগ করতে হবে যা USB ডিভাইসে রুট করা যেতে পারে।
নিচের কোড স্যাম্পেল থেকে AUDIO_OUTPUT_FLAG_BIT_PERFECT
ফ্ল্যাগ usb_audio_policy_configuration.xml-এর ব্যবহার সম্পর্কে জানতে পারবেন:
<module name="usb" halVersion="2.0">
<mixPorts>
<mixPort name="hifi_output"
role="source" flags="AUDIO_OUTPUT_FLAG_BIT_PERFECT">
</mixPort>
</mixPorts>
<devicePorts>
<devicePort tagName="USB Device Out"
type="AUDIO_DEVICE_OUT_USB_DEVICE" role="sink">
</devicePort>
</devicePorts>
<routes>
<route type="mix" sink="USB Device Out"
sources="hifi_output"/>
</routes>
</module>
বিট-পারফেক্ট প্লেব্যাক অ্যাট্রিবিউট নির্দিষ্ট করা থাকলে, HAL-কে নিশ্চিত করতে হবে যে অডিও স্ট্রিম কোনও পরিবর্তন ছাড়াই USB ডিভাইসে পাঠানো হয়েছে, অর্থাৎ, অডিও স্ট্রিমে কোনও ভলিউম স্কেলিং, স্যাম্পেল রেট কনভার্সন বা অডিও প্রসেসিং এফেক্ট থাকা চলবে না এবং DSP-তে মিক্স করা যাবে না। এই ক্ষেত্রে, হার্ডওয়্যার ভলিউম নিয়ন্ত্রণ করে কারণ ফ্রেমওয়ার্ক কোনও সফ্টওয়্যার ভলিউম কন্ট্রোল প্রদান করে না।
যাচাইকরণ
USB ডিভাইসের জন্য পছন্দসই মিক্সার অ্যাট্রিবিউট কাজ করে কিনা তা যাচাই করতে
PreferredMixerAttributesTestActivity.java
CTS টেস্ট চালান।
BIT_PERFECT অ্যাট্রিবিউটের প্রয়োগ যাচাই করতে, পালস-কোড মডুলেশন (PCM) অডিও ফর্ম্যাটে MQA ও DSD কাজ করে এমন USB DAC ব্যবহার করুন।