অ্যান্ড্রয়েড ১৩ এবং এর পূর্ববর্তী সংস্করণগুলিতে, অডিও এইচএএল ইন্টারফেসটি HIDL ব্যবহার করে HIDL এইচএএল ফাইল (যার এক্সটেনশন .hal ) এবং কনফিগারেশন ফাইলের জন্য XSD স্কিমাতে সংজ্ঞায়িত করা হয়, যা নিম্নরূপ দেখানো হলো।

চিত্র ১. অডিও এইচএএল ইন্টারফেস।
কনফিগারেশন ফাইল
অডিও পলিসি এবং অডিও এফেক্টস এক্সএমএল কনফিগারেশন ফাইলগুলোকে অডিও HIDL HAL ইন্টারফেসের অংশ হিসেবে গণ্য করা হয়। এই ফাইলগুলোকে অবশ্যই তাদের স্কিমা মেনে চলতে হবে এবং VTS পরীক্ষার মাধ্যমে এই সঙ্গতি যাচাই করা হয়।
অডিও HIDL HAL বাস্তবায়নের অংশ হিসেবে, আপনাকে অবশ্যই একটি অডিও পলিসি কনফিগারেশন ফাইল তৈরি করতে হবে যা অডিও টপোলজি বর্ণনা করে। ফ্রেমওয়ার্কের ব্যবহারের জন্য অডিও HAL ক্যাপাবিলিটিগুলো অবশ্যই audio_policy_configuration.xml ফাইলে ঘোষণা করতে হবে।
অডিও HIDL HAL API
এই বিভাগে HIDL-এর জন্য Core, Effects, এবং Common HAL API-গুলো বর্ণনা করা হয়েছে।
কোর এইচএএল
HIDL ব্যবহার করে Core HAL-এর কয়েকটি প্রধান ইন্টারফেস নিচে দেওয়া হলো:
-
IDeviceFactory.halহলো এপিআই-তে প্রবেশের পথ। -
IDevice.halএবংIPrimaryDevice.halsetMasterVolumeবাopenInputStreamমতো মেথড রয়েছে। - স্ট্রিমগুলি একমুখী এবং AudioFlinger এগুলি ব্যবহার করে
IStream.hal,IStreamOut.hal, এবংIStreamIn.halমাধ্যমে HAL-এ অডিও পাঠায় বা গ্রহণ করে।
নিম্নলিখিত সারণিতে দরকারী Core HAL HIDL উপাদানগুলির অবস্থান তালিকাভুক্ত করা হয়েছে:
| কোর এইচএএল উপাদান | অবস্থান |
|---|---|
| এপিআই-এর সর্বশেষ সংস্করণ | /hardware/interfaces/audio/6.0 |
| সর্বশেষ কোর এইচএএল এপিআই-এর জন্য নির্দিষ্ট প্রকারগুলি | /hardware/interfaces/audio/6.0/types.hal |
| অডিও নীতি কনফিগারেশন ফাইল XSD স্কিমা | /hardware/interfaces/audio/6.0/config/audio_policy_configuration.xsd |
কোর HAL API-এর ডিফল্ট ইমপ্লিমেন্টেশন ( /hardware/interfaces/audio/core/all-versions/default/ ) হলো লিগ্যাসি শেয়ার্ড লাইব্রেরি ব্যবহার করে প্রি-ট্রেবল HAL ইমপ্লিমেন্টেশনের একটি র্যাপার। যেসব অডিও HAL সংস্করণ সরাসরি কার্নেল ড্রাইভারের সাথে কাজ করে, সেগুলোর নতুন সংস্করণ ইমপ্লিমেন্ট করার সময় এই ডিফল্ট ইমপ্লিমেন্টেশনটিকে একটি রেফারেন্স হিসেবেও বিবেচনা করা যেতে পারে।
HAL এর প্রভাব
নিম্নলিখিত সারণিতে HIDL ব্যবহার করে দরকারী Effects HAL উপাদানগুলির অবস্থান তালিকাভুক্ত করা হয়েছে:
| HAL উপাদানের প্রভাব | অবস্থান |
|---|---|
| এপিআই-এর সর্বশেষ সংস্করণ | /hardware/interfaces/audio/effect/6.0/ |
| প্রভাব কনফিগারেশন ফাইল XSD স্কিমা | /hardware/interfaces/audio/effect/6.0/xml/audio_effects_conf.xsd |
আরও তথ্যের জন্য, /hardware/interfaces/audio/effect/all-versions/default/ Effects HAL API-এর একটি নমুনা বাস্তবায়ন এবং Audio Effects বিভাগটি দেখুন।
কমন এইচএএল
HIDL ব্যবহার করে তৈরি কমন HAL API-তে নিম্নলিখিত বিষয়গুলো অন্তর্ভুক্ত রয়েছে:
- Core এবং Effect API-এর জন্য ব্যবহৃত সংজ্ঞাসমূহ (
/hardware/interfaces/audio/common/6.0/types.hal)। - ইমপ্লিমেন্টেশন, ক্লায়েন্ট এবং টেস্টের জন্য HIDL API-এর বিপরীতে কোডিং করতে সাহায্যকারী ইউটিলিটিগুলো (
/hardware/interfaces/audio/common/all-versions) ব্যবহৃত হয়।
অডিও এইচএএল ভি৭-এর আপডেট
এই বিভাগে যেমন উল্লেখ করা হয়েছে, অ্যান্ড্রয়েড ১২-এর অডিও এইচএএল (Audio HAL)-এর সংস্করণ ৭-এ উল্লেখযোগ্য পরিবর্তন আনা হয়েছে। অডিও এইচএএল ভি৭ (Audio HAL V7) নিম্নলিখিত কাজগুলো করে:
- ফ্রেমওয়ার্ক এবং HAL দ্বারা ব্যবহৃত ডেটা মডেলগুলোকে একীভূত করে।
- HIDL ডেটা টাইপ (এনাম) এবং অডিও পলিসি কনফিগারেশনের জন্য ব্যবহৃত XML স্কিমার মধ্যেকার পুনরাবৃত্তি হ্রাস করে।
বিশেষত, Audio HAL V7-এর নিম্নলিখিত ক্ষেত্রগুলিতে পরিবর্তন আনা হয়েছে:
এই পরিবর্তনগুলো তাদের নিজ নিজ বিভাগে আরও বিস্তারিতভাবে আলোচনা করা হয়েছে।
গণনা
Audio HAL V7 থেকে শুরু করে, Audio Policy Configuration ফাইলে ব্যবহৃত এনুমারেটেড টাইপগুলো শুধুমাত্র XSD স্কিমাতে সংজ্ঞায়িত করা হয়, HIDL-এ নয়।
Audio HAL V6-এ, types.hal এ থাকা enum টাইপের (যেমন AudioFormat ) মানগুলো অডিও পলিসি কনফিগারেশন ফাইলের XSD স্কিমাতেও সংজ্ঞায়িত করা থাকত, যা একটি পুনরাবৃত্তি তৈরি করত। V7-এ এটি এড়ানোর জন্য, enum টাইপগুলোকে string -এ পরিবর্তন করা হয়েছে এবং এর পরিবর্তে সমস্ত সম্ভাব্য এনুমারেশন মান XSD স্কিমাতে তালিকাভুক্ত করা হয়েছে।
চিত্র ২-এ V7-এ AudioFormat enum টাইপের কিছু পরিবর্তনের তুলনা করা হয়েছে:

