অডিও HAL

অ্যান্ড্রয়েডের অডিও হার্ডওয়্যার অ্যাবস্ট্রাকশন লেয়ার (HAL) android.media এ উচ্চ-স্তরের, অডিও-নির্দিষ্ট ফ্রেমওয়ার্ক API-কে অন্তর্নিহিত অডিও ড্রাইভার এবং হার্ডওয়্যারের সাথে সংযুক্ত করে। অডিও HAL স্ট্যান্ডার্ড ইন্টারফেসকে সংজ্ঞায়িত করে যেটিতে অডিও পরিষেবাগুলি কল করে৷ অডিও হার্ডওয়্যার সঠিকভাবে কাজ করার জন্য এটি প্রয়োগ করা আবশ্যক।

এই পৃষ্ঠাটি অডিও HAL এর একটি ওভারভিউ দেয় এবং এর API এবং বাস্তবায়নের প্রয়োজনীয়তার বিশদ প্রদান করে।

অডিও HAL ইন্টারফেস

অডিও HAL ইন্টারফেস .hal ফাইলে .hal ব্যবহার করে এবং কনফিগারেশন ফাইলগুলির জন্য XSD স্কিমা ব্যবহার করে সংজ্ঞায়িত করা হয়েছে, যা নিম্নরূপ দেখানো হয়েছে।

audio_hal

চিত্র 1. অডিও HAL ইন্টারফেস

কনফিগারেশন ফাইল

অডিও নীতি এবং অডিও প্রভাব XML কনফিগারেশন ফাইলগুলিকে অডিও HAL ইন্টারফেসের অংশ হিসাবে বিবেচনা করা হয়। এই ফাইলগুলি অবশ্যই তাদের স্কিমাগুলির সাথে সঙ্গতিপূর্ণ হতে হবে এবং কনফার্মেন্স VTS পরীক্ষা দ্বারা যাচাই করা হয়৷

অডিও HAL বাস্তবায়নের অংশ হিসাবে, আপনাকে অবশ্যই একটি অডিও নীতি কনফিগারেশন ফাইল তৈরি করতে হবে যা অডিও টপোলজি বর্ণনা করে। ফ্রেমওয়ার্ক ব্যবহার করার জন্য অডিও HAL ক্ষমতাগুলি audio_policy_configuration.xml ফাইলে ঘোষণা করতে হবে।

অডিও HAL API

অডিও HAL এ নিম্নলিখিত API গুলি রয়েছে:

  • কোর HAL
  • প্রভাব HAL
  • সাধারণ HAL

এই APIগুলির প্রত্যেকটি নিম্নলিখিত বিভাগে বর্ণিত হয়েছে।

কোর HAL

কোর HAL হল প্রধান API যা AudioFlinger দ্বারা অডিও চালানো এবং অডিও রাউটিং নিয়ন্ত্রণ করতে ব্যবহৃত হয়। কিছু মূল ইন্টারফেস নিম্নরূপ:

  • IDeviceFactory.hal হল এপিআই-এর এন্ট্রি পয়েন্ট।
  • IDevice.hal এবং IPrimaryDevice.hal এ সেটমাস্টার ভলিউম বা setMasterVolume মতো পদ্ধতি openInputStream
  • স্ট্রীমগুলি একমুখী এবং IStream.hal , IStreamOut.hal , এবং IStreamIn.hal এর মাধ্যমে HAL থেকে অডিও পাঠাতে বা গ্রহণ করতে AudioFlinger ব্যবহার করে।

নিম্নলিখিত সারণীতে দরকারী কোর HAL উপাদানগুলির অবস্থান তালিকাভুক্ত করা হয়েছে।

মূল HAL উপাদান অবস্থান
API এর সর্বশেষ সংস্করণ /hardware/interfaces/audio/6.0
সর্বশেষ কোর HAL API-এর জন্য নির্দিষ্ট প্রকার /hardware/interfaces/audio/6.0/types.hal
অডিও নীতি কনফিগারেশন ফাইল XSD স্কিমা /hardware/interfaces/audio/6.0/config/audio_policy_configuration.xsd

