Android का ऑडियो हार्डवेयर एब्स्ट्रेक्शन लेयर (HAL) android.media
में उच्च-स्तरीय, ऑडियो-विशिष्ट फ्रेमवर्क API को अंतर्निहित ऑडियो ड्राइवर और हार्डवेयर से जोड़ता है। ऑडियो एचएएल उस मानक इंटरफ़ेस को परिभाषित करता है जिसमें ऑडियो सेवाएं कॉल करती हैं। ऑडियो हार्डवेयर के ठीक से काम करने के लिए इसे लागू किया जाना चाहिए।
यह पृष्ठ ऑडियो एचएएल का अवलोकन देता है और इसके एपीआई और कार्यान्वयन आवश्यकताओं का विवरण प्रदान करता है।
ऑडियो एचएएल इंटरफ़ेस
ऑडियो HAL इंटरफ़ेस को .hal
और कॉन्फ़िगरेशन फ़ाइलों के लिए XSD स्कीमा का उपयोग करके परिभाषित किया गया है, जिसे निम्नानुसार दिखाया गया है।
चित्र 1. ऑडियो एचएएल इंटरफ़ेस
कॉन्फ़िगरेशन फ़ाइलें
ऑडियो नीति और ऑडियो प्रभाव XML कॉन्फ़िगरेशन फ़ाइलों को ऑडियो HAL इंटरफ़ेस का हिस्सा माना जाता है। इन फ़ाइलों को उनके स्कीमा के अनुरूप होना चाहिए, और अनुरूपता VTS परीक्षणों द्वारा सत्यापित की जाती है।
ऑडियो एचएएल को लागू करने के भाग के रूप में, आपको एक ऑडियो नीति कॉन्फ़िगरेशन फ़ाइल बनानी होगी जो ऑडियो टोपोलॉजी का वर्णन करती है। ऑडियो HAL क्षमताओं का उपयोग करने के लिए फ्रेमवर्क के लिए audio_policy_configuration.xml
फ़ाइल में घोषित किया जाना चाहिए।
ऑडियो एचएएल एपीआई
ऑडियो एचएएल में निम्नलिखित एपीआई शामिल हैं:
- कोर एचएएल
- प्रभाव एचएएल
- कॉमन एचएएल
इनमें से प्रत्येक API का वर्णन निम्नलिखित अनुभागों में किया गया है।
कोर एचएएल
Core HAL मुख्य API है जिसका उपयोग AudioFlinger द्वारा ऑडियो चलाने और ऑडियो रूटिंग को नियंत्रित करने के लिए किया जाता है। कुछ प्रमुख इंटरफेस इस प्रकार हैं:
-
IDeviceFactory.hal
एपीआई में प्रवेश बिंदु है। -
IDevice.hal
औरIPrimaryDevice.hal
मेंsetMasterVolume
याopenInputStream
जैसी विधियाँ शामिल हैं। - धाराएँ यूनिडायरेक्शनल हैं और ऑडियोफ्लिंगर द्वारा
IStream.hal
,IStreamOut.hal
, औरIStreamIn.hal
के माध्यम से HAL को और उससे ऑडियो भेजने या प्राप्त करने के लिए उपयोग की जाती हैं।
निम्न तालिका उपयोगी कोर एचएएल घटकों के स्थान को सूचीबद्ध करती है।
कोर एचएएल घटक | स्थान |
---|---|
एपीआई का नवीनतम संस्करण | /hardware/interfaces/audio/6.0 |
नवीनतम कोर एचएएल एपीआई के लिए विशिष्ट प्रकार | /hardware/interfaces/audio/6.0/types.hal |
ऑडियो नीति कॉन्फ़िगरेशन फ़ाइल XSD स्कीमा | /hardware/interfaces/audio/6.0/config/audio_policy_configuration.xsd |
कोर एचएएल एपीआई का डिफ़ॉल्ट कार्यान्वयन ( /hardware/interfaces/audio/core/all-versions/default/
) विरासत साझा पुस्तकालयों का उपयोग करके प्री-ट्रेबल एचएएल कार्यान्वयन के आसपास एक आवरण है। ऑडियो एचएएल के नए संस्करणों को लागू करते समय डिफ़ॉल्ट कार्यान्वयन को एक संदर्भ के रूप में भी माना जा सकता है जो सीधे कर्नेल ड्राइवरों के साथ बातचीत करता है।
प्रभाव एचएएल
प्रभाव एचएएल एपीआई का उपयोग प्रभाव ढांचे द्वारा ऑडियो प्रभावों को नियंत्रित करने के लिए किया जाता है। आप प्रभाव एचएएल एपीआई के माध्यम से प्रीप्रोसेसिंग प्रभाव जैसे स्वत: लाभ नियंत्रण और शोर दमन को भी कॉन्फ़िगर कर सकते हैं।
निम्न तालिका उपयोगी प्रभाव एचएएल घटकों के स्थान को सूचीबद्ध करती है।
प्रभाव एचएएल घटक | स्थान |
---|---|
एपीआई का नवीनतम संस्करण | /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/
) और ऑडियो प्रभाव अनुभाग का एक नमूना कार्यान्वयन देखें।
कॉमन एचएएल
सामान्य एचएएल कोर और प्रभाव एचएएल एपीआई द्वारा उपयोग किए जाने वाले सामान्य डेटा प्रकारों का एक पुस्तकालय है। इसका कोई इंटरफेस नहीं है और कोई संबद्ध वीटीएस परीक्षण नहीं है क्योंकि यह केवल डेटा संरचनाओं को परिभाषित करता है। सामान्य एचएएल एपीआई में निम्नलिखित शामिल हैं:
- परिभाषाएँ (
/hardware/interfaces/audio/common/6.0/types.hal
) कोर और इफेक्ट एपीआई द्वारा साझा की गई हैं - यूटिलिटीज (
/hardware/interfaces/audio/common/all-versions
) कार्यान्वयन, क्लाइंट और परीक्षणों के लिए एचआईडीएल एपीआई के खिलाफ कोडिंग में मदद करने के लिए उपयोग किया जाता है।
आवश्यकताएं
ऑडियो एचएएल को लागू करने और ऑडियो नीति कॉन्फ़िगरेशन फ़ाइल बनाने के अलावा, निम्नलिखित एचएएल आवश्यकताओं का पालन किया जाना चाहिए:
- यदि ध्वनि ट्रिगर के लिए कैप्चर (हॉटवर्ड डीएसपी बफर से कैप्चर) एक इनपुट प्रोफ़ाइल द्वारा समर्थित है, तो कार्यान्वयन को ध्वनि ट्रिगर एचएएल द्वारा समर्थित समवर्ती सत्रों की संख्या के अनुरूप इस प्रोफ़ाइल पर सक्रिय स्ट्रीम की संख्या का समर्थन करना चाहिए।
- वॉइस कॉल TX की समवर्ती और एप्लिकेशन प्रोसेसर से कैप्चर जैसा कि समवर्ती कैप्चर पृष्ठ पर विस्तृत है।
ऑडियो एचएएल V7 में अपडेट
पिछड़े संगतता मुद्दों को संबोधित करने के लिए, एंड्रॉइड 13 से शुरू होने वाले सभी एचएएल परिवर्तनों के लिए स्थिर एआईडीएल अनिवार्य है। एंड्रॉइड 13 और उच्चतर में एआईडीएल अपनाने का समर्थन करने और बढ़ाने के लिए, ऑडियो एचएएल वी 7 निम्नलिखित करता है:
- फ्रेमवर्क और एचएएल द्वारा उपयोग किए जाने वाले डेटा मॉडल को एकीकृत करता है।
- HIDL डेटा प्रकार (enums) और ऑडियो नीति कॉन्फ़िगरेशन के लिए उपयोग किए जाने वाले XML स्कीमा के बीच दोहराव को कम करता है।
विशेष रूप से, ऑडियो HAL V7 में निम्नलिखित क्षेत्रों में परिवर्तन किए गए हैं:
इन परिवर्तनों पर उनके संबंधित अनुभागों में अधिक विस्तार से चर्चा की गई है।
गणना
ऑडियो एचएएल वी7 से शुरू होकर, ऑडियो नीति कॉन्फ़िगरेशन फ़ाइल में उपयोग किए जाने वाले प्रगणित प्रकार केवल एक्सएसडी स्कीमा में परिभाषित किए गए हैं और एचआईडीएल में नहीं।
ऑडियो एचएएल वी6 में, एनुम प्रकार के मान (जैसे AudioFormat
) types.hal
में ऑडियो पॉलिसी कॉन्फ़िगरेशन फ़ाइल XSD स्कीमा में भी परिभाषित किए गए हैं, जिससे एक डुप्लीकेशन बनता है। V7 में इससे बचने के लिए, एनम प्रकार को string
में बदल दिया जाता है और इसके बजाय XSD स्कीमा में सभी संभावित गणना मान सूचीबद्ध किए जाते हैं।
V7 में AudioFormat
प्रकार में कुछ परिवर्तनों की तुलना के लिए चित्र 2 देखें।
चित्र 2. AudioFormat एनम में कुछ परिवर्तनों की तुलना
String
में कनवर्ट किए गए एनम प्रकारों के लिए निम्न सूची देखें:
-
AudioChannelMask
-
AudioContentType
-
AudioDevice
: वेंडर-एक्स्टेंसिबल -
AudioFormat
: विक्रेता-एक्स्टेंसिबल -
AudioGainMode
-
AudioSource
-
AudioStreamType
-
AudioUsage
स्ट्रिंग एनम मान पास करें
एचएएल इंटरफ़ेस सीमा के पार गणना मूल्यों के रूप में सूचना को स्थानांतरित करने के लिए स्ट्रिंग मानों का उपयोग किया जाता है। फ्रेमवर्क और एचएएल रैपर दोनों ही बिजनेस लॉजिक को लागू करने के लिए पूर्णांक एनुम वैल्यू का उपयोग करते हैं और चित्र 3 में दर्शाए गए रूपांतरण दृष्टिकोण को नियोजित करते हैं।
चित्रा 3. पासिंग स्ट्रिंग एनम मान
उदाहरण के तौर पर, ढांचे से विक्रेता तक ऑडियो प्रारूप प्रकार का मान पास करने के लिए:
-
libaudiohal
का एनम मानAudioFormat
में एक स्ट्रिंग मान में परिवर्तित हो जाता है और HAL को पास कर दिया जाता है। - एचएएल की तरफ, डिफॉल्ट रैपर स्ट्रिंग को एक एनम वैल्यू में कनवर्ट करता है, जो लीगेसी एचएएल को दिया जाता है।
एक्सएमएल स्कीमा बदलता है
एक्सएमएल स्कीमा डेफिनिशन (एक्सएसडी) में एनम वैल्यू की पूरी सूची होने से वीटीएस द्वारा बेहतर ऑडियो पॉलिसी कॉन्फ़िगरेशन एक्सएमएल फाइल सत्यापन की अनुमति मिलती है। 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 और नीचे में, <format, sampling rate, channel mask>
का ट्रिपल अक्सर HIDL इंटरफेस और प्रकारों में उपयोग किया जाता है। इस अतिरेक को दूर करने के लिए, 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
में यूनियनों को प्रतिस्थापित करता है
विक्रेता टैग
डिवाइस प्रकार और प्रारूपों के अतिरिक्त, विक्रेता ऑडियो ट्रैक मेटाडेटा के लिए कस्टम टैग जोड़ सकते हैं।
प्लेबैक और रिकॉर्डिंग ट्रैक मेटाडेटा के लिए, विक्रेता अपने स्वयं के टैग पास कर सकते हैं, जिनका उपयोग ऐप से एचएएल में ऑडियो I/O स्ट्रीम में विशेषताओं को जोड़ने के लिए किया जाता है।
प्लेबैक ट्रैक मेटाडेटा के लिए विक्रेता टैग निम्न उदाहरण में देखे गए अनुसार जोड़े गए हैं:
struct PlaybackTrackMetadata {
…
/** Tags from AudioTrack audio attributes */
vec<AudioTag> tags;
};
रिकॉर्डिंग ट्रैक मेटाडेटा के लिए विशिष्ट टैग जोड़कर RecordTrackMetadata
संरचना को समान रूप से कार्यान्वित किया जाता है।
विक्रेता एक्सटेंशन नेमस्पेसिंग
HAL V7 से शुरू होकर, वेंडर एक्सटेंशन के लिए एक अतिरिक्त {vendor}
उपसर्ग की आवश्यकता होती है जो V6 में आवश्यक नहीं है। {vendor}
उपसर्ग के मान्य होने के लिए, यह तीन या अधिक अल्फ़ान्यूमेरिक वर्णों का होना चाहिए।
V7 में निम्न स्वरूप का उपयोग करें:
VX_{ vendor }_{ letters/numbers }
निम्नलिखित मान्य V7 वेंडर एक्सटेंशन के कुछ उदाहरण हैं:
- वीएक्स_ गूगल _वीआर
- वीएक्स_ क्यूसीआई _AMBIENT_MIC
संस्करण जानकारी
निम्न तालिका प्रत्येक Android रिलीज़ के लिए HAL संस्करण संख्या सूचीबद्ध करती है।
Android संस्करण | एचएएल संस्करण |
---|---|
Android 13 | 7.1 |
एंड्रॉइड 12 | 7.0 |
एंड्रॉइड 11 | 6.0 |
एंड्रॉइड 10 | 5.0 |
एंड्रॉइड 9 | 4.0 |
एंड्रॉइड 8 | 2.0 |