চিত্র ২. AudioFormat enum-এ করা কিছু পরিবর্তনের তুলনা।
যে enum প্রকারগুলিকে string -এ রূপান্তর করা হয়েছে, তার জন্য নিম্নলিখিত তালিকাটি দেখুন:
-
AudioChannelMask -
AudioContentType -
AudioDevice: বিক্রেতা দ্বারা সম্প্রসারণযোগ্য -
AudioFormat: বিক্রেতা দ্বারা সম্প্রসারণযোগ্য -
AudioGainMode -
AudioSource -
AudioStreamType -
AudioUsage
স্ট্রিং এনাম মান পাস করুন
HAL ইন্টারফেস সীমানা জুড়ে এনুমারেশন ভ্যালু হিসেবে তথ্য স্থানান্তরের জন্য স্ট্রিং ভ্যালু ব্যবহার করা হয়। ফ্রেমওয়ার্ক এবং HAL র্যাপার উভয়ই বিজনেস লজিক বাস্তবায়নের জন্য ইন্টিজার এনুম ভ্যালু ব্যবহার করে এবং চিত্র ৩- এ বর্ণিত রূপান্তর পদ্ধতিটি প্রয়োগ করে:

চিত্র ৩. স্ট্রিং এনাম মান প্রেরণ করা।
উদাহরণস্বরূপ, ফ্রেমওয়ার্ক থেকে ভেন্ডরের কাছে অডিও ফরম্যাট টাইপের মান পাঠাতে:
-
libaudiohalএAudioFormatএর enum মানটিকে একটি স্ট্রিং মানে রূপান্তর করে HAL-এ পাঠানো হয়। - HAL-এর দিকে, ডিফল্ট র্যাপারটি স্ট্রিংটিকে একটি enum ভ্যালুতে রূপান্তর করে, যা লিগ্যাসি HAL-এ পাঠানো হয়।
এক্সএমএল স্কিমা পরিবর্তন
এক্সএমএল স্কিমা ডেফিনিশন (XSD)-এ এনাম ভ্যালুগুলোর সম্পূর্ণ তালিকা থাকলে VTS দ্বারা অডিও পলিসি কনফিগারেশন এক্সএমএল ফাইলের যাচাইকরণ আরও ভালোভাবে করা যায়। আমরা XSD-এর সাথে সামঞ্জস্যপূর্ণ করার জন্য HAL V7-এর সাথে ব্যবহৃত অডিও পলিসি কনফিগারেশন ফাইলে পরিবর্তন এনেছি।
V7-এ, অ্যাট্রিবিউটের (যেমন স্যাম্পলিং রেট, চ্যানেল মাস্ক এবং ফ্ল্যাগ) ভ্যালু লিস্ট আলাদা করতে V6 এবং তার আগের সংস্করণগুলোতে ব্যবহৃত , (কমা) এবং | (উল্লম্ব বার) চিহ্নের পরিবর্তে একটি সাধারণ ␣ (স্পেস) অক্ষর ব্যবহার করা হয়। নিচের উদাহরণে যেমন দেখা যাচ্ছে, channelMasks এর ভ্যালু লিস্ট আলাদা করতে একটি স্পেস ব্যবহার করা হয়েছে:
<profile channelMasks="AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_MONO" … />
প্রতীক পরিবর্তন করতে, update_audio_policy_config.sh নামক স্বয়ংক্রিয় রূপান্তর স্ক্রিপ্টটি ব্যবহার করুন। Pixel 5 (Redfin) ডিভাইসের জন্য একটি V6 অডিও পলিসি কনফিগারেশন ফাইলকে V7 সংস্করণে রূপান্তর করতে নিম্নলিখিত কমান্ডটি দেখুন:
hardware/interfaces/audio/7.0/config/update_audio_policy_config.sh \
device/google/redfin/audio/audio_policy_configuration.xml 6.0
ডেটা টাইপ
ডুপ্লিকেট ডেফিনিশন কমানোর জন্য আমরা V7-এ কিছু ডেটা স্ট্রাকচারকে নতুনভাবে সংজ্ঞায়িত করেছি। ডেটা আইটেমের পুনরাবৃত্ত টাপলগুলোকে একত্রিত করে পুনঃব্যবহারযোগ্য স্ট্রাকচার তৈরি করা হয়েছে। এই ডেটা স্ট্রাকচারগুলোতে সেফ ইউনিয়নের মতো সর্বশেষ HIDL ফিচারগুলো ব্যবহার করা হয়।
উদাহরণস্বরূপ, V6 এবং এর নিচের সংস্করণগুলিতে, HIDL ইন্টারফেস এবং টাইপগুলিতে প্রায়শই <format, sampling rate, channel mask> এর একটি ট্রিপল ব্যবহৃত হয়। এই পুনরাবৃত্তি দূর করার জন্য, V7-এ, AudioConfigBase ডেটা টাইপ এবং অন্যান্য ডেটা টাইপগুলিকে নিম্নরূপে সংজ্ঞায়িত করা হয়েছে:
AudioConfigBase := <format, sampling rate, channel mask>AudioConfigBaseOptional := <[fmt], [sampl. rate], [chan. mask]>AudioConfig,AudioOffloadInfo,AudioPortConfigদ্বারা ব্যবহৃত হয়AudioProfile := <format, {sampling rates}, {channel masks}>AudioPort/PortConfigএ থাকা আলগা সংগ্রহগুলিকে প্রতিস্থাপন করেAudioPortExtendedInfo := device | mix | sessionAudioPort/PortConfigএ ইউনিয়নগুলিকে প্রতিস্থাপন করে
বিক্রেতার ট্যাগ
ডিভাইসের ধরন ও ফরম্যাটের পাশাপাশি, বিক্রেতারা অডিও ট্র্যাকের মেটাডেটার জন্য কাস্টম ট্যাগ যোগ করতে পারেন।
প্লেব্যাক এবং ট্র্যাক মেটাডেটা রেকর্ডিংয়ের জন্য, ভেন্ডররা তাদের নিজস্ব ট্যাগ পাঠাতে পারে, যা অ্যাপস থেকে HAL-এ অডিও I/O স্ট্রিমে অ্যাট্রিবিউট যোগ করতে ব্যবহৃত হয়।
নিম্নলিখিত উদাহরণে যেমন দেখা যাচ্ছে, প্লেব্যাক ট্র্যাক মেটাডেটার জন্য ভেন্ডর ট্যাগ যোগ করা হয়:
struct PlaybackTrackMetadata {
…
/** Tags from AudioTrack audio attributes */
vec<AudioTag> tags;
};
রেকর্ডিং ট্র্যাক মেটাডেটার জন্য নির্দিষ্ট ট্যাগ যোগ করার মাধ্যমে RecordTrackMetadata কাঠামোটিও একই পদ্ধতিতে প্রয়োগ করা হয়।
বিক্রেতা এক্সটেনশন নেমস্পেসিং
HAL V7 থেকে, ভেন্ডর এক্সটেনশনের জন্য একটি অতিরিক্ত {vendor} প্রিফিক্স প্রয়োজন, যা V6-এ প্রয়োজন ছিল না। {vendor} প্রিফিক্সটি বৈধ হওয়ার জন্য, এতে অবশ্যই তিন বা ততোধিক অ্যালফানিউমেরিক অক্ষর থাকতে হবে।
V7-এ নিম্নলিখিত বিন্যাসটি ব্যবহার করুন:
VX_{ vendor }_{ letters/numbers }
নিম্নলিখিতগুলি বৈধ V7 ভেন্ডর এক্সটেনশনের কয়েকটি উদাহরণ:
-
VX_ GOOGLE _VR -
VX_ QCI _AMBIENT_MIC
সংস্করণ তথ্য
নিম্নলিখিত সারণিতে প্রতিটি অ্যান্ড্রয়েড রিলিজের জন্য HAL সংস্করণ নম্বর তালিকাভুক্ত করা হয়েছে:
| অ্যান্ড্রয়েড সংস্করণ | HIDL HAL সংস্করণ |
|---|---|
| অ্যান্ড্রয়েড ১৩ | ৭.১ |
| অ্যান্ড্রয়েড ১২ | ৭.০ |
| অ্যান্ড্রয়েড ১১ | ৬.০ |
| অ্যান্ড্রয়েড ১০ | ৫.০ |
| অ্যান্ড্রয়েড ৯ | ৪.০ |
| অ্যান্ড্রয়েড ৮ | ২.০ |