ऑडियो नीतियां कॉन्फ़िगर करना

एंड्रॉइड 10 रिलीज में जटिल ऑटोमोटिव उपयोग के मामलों का समर्थन करने के लिए अधिक लचीलापन प्रदान करने के लिए ऑडियो पॉलिसी मैनेजर की महत्वपूर्ण रीफैक्टरिंग शामिल है:

  • ओईएम-विशिष्ट रूटिंग रणनीतियाँ।
  • समान वॉल्यूम कर्व्स का उपयोग करके लीगेसी स्ट्रीम प्रकारों के समूहों के लिए अनुकूलन योग्य वॉल्यूम समूह।
  • हार्ड कोड होने के बजाय ऑडियो पॉलिसी इंजन द्वारा घोषित रूटिंग रणनीतियाँ।
  • वॉल्यूम वक्र और समूह ऑडियो नीति इंजन द्वारा प्रबंधित किए जाते हैं।
  • आंतरिक रिफैक्टरिंग सामान्य कोड और विन्यास योग्य कोड के बीच भविष्य के विभाजन की तैयारी कर रहा है और समृद्ध ऑडियो डिवाइस प्रबंधन की पेशकश कर रहा है। उदाहरण के लिए, सभी डिवाइस गुणों का उपयोग न केवल नीति नियमों में इसका प्रकार।

Android 7.0 ने आपके ऑडियो टोपोलॉजी का वर्णन करने के लिए एक ऑडियो नीति कॉन्फ़िगरेशन फ़ाइल स्वरूप (XML) पेश किया है।

आपके उत्पाद पर मौजूद ऑडियो डिवाइस को घोषित करने के लिए device/<company>/<device>/audio/audio_policy.conf का उपयोग करके आवश्यक पिछले Android रिलीज़ (आप device/samsung/tuna/audio/audio_policy.conf में गैलेक्सी नेक्सस ऑडियो हार्डवेयर के लिए इस फ़ाइल का एक उदाहरण देख सकते हैं) device/samsung/tuna/audio/audio_policy.conf )। हालांकि, CONF एक सरल, मालिकाना प्रारूप है जो कि टीवी और ऑटोमोबाइल जैसे वर्टिकल के लिए जटिल टोपोलॉजी का वर्णन करने के लिए बहुत सीमित है।

Android 7.0 ने audio_policy.conf को बहिष्कृत कर दिया है और एक XML फ़ाइल प्रारूप का उपयोग करके ऑडियो टोपोलॉजी को परिभाषित करने के लिए समर्थन जोड़ा है जो अधिक मानव-पठनीय है, जिसमें संपादन और पार्सिंग टूल की एक विस्तृत श्रृंखला है, और जटिल ऑडियो टोपोलॉजी का वर्णन करने के लिए पर्याप्त लचीला है। एंड्रॉइड 7.0 कॉन्फिग फाइलों के एक्सएमएल फॉर्मेट को चुनने के लिए USE_XML_AUDIO_POLICY_CONF बिल्ड फ्लैग का उपयोग करता है।

एक्सएमएल प्रारूप के लाभ

CONF फ़ाइल की तरह, XML फ़ाइल आउटपुट और इनपुट स्ट्रीम प्रोफाइल की संख्या और प्रकार, प्लेबैक और कैप्चर के लिए उपयोग करने योग्य डिवाइस, और ऑडियो विशेषताओं को परिभाषित करने में सक्षम बनाती है। इसके अलावा, एक्सएमएल प्रारूप निम्नलिखित संवर्द्धन प्रदान करता है:

  • Android 10 में एक साथ एक से अधिक सक्रिय रिकॉर्डिंग ऐप की अनुमति है।
    • समवर्ती स्थिति के कारण रिकॉर्डिंग प्रारंभ को कभी भी अस्वीकार नहीं किया जाता है।
    • registerAudioRecordingCallback(AudioManager.AudioRecordingCallback cb) कॉलबैक क्लाइंट को कैप्चर पथ परिवर्तन के बारे में सूचित करता है।
  • निम्नलिखित स्थितियों में, क्लाइंट मूक ऑडियो नमूने प्राप्त करता है:
    • एक गोपनीयता-संवेदनशील उपयोग मामला (उदाहरण के लिए, VOICE_COMMUNICATION ) सक्रिय है।
    • क्लाइंट के पास अग्रभूमि सेवा या अग्रभूमि UI नहीं है।
    • विशेष भूमिकाओं को नीति द्वारा मान्यता दी जाती है:
      • अभिगम्यता सेवा: गोपनीयता के प्रति संवेदनशील उपयोग का मामला सक्रिय होने पर भी रिकॉर्ड किया जा सकता है।
      • सहायक: यदि UI शीर्ष पर है तो इसे गोपनीयता संवेदनशील माना जाता है।
  • ऑडियो प्रोफाइल में एचडीएमआई साधारण ऑडियो डिस्क्रिप्टर के समान एक संरचना होती है, जो प्रत्येक ऑडियो प्रारूप के लिए नमूना दरों/चैनल मास्क के एक अलग सेट को सक्षम करती है।
  • उपकरणों और धाराओं के बीच सभी संभावित कनेक्शनों की स्पष्ट परिभाषाएँ हैं। पहले, एक निहित नियम ने एक ही एचएएल मॉड्यूल से जुड़े सभी उपकरणों को कनेक्ट करना संभव बना दिया, जिससे ऑडियो नीति को ऑडियो पैच एपीआई के साथ अनुरोधित कनेक्शन को नियंत्रित करने से रोका जा सके। एक्सएमएल प्रारूप में, टोपोलॉजी विवरण कनेक्शन सीमाओं को परिभाषित करता है।
  • समर्थन के लिए मानक A2DP , USB, या पुन: रूट सबमिट परिभाषाओं को दोहराने से बचा जाता है।
  • वॉल्यूम वक्र अनुकूलन योग्य हैं। पहले, वॉल्यूम टेबल को हार्डकोड किया गया था। एक्सएमएल प्रारूप में, वॉल्यूम टेबल का वर्णन किया गया है और इसे अनुकूलित किया जा सकता है।

frameworks/av/services/audiopolicy/config/audio_policy_configuration.xml पर टेम्प्लेट उपयोग में आने वाली इनमें से कई सुविधाओं को दिखाता है।

फ़ाइल प्रारूप और स्थान

नई ऑडियो नीति कॉन्फ़िगरेशन फ़ाइल audio_policy_configuration.xml है और /system/etc में स्थित है। निम्न उदाहरण Android 12 और Android 12 के नीचे के संस्करणों के लिए XML फ़ाइल स्वरूप में एक साधारण ऑडियो नीति कॉन्फ़िगरेशन दिखाते हैं।

शीर्ष-स्तरीय संरचना में मॉड्यूल होते हैं जो प्रत्येक ऑडियो एचएएल हार्डवेयर मॉड्यूल के अनुरूप होते हैं, जहां प्रत्येक मॉड्यूल में मिक्स पोर्ट, डिवाइस पोर्ट और मार्गों की एक सूची होती है:

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

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

फ़ाइल समावेशन

XML समावेशन (XInclude) विधि का उपयोग अन्य XML फ़ाइलों में स्थित ऑडियो नीति कॉन्फ़िगरेशन जानकारी को शामिल करने के लिए किया जा सकता है। सभी शामिल फाइलों को निम्नलिखित प्रतिबंधों के साथ ऊपर वर्णित संरचना का पालन करना चाहिए:

  • फ़ाइलों में केवल शीर्ष-स्तरीय तत्व हो सकते हैं।
  • फ़ाइलों में X शामिल नहीं हो सकते हैं।

मानक एंड्रॉइड ओपन सोर्स प्रोजेक्ट (एओएसपी) ऑडियो एचएएल मॉड्यूल कॉन्फ़िगरेशन जानकारी को सभी ऑडियो पॉलिसी कॉन्फ़िगरेशन फ़ाइलों (जो त्रुटियों से ग्रस्त है) की प्रतिलिपि बनाने से बचने के लिए उपयोग में शामिल है। निम्न ऑडियो HALs के लिए एक मानक ऑडियो नीति कॉन्फ़िगरेशन XML फ़ाइल प्रदान की जाती है:

  • A2DP: a2dp_audio_policy_configuration.xml
  • सबमिक्स को रूट करें: rsubmix_audio_policy_configuration.xml
  • यूएसबी: usb_audio_policy_configuration.xml

ऑडियो नीति कोड संगठन

AudioPolicyManager.cpp को बनाए रखने और कॉन्फ़िगर करने में आसान बनाने के लिए कई मॉड्यूल में विभाजित किया गया है। frameworks/av/services/audiopolicy के संगठन में निम्नलिखित मॉड्यूल शामिल हैं।

मापांक विवरण
/managerdefault सभी ऐप्स के लिए सामान्य इंटरफेस और व्यवहार कार्यान्वयन शामिल है। AudioPolicyManager.cpp के समान इंजन की कार्यक्षमता और सामान्य अवधारणाओं को दूर किया गया।
/common आधार वर्गों को परिभाषित करता है (उदाहरण के लिए, इनपुट आउटपुट ऑडियो स्ट्रीम प्रोफाइल, ऑडियो डिवाइस डिस्क्रिप्टर, ऑडियो पैच और ऑडियो पोर्ट के लिए डेटा संरचनाएं)। इसे पहले AudioPolicyManager.cpp के अंदर परिभाषित किया गया था।
/engine

उन नियमों को लागू करता है जो परिभाषित करते हैं कि किसी दिए गए उपयोग के मामले में किस उपकरण और वॉल्यूम का उपयोग किया जाना चाहिए। यह सामान्य भाग के साथ एक मानक इंटरफ़ेस लागू करता है, जैसे किसी दिए गए प्लेबैक के लिए उपयुक्त डिवाइस प्राप्त करना या उपयोग के मामले को कैप्चर करना, या कनेक्टेड डिवाइस या बाहरी स्थिति (यानी, मजबूर उपयोग की कॉल स्थिति) सेट करना जो रूटिंग को बदल सकता है फैसला।

दो संस्करणों में उपलब्ध है: विन्यास योग्य और डिफ़ॉल्ट । संस्करण का चयन करने के तरीके के बारे में जानकारी के लिए, पैरामीटर फ्रेमवर्क का उपयोग करके कॉन्फ़िगरेशन देखें।

/engineconfigurable नीति इंजन कार्यान्वयन जो पैरामीटर फ्रेमवर्क पर निर्भर करता है (नीचे देखें)। कॉन्फ़िगरेशन पैरामीटर फ्रेमवर्क पर आधारित है और जहां नीति को XML फ़ाइलों द्वारा परिभाषित किया गया है।
/enginedefault पिछले Android ऑडियो नीति प्रबंधक कार्यान्वयन के आधार पर नीति इंजन कार्यान्वयन। यह डिफ़ॉल्ट है और इसमें हार्ड-कोडेड नियम शामिल हैं जो नेक्सस और एओएसपी कार्यान्वयन के अनुरूप हैं।
/service बाइंडर इंटरफेस, थ्रेडिंग और बाकी फ्रेमवर्क के इंटरफेस के साथ लॉकिंग कार्यान्वयन शामिल है।

पैरामीटर फ्रेमवर्क का उपयोग कर कॉन्फ़िगरेशन

ऑडियो नीति कोड को पूरी तरह से कॉन्फ़िगरेशन फ़ाइलों द्वारा परिभाषित ऑडियो नीति का समर्थन करते हुए इसे समझना और बनाए रखना आसान बनाने के लिए व्यवस्थित किया गया है। संगठन और ऑडियो नीति डिजाइन इंटेल के पैरामीटर फ्रेमवर्क पर आधारित है, जो मापदंडों को संभालने के लिए एक प्लगइन-आधारित और नियम-आधारित ढांचा है।

कॉन्फ़िगर करने योग्य ऑडियो नीति का उपयोग करने से वेंडर ओईएम को सक्षम बनाता है:

  • XML में सिस्टम की संरचना और उसके मापदंडों का वर्णन करें।
  • वर्णित पैरामीटर तक पहुंचने के लिए (सी ++ में) लिखें या बैकएंड (प्लगइन) का पुन: उपयोग करें।
  • परिभाषित करें (एक्सएमएल में या डोमेन-विशिष्ट भाषा में) शर्तें/नियम जिस पर किसी दिए गए पैरामीटर को दिए गए मान को लेना चाहिए।

AOSP में एक ऑडियो नीति कॉन्फ़िगरेशन फ़ाइल का एक उदाहरण शामिल है जो Frameworks/av/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/PolicyConfigurableDomains.xml पर पैरामीटर फ्रेमवर्क का उपयोग करता है। विवरण के लिए, पैरामीटर फ्रेमवर्क पर इंटेल दस्तावेज देखें।

Android 10 या उसके बाद के संस्करण में, कॉन्फ़िगर करने योग्य ऑडियो नीति को बिल्ड विकल्प USE_CONFIGURABLE_AUDIO_POLICY का उपयोग करके चुना जाता है। Android 11 या उच्चतर में, audio_policy_configuration.xml फ़ाइल में ऑडियो नीति इंजन का संस्करण चुना गया है। कॉन्फ़िगर करने योग्य ऑडियो नीति इंजन का चयन करने के लिए, निम्न उदाहरण के रूप में globalConfiguration configurable तत्व के engine_library विशेषता के मान को कॉन्फ़िगर करने योग्य पर सेट करें:

<audioPolicyConfiguration>
    <globalConfiguration engine_library="configurable" />
...
</audioPolicyConfiguration>

ऑडियो नीति रूटिंग API

एंड्रॉइड 6.0 ने एक सार्वजनिक गणना और चयन एपीआई पेश किया जो ऑडियो पैच/ऑडियो पोर्ट इंफ्रास्ट्रक्चर के शीर्ष पर बैठता है और ऐप डेवलपर्स को एक विशिष्ट डिवाइस आउटपुट या कनेक्टेड ऑडियो रिकॉर्ड या ट्रैक के लिए इनपुट के लिए वरीयता इंगित करने की अनुमति देता है।

एंड्रॉइड 7.0 में, गणना और चयन एपीआई को सीटीएस परीक्षणों द्वारा सत्यापित किया जाता है और इसे देशी सी/सी ++ (ओपनएसएल ईएस) ऑडियो स्ट्रीम के लिए रूटिंग शामिल करने के लिए बढ़ाया जाता है। जावा में देशी धाराओं की रूटिंग जारी है, एक ऑडियो रूटिंग इंटरफ़ेस के अतिरिक्त जो AudioRouting और AudioTrack AudioRecord कक्षाओं के लिए विशिष्ट स्पष्ट रूटिंग विधियों का स्थान लेता है, जोड़ता है और बहिष्कृत करता है।

गणना और चयन एपीआई के विवरण के लिए, Android कॉन्फ़िगरेशन इंटरफ़ेस और OpenSLES_AndroidConfiguration.h । ऑडियो रूटिंग के विवरण के लिए, ऑडियो रूटिंग देखें।

मल्टी चैनल समर्थन

यदि आपका हार्डवेयर और ड्राइवर एचडीएमआई के माध्यम से मल्टीचैनल ऑडियो का समर्थन करता है, तो आप ऑडियो स्ट्रीम को सीधे ऑडियो हार्डवेयर में आउटपुट कर सकते हैं (यह ऑडियोफ्लिंगर मिक्सर को बायपास करता है ताकि यह दो चैनलों में मिक्स न हो।) ऑडियो एचएएल को यह उजागर करना चाहिए कि क्या आउटपुट स्ट्रीम प्रोफाइल है मल्टीचैनल ऑडियो क्षमताओं का समर्थन करता है। यदि एचएएल अपनी क्षमताओं को उजागर करता है, तो डिफ़ॉल्ट नीति प्रबंधक एचडीएमआई पर मल्टीचैनल प्लेबैक की अनुमति देता है। कार्यान्वयन विवरण के लिए, device/samsung/tuna/audio/audio_hw.c

यह निर्दिष्ट करने के लिए कि आपके उत्पाद में एक मल्टीचैनल ऑडियो आउटपुट है, अपने उत्पाद के लिए मल्टीचैनल आउटपुट का वर्णन करने के लिए ऑडियो नीति कॉन्फ़िगरेशन फ़ाइल संपादित करें। frameworks/av/services/audiopolicy/config/primary_audio_policy_configuration_tv.xml से निम्न उदाहरण एक गतिशील चैनल मास्क दिखाता है, जिसका अर्थ है कि ऑडियो नीति प्रबंधक कनेक्शन के बाद एचडीएमआई सिंक द्वारा समर्थित चैनल मास्क से पूछताछ करता है।

आप एक स्थिर चैनल मास्क भी निर्दिष्ट कर सकते हैं जैसे AUDIO_CHANNEL_OUT_5POINT1 । ऑडियोफ्लिंगर का मिक्सर किसी ऐसे ऑडियो डिवाइस पर भेजे जाने पर सामग्री को स्वचालित रूप से स्टीरियो में डाउनमिक्स कर देता है जो मल्टीचैनल ऑडियो का समर्थन नहीं करता है।

मीडिया कोडेक

सुनिश्चित करें कि ऑडियो कोडेक आपके हार्डवेयर और ड्राइवर समर्थन आपके उत्पाद के लिए ठीक से घोषित किए गए हैं। विवरण के लिए, कोडेक्स को फ्रेमवर्क में एक्सपोज़ करना देखें।