Core HAL API ( /hardware/interfaces/audio/core/all-versions/default/ ) এর ডিফল্ট বাস্তবায়ন হল লিগ্যাসি শেয়ার্ড লাইব্রেরি ব্যবহার করে প্রি-ট্রেবল এইচএএল বাস্তবায়নের চারপাশে একটি মোড়ক। কার্নেল ড্রাইভারের সাথে সরাসরি ইন্টারঅ্যাক্ট করে এমন অডিও HAL-এর নতুন সংস্করণ প্রয়োগ করার সময় ডিফল্ট বাস্তবায়নকে একটি রেফারেন্স হিসাবে বিবেচনা করা যেতে পারে।

প্রভাব HAL

Effects HAL API অডিও প্রভাব নিয়ন্ত্রণ করতে প্রভাব কাঠামো দ্বারা ব্যবহৃত হয়। এছাড়াও আপনি Effects HAL API-এর মাধ্যমে স্বয়ংক্রিয় লাভ নিয়ন্ত্রণ এবং শব্দ দমনের মতো প্রিপ্রসেসিং প্রভাবগুলি কনফিগার করতে পারেন।

নিম্নলিখিত সারণীতে দরকারী প্রভাব HAL উপাদানগুলির অবস্থান তালিকাভুক্ত করা হয়েছে।

HAL উপাদানকে প্রভাবিত করে অবস্থান
API এর সর্বশেষ সংস্করণ /hardware/interfaces/audio/effect/6.0/
প্রভাব কনফিগারেশন ফাইল XSD স্কিমা /hardware/interfaces/audio/effect/6.0/xml/audio_effects_conf.xsd

আরও তথ্যের জন্য, Effects HAL API ( /hardware/interfaces/audio/effect/all-versions/default/ ) এবং অডিও ইফেক্টস বিভাগটির একটি নমুনা বাস্তবায়ন দেখুন।

সাধারণ HAL

কমন এইচএএল হল সাধারণ ডেটা টাইপের একটি লাইব্রেরি যা কোর এবং ইফেক্টস এইচএএল এপিআই দ্বারা ব্যবহৃত হয়। এতে কোনো ইন্টারফেস নেই এবং কোনো সংশ্লিষ্ট VTS পরীক্ষা নেই কারণ এটি শুধুমাত্র ডেটা স্ট্রাকচারকে সংজ্ঞায়িত করে। কমন HAL API তে নিম্নলিখিতগুলি রয়েছে:

  • সংজ্ঞা ( /hardware/interfaces/audio/common/6.0/types.hal ) কোর এবং প্রভাব API দ্বারা ভাগ করা হয়েছে
  • ইউটিলিটিগুলি ( /hardware/interfaces/audio/common/all-versions ) বাস্তবায়ন, ক্লায়েন্ট এবং পরীক্ষার জন্য HIDL API-এর বিরুদ্ধে কোডিং করতে সাহায্য করে

প্রয়োজনীয়তা

অডিও HAL বাস্তবায়ন এবং অডিও নীতি কনফিগারেশন ফাইল তৈরি করার পাশাপাশি, নিম্নলিখিত HAL প্রয়োজনীয়তাগুলি অবশ্যই মেনে চলতে হবে:

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

অডিও HAL V7-এর আপডেট

পশ্চাৎপদ সামঞ্জস্যের সমস্যাগুলি সমাধান করার জন্য, স্থিতিশীল AIDL সমস্ত HAL পরিবর্তনের জন্য Android T থেকে শুরু হওয়া বাধ্যতামূলক৷ Android T এবং উচ্চতর ক্ষেত্রে AIDL গ্রহণকে সমর্থন ও উন্নত করতে, অডিও HAL V7 নিম্নলিখিতগুলি করে:

  • ফ্রেমওয়ার্ক এবং HAL দ্বারা ব্যবহৃত ডেটা মডেলগুলিকে একীভূত করে।
  • HIDL ডেটা প্রকার (enums) এবং অডিও নীতি কনফিগারেশনের জন্য ব্যবহৃত XML স্কিমার মধ্যে সদৃশতা কম করে।

বিশেষ করে, অডিও HAL V7-এ নিম্নলিখিত ক্ষেত্রে পরিবর্তন করা হয়েছে:

এই পরিবর্তনগুলি তাদের নিজ নিজ বিভাগে আরও বিস্তারিতভাবে আলোচনা করা হয়েছে।

গণনা

অডিও HAL V7 থেকে শুরু করে, অডিও নীতি কনফিগারেশন ফাইলে ব্যবহৃত গণনাকৃত প্রকারগুলি শুধুমাত্র XSD স্কিমাতে সংজ্ঞায়িত করা হয় এবং HIDL-এ নয়।

অডিও HAL V6-এ, type.hal-এ types.hal ধরনের (যেমন AudioFormat ) মানগুলি অডিও নীতি কনফিগারেশন ফাইল XSD স্কিমাতেও সংজ্ঞায়িত করা হয়েছে, একটি নকল তৈরি করে। V7-এ এটি এড়াতে, enum প্রকারগুলিকে string -এ পরিবর্তিত করা হয় এবং সমস্ত সম্ভাব্য গণনার মানগুলি XSD স্কিমাতে তালিকাভুক্ত করা হয়।

V7 এ AudioFormat টাইপের কিছু পরিবর্তনের তুলনা করার জন্য চিত্র 2 দেখুন।

audioformat-change

চিত্র 2. অডিও ফরম্যাট enum-এ কিছু পরিবর্তনের তুলনা

String -এ রূপান্তরিত enum প্রকারের জন্য নিম্নলিখিত তালিকাটি পড়ুন:

  • AudioChannelMask
  • AudioContentType
  • AudioDevice : বিক্রেতা-এক্সটেনসিবল
  • AudioFormat : বিক্রেতা-এক্সটেনসিবল
  • AudioGainMode
  • AudioSource
  • AudioStreamType
  • AudioUsage

স্ট্রিং enum মান পাস

HAL ইন্টারফেস সীমানা জুড়ে গণনার মান হিসাবে তথ্য স্থানান্তর করার জন্য স্ট্রিং মান ব্যবহার করা হয়। ফ্রেমওয়ার্ক এবং এইচএএল র‍্যাপার উভয়ই ব্যবসায়িক যুক্তি বাস্তবায়নের জন্য পূর্ণসংখ্যা এনাম মান ব্যবহার করে এবং চিত্র 3 -এ চিত্রিত রূপান্তর পদ্ধতি ব্যবহার করে।

audio-passing-values

চিত্র 3. স্ট্রিং enum মান পাস করা

একটি উদাহরণ হিসাবে, ফ্রেমওয়ার্ক থেকে বিক্রেতার কাছে অডিও ফর্ম্যাট টাইপের একটি মান পাস করতে:

  1. AudioFormat-এর AudioFormat মান libaudiohal-এ একটি স্ট্রিং ভ্যালুতে রূপান্তরিত হয় এবং libaudiohal এ পাঠানো হয়।
  2. HAL এর দিকে, ডিফল্ট র‍্যাপার স্ট্রিংটিকে একটি enum ভ্যালুতে রূপান্তর করে, যা উত্তরাধিকার HAL-এ পাস করা হয়।

XML স্কিমা পরিবর্তন

XML স্কিমা ডেফিনিশনে (XSD) enum মানের সম্পূর্ণ তালিকা থাকা VTS দ্বারা আরও ভাল অডিও নীতি কনফিগারেশন XML ফাইল বৈধকরণের অনুমতি দেয়। XSD মেনে চলার জন্য HAL V7-এর সাথে ব্যবহৃত অডিও নীতি কনফিগারেশন ফাইলে পরিবর্তন করা হয়েছে।

V7-এ, একটি আদর্শ (স্পেস) অক্ষর , (কমা) এবং | (উল্লম্ব বার) V6 এবং নীচে ব্যবহৃত চিহ্ন। নিম্নলিখিত উদাহরণে দেখা যায়, channelMasks মানগুলির তালিকা সীমাবদ্ধ করতে একটি স্থান ব্যবহার করা হয়:

<profile channelMasks="AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_MONO" … />

প্রতীক পরিবর্তন করতে, update_audio_policy_config.sh নামে একটি স্বয়ংক্রিয় রূপান্তর স্ক্রিপ্ট ব্যবহার করুন। পিক্সেল 5 (রেডফিন) ডিভাইসের জন্য একটি 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 | session

    AudioPort/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

সংস্করণ সংক্রান্ত তথ্য

নিম্নলিখিত সারণী প্রতিটি Android রিলিজের জন্য HAL সংস্করণ নম্বর তালিকাভুক্ত করে।

অ্যান্ড্রয়েড সংস্করণ HAL সংস্করণ
অ্যান্ড্রয়েড 12 7.0
অ্যান্ড্রয়েড 11 6.0
অ্যান্ড্রয়েড 10 5.0
অ্যান্ড্রয়েড 9 4.0
অ্যান্ড্রয়েড 8 2.0