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

Android 10 की रिलीज़ में ऑडियो की काफ़ी हद तक रीफ़ैक्टरिंग की गई है नीति मैनेजर की मदद से, वाहन संबंधित जटिल मामलों में ज़्यादा आसानी से काम किया जा सकता है:

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

Android 7.0 ने ऑडियो टोपोलॉजी के बारे में जानकारी देना.

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

Android 7.0 ने audio_policy.conf के इस्तेमाल को बंद कर दिया है और ज़्यादा सहायता दी है ऑडियो टोपोलॉजी को परिभाषित करने के लिए इसमें बदलाव करने और पार्स करने वाले कई टूल मिलते हैं. साथ ही, इसे कोई भी व्यक्ति आसानी से पढ़ सकता है जो ऑडियो की मुश्किल कैटगरी के बारे में बताने के लिए काफ़ी हो. Android 7.0 एक्सएमएल चुनने के लिए USE_XML_AUDIO_POLICY_CONF बिल्ड फ़्लैग कॉन्फ़िगरेशन फ़ाइलों का फ़ॉर्मैट.

एक्सएमएल फ़ॉर्मैट के फ़ायदे

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

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

पर टेम्प्लेट frameworks/av/services/audiopolicy/config/audio_policy_configuration.xml अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है इनमें से कई सुविधाओं का इस्तेमाल किया जा रहा हो.

फ़ाइल फ़ॉर्मैट और जगह की जानकारी

ऑडियो नीति की नई कॉन्फ़िगरेशन फ़ाइल यह है audio_policy_configuration.xml और इस देश में मौजूद है /system/etc. नीचे दिए गए उदाहरणों में, ऑडियो से जुड़ी नीति को आसानी से कॉन्फ़िगर किया गया है Android 12 और यहां दिए गए वर्शन के लिए एक्सएमएल फ़ाइल फ़ॉर्मैट Android 12.

टॉप-लेवल स्ट्रक्चर में हर ऑडियो एचएएल से जुड़े मॉड्यूल मौजूद हैं हार्डवेयर मॉड्यूल, जहां हर मॉड्यूल में मिक्स पोर्ट, डिवाइस पोर्ट, और रूट:

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

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

शामिल की गई फ़ाइलें

ऑडियो नीति को शामिल करने के लिए, एक्सएमएल को शामिल करने (XInclude) तरीके का इस्तेमाल किया जा सकता है कॉन्फ़िगरेशन की जानकारी मौजूद है. शामिल की गई सभी फ़ाइलों को ऊपर बताए गए स्ट्रक्चर के हिसाब से, नीचे दी गई पाबंदियों का पालन करें:

  • फ़ाइलों में सिर्फ़ टॉप लेवल एलिमेंट शामिल हो सकते हैं.
  • फ़ाइलों में XInclude एलिमेंट नहीं हो सकते.

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

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

पैरामीटर फ़्रेमवर्क का इस्तेमाल करके कॉन्फ़िगरेशन

ऑडियो नीति के कोड को व्यवस्थित किया गया है, ताकि उसे आसानी से समझा जा सके और का पालन करते हुए, पूरी तरह से कॉन्फ़िगरेशन में बताई गई ऑडियो नीति के साथ काम करते हुए फ़ाइलें शामिल हैं. संगठन और ऑडियो की नीति का डिज़ाइन, Intel के पैरामीटर पर आधारित है फ़्रेमवर्क, पैरामीटर मैनेज करने के लिए प्लगिन और नियम पर आधारित फ़्रेमवर्क है.

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

  • एक्सएमएल में, किसी सिस्टम की संरचना और पैरामीटर के बारे में बताएं.
  • बताई गई जानकारी ऐक्सेस करने के लिए, बैकएंड (प्लग इन) में मौजूद कॉन्टेंट को फिर से इस्तेमाल करें या C++ में लिखें पैरामीटर का इस्तेमाल करें.
  • उन शर्तों/नियमों को परिभाषित करना (एक्सएमएल में या डोमेन की खास भाषा में) जिन पर दिए गए पैरामीटर में दी गई वैल्यू होनी चाहिए.

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

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

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

ऑडियो पॉलिसी रूटिंग एपीआई

Android 6.0 ने एक सार्वजनिक Enumeration और Select API को लॉन्च किया, जो ऑडियो पैच/ऑडियो पोर्ट इन्फ़्रास्ट्रक्चर के हिसाब से सबसे ऊपर है और ऐप्लिकेशन को डेवलपर को किसी खास डिवाइस आउटपुट या इनपुट के लिए प्राथमिकता कनेक्ट किए गए ऑडियो रिकॉर्ड या ट्रैक.

Android 7.0 में, CTS परीक्षणों के द्वारा Enumeration और Selection API की पुष्टि की जा चुकी है साथ ही, इसमें नेटिव C/C++ (OpenSL ES) ऑडियो स्ट्रीम के लिए रूटिंग शामिल की गई है. नए वर्शन की मदद से, नेटिव स्ट्रीम की रूटिंग Java में लगातार जारी है. AudioRouting का ऐसा इंटरफ़ेस जो पुराने, जोड़े, और इस्तेमाल किए जाने की जगह को रोक देता है खास तौर पर, AudioTrack और AudioRecord क्लास.

Enumeration और Selection API के बारे में जानकारी के लिए, यह देखें Android कॉन्फ़िगरेशन इंटरफ़ेस और OpenSLES_AndroidConfiguration.h शामिल हैं. ऑडियो रूटिंग की जानकारी के लिए, इसे देखें ऑडियो रूटिंग.

मल्टी-चैनल सहायता

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

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

आप एक स्थिर चैनल मास्क भी निर्दिष्ट कर सकते हैं, जैसे AUDIO_CHANNEL_OUT_5POINT1. AudioFlinger का मिक्सर, काम न करने वाले ऑडियो डिवाइस पर भेजे जाने पर, कॉन्टेंट अपने-आप स्टीरियो में बदल जाता है मल्टीचैनल ऑडियो के साथ काम नहीं करता है.

मीडिया कोडेक

पक्का करें कि आपके हार्डवेयर और ड्राइवर के साथ काम करने वाले ऑडियो कोडेक ठीक से काम करें आपके प्रॉडक्ट के लिए तय किया गया एलान. जानकारी के लिए, यह देखें कोडेक का पता लगाना फ़्रेमवर्क.