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

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

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

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

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

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

XML प्रारूप के लाभ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ऑडियो नीति रूटिंग एपीआई

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

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

गणना और चयन एपीआई के विवरण के लिए, एंड्रॉइड कॉन्फ़िगरेशन इंटरफेस और 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 जैसे स्थिर चैनल मास्क भी निर्दिष्ट कर सकते हैं। ऑडियोफ्लिंगर का मिक्सर किसी ऐसे ऑडियो डिवाइस पर भेजे जाने पर सामग्री को स्वचालित रूप से स्टीरियो में बदल देता है जो मल्टीचैनल ऑडियो का समर्थन नहीं करता है।

मीडिया कोडेक्स

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