ऑडियो एचएएल

Android का ऑडियो हार्डवेयर एब्स्ट्रैक्शन लेयर (HAL) android.media में उच्च-स्तरीय, ऑडियो-विशिष्ट फ्रेमवर्क API को अंतर्निहित ऑडियो ड्राइवरों और हार्डवेयर से जोड़ता है। ऑडियो एचएएल मानक इंटरफ़ेस को परिभाषित करता है जिसे ऑडियो सेवाएं कॉल करती हैं। ऑडियो हार्डवेयर के ठीक से काम करने के लिए इसे लागू किया जाना चाहिए।

यह पृष्ठ ऑडियो एचएएल का अवलोकन देता है और इसकी एपीआई और कार्यान्वयन आवश्यकताओं का विवरण प्रदान करता है।

ऑडियो एचएएल इंटरफ़ेस

ऑडियो HAL इंटरफ़ेस को .hal और कॉन्फ़िगरेशन फ़ाइलों के लिए XSD स्कीमा का उपयोग करके परिभाषित किया गया है, जो निम्नानुसार दिखाया गया है।

audio_hal

चित्र 1. ऑडियो एचएएल इंटरफ़ेस

कॉन्फ़िगरेशन फ़ाइलें

ऑडियो नीति और ऑडियो प्रभाव XML कॉन्फ़िगरेशन फ़ाइलें ऑडियो HAL इंटरफ़ेस का हिस्सा मानी जाती हैं। इन फ़ाइलों को उनके स्कीमा के अनुरूप होना चाहिए, और अनुरूपता VTS परीक्षणों द्वारा सत्यापित की जाती है।

ऑडियो एचएएल को लागू करने के हिस्से के रूप में, आपको एक ऑडियो नीति कॉन्फ़िगरेशन फ़ाइल बनानी होगी जो ऑडियो टोपोलॉजी का वर्णन करती है। ऑडियो एचएएल क्षमताओं को audio_policy_configuration.xml फ़ाइल में घोषित किया जाना चाहिए ताकि फ्रेमवर्क उनका उपयोग कर सके।

ऑडियो एचएएल एपीआई

ऑडियो एचएएल में निम्नलिखित एपीआई शामिल हैं:

  • कोर एचएएल
  • प्रभाव एचएएल
  • आम हलो

इनमें से प्रत्येक एपीआई का वर्णन निम्नलिखित अनुभागों में किया गया है।

कोर एचएएल

कोर एचएएल ऑडियो चलाने और ऑडियो रूटिंग को नियंत्रित करने के लिए ऑडियोफ्लिंगर द्वारा उपयोग किया जाने वाला मुख्य एपीआई है। कुछ प्रमुख इंटरफेस इस प्रकार हैं:

  • IDeviceFactory.hal एपीआई में प्रवेश बिंदु है।
  • IDevice.hal और IPrimaryDevice.hal में setMasterVolume या openInputStream जैसी विधियां शामिल हैं।
  • स्ट्रीम यूनिडायरेक्शनल हैं और ऑडियोफ्लिंगर द्वारा एचएएल को IStream.hal , IStreamOut.hal , और IStreamIn.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 की समरूपता और एप्लिकेशन प्रोसेसर से कैप्चर करना जैसा कि समवर्ती कैप्चर पेज पर विस्तृत है।

ऑडियो HAL V7 . के अपडेट

पिछड़े संगतता मुद्दों को हल करने के लिए, एंड्रॉइड टी शुरू करने वाले सभी एचएएल परिवर्तनों के लिए स्थिर एआईडीएल अनिवार्य है। एंड्रॉइड टी और उच्चतर में एआईडीएल अपनाने का समर्थन करने और बढ़ाने के लिए, ऑडियो एचएएल वी 7 निम्नलिखित करता है:

  • फ्रेमवर्क और एचएएल द्वारा उपयोग किए जाने वाले डेटा मॉडल को एकीकृत करता है।
  • ऑडियो नीति कॉन्फ़िगरेशन के लिए उपयोग किए जाने वाले HIDL डेटा प्रकारों (enums) और XML स्कीमा के बीच दोहराव को कम करता है।

विशेष रूप से, ऑडियो HAL V7 में निम्नलिखित क्षेत्रों में परिवर्तन किए गए हैं:

इन परिवर्तनों पर उनके संबंधित अनुभागों में अधिक विस्तार से चर्चा की गई है।

गणना

ऑडियो HAL V7 में शुरू, ऑडियो नीति कॉन्फ़िगरेशन फ़ाइल में उपयोग किए गए एन्यूमरेटेड प्रकार केवल XSD स्कीमा में परिभाषित होते हैं, HIDL में नहीं।

ऑडियो HAL V6 में, type.hal में एनम प्रकार (जैसे AudioFormat ) के types.hal भी ऑडियो पॉलिसी कॉन्फ़िगरेशन फ़ाइल XSD स्कीमा में परिभाषित किए गए हैं, जो एक दोहराव बनाते हैं। V7 में इससे बचने के लिए, एनम प्रकार को string में बदल दिया जाता है और इसके बजाय सभी संभावित एन्यूमरेशन मान XSD स्कीमा में सूचीबद्ध होते हैं।

V7 में AudioFormat प्रकार में कुछ परिवर्तनों की तुलना के लिए चित्र 2 देखें।

audioformat-change

चित्र 2. AudioFormat enum में कुछ परिवर्तनों की तुलना

एनम प्रकारों के लिए निम्नलिखित सूची देखें जिन्हें String में परिवर्तित किया गया है:

  • AudioChannelMask
  • AudioContentType
  • AudioDevice : विक्रेता-एक्सटेंसिबल
  • AudioFormat : विक्रेता-एक्सटेंसिबल
  • AudioGainMode
  • AudioSource
  • AudioStreamType
  • AudioUsage

स्ट्रिंग एनम मान पास करें

स्ट्रिंग मानों का उपयोग HAL इंटरफ़ेस सीमा के आर-पार गणना मान के रूप में जानकारी स्थानांतरित करने के लिए किया जाता है। फ्रेमवर्क और एचएएल रैपर दोनों व्यावसायिक तर्क को लागू करने के लिए पूर्णांक एनम मानों का उपयोग करते हैं और चित्र 3 में दर्शाए गए रूपांतरण दृष्टिकोण को नियोजित करते हैं।

audio-passing-values

चित्रा 3. स्ट्रिंग एनम मान पास करना

एक उदाहरण के रूप में, फ्रेमवर्क से विक्रेता को ऑडियो प्रारूप प्रकार का मान पास करने के लिए:

  1. AudioFormat का Enum मान AudioFormat में एक स्ट्रिंग मान में libaudiohal जाता है और HAL को पास कर दिया जाता है।
  2. एचएएल पक्ष पर, डिफ़ॉल्ट रैपर स्ट्रिंग को एक एनम मान में परिवर्तित करता है, जिसे विरासत एचएएल को पास किया जाता है।

एक्सएमएल स्कीमा परिवर्तन

एक्सएमएल स्कीमा डेफिनिशन (एक्सएसडी) में एनम मानों की पूरी सूची होने से वीटीएस द्वारा बेहतर ऑडियो पॉलिसी कॉन्फ़िगरेशन एक्सएमएल फाइल सत्यापन की अनुमति मिलती है। XSD का अनुपालन करने के लिए HAL 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 में फिर से परिभाषित किया गया है। डेटा आइटम के बार-बार टुपल्स को पुन: प्रयोज्य संरचनाओं में एक साथ समूहीकृत किया जाता है। ये डेटा संरचनाएं सुरक्षित यूनियनों जैसी नवीनतम एचआईडीएल सुविधाओं का उपयोग करती हैं।

उदाहरण के लिए, 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 में यूनियनों की जगह लेता है

विक्रेता टैग

डिवाइस प्रकार और प्रारूपों के अतिरिक्त, विक्रेता ऑडियो ट्रैक मेटाडेटा के लिए कस्टम टैग जोड़ सकते हैं।

प्लेबैक और रिकॉर्डिंग ट्रैक मेटाडेटा के लिए, विक्रेता अपने स्वयं के टैग पास कर सकते हैं, जिनका उपयोग ऐप से एचएएल तक ऑडियो I/O स्ट्रीम में विशेषताओं को जोड़ने के लिए किया जाता है।

प्लेबैक ट्रैक मेटाडेटा के लिए विक्रेता टैग जोड़े जाते हैं जैसा कि निम्न उदाहरण में देखा गया है:

struct PlaybackTrackMetadata {
…
    /** Tags from AudioTrack audio attributes */
    vec<AudioTag> tags;
};

RecordTrackMetadata संरचना को रिकॉर्डिंग ट्रैक मेटाडेटा के लिए विशिष्ट टैग जोड़कर एक समान तरीके से कार्यान्वित किया जाता है।

विक्रेता एक्सटेंशन नेमस्पेसिंग

HAL V7 से शुरू होकर, विक्रेता एक्सटेंशन के लिए एक अतिरिक्त {vendor} उपसर्ग की आवश्यकता होती है जो V6 में आवश्यक नहीं है। {vendor} उपसर्ग के मान्य होने के लिए, इसमें तीन या अधिक अक्षरांकीय वर्ण होने चाहिए।

V7 में निम्न प्रारूप का प्रयोग करें:

VX_{ vendor }_{ letters/numbers }

वैध V7 विक्रेता एक्सटेंशन के कुछ उदाहरण निम्नलिखित हैं:

  • वीएक्स_ GOOGLE _VR
  • वीएक्स_ क्यूसीआई _AMBIENT_MIC

संस्करण जानकारी

निम्न तालिका प्रत्येक Android रिलीज़ के लिए HAL संस्करण संख्या को सूचीबद्ध करती है।

Android संस्करण एचएएल संस्करण
एंड्रॉइड 12 7.0
एंड्रॉइड 11 6.0
एंड्रॉइड 10 5.0
एंड्रॉइड 9 4.0
एंड्रॉइड 8 2.0