मल्टी-ज़ोन ऑडियो रूटिंग

कार में ऑडियो सेवा इस्तेमाल करने के उदाहरणों को आसान बनाने के लिए, कार ऑडियो सेवा, Core Audio की डाइनैमिक ऑडियो नीति का इस्तेमाल करती है.

  • हर यात्री के लिए अलग-अलग ऑडियो चलाने की सुविधा, जिसे मल्टी-ज़ोन ऑडियो कहा जाता है. इसमें हर ज़ोन में एक साथ आवाज़ चल सकती है.

  • डाइनैमिक ऑडियो ज़ोन कॉन्फ़िगरेशन.

  • यात्री के प्राइमरी ज़ोन में ऑडियो कास्ट करना.

  • यात्री का ऑडियो मिरर.

इस्तेमाल के हर उदाहरण में, कार की ऑडियो सेवा, डाइनैमिक ऑडियो नीति का इस्तेमाल करके, ऑडियो को तय किए गए आउटपुट डिवाइस पर अपने-आप भेजती है.

अलग-अलग ज़ोन के लिए ऑडियो

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

मल्टी-ज़ोन ऑडियो आर्किटेक्चर

कार ऑडियो सेवा का आर्किटेक्चर

पहली इमेज. कार के ऑडियो की सेवा का आर्किटेक्चर.

कार के ऑडियो ज़ोन, ऑडियो आउटपुट, ऑडियो फ़ोकस, और अन्य ऑडियो सेटिंग के एब्स्ट्रैक्शन होते हैं. इन सभी को अलग-अलग मैनेज किया जा सकता है. रूटिंग के लिए, हर ज़ोन को ऑडियो आउटपुट बस डिवाइसों के सेट के तौर पर तय किया जाता है. इन डिवाइसों को ऑडियो नीति कॉन्फ़िगरेशन में व्यवस्थित किया जाता है. हर ऑडियो ज़ोन की परिभाषा के लिए, डिवाइस अलग-अलग होते हैं. पहली इमेज में, बस के डिवाइस 1 से 5, ज़ोन ज़ीरो में आते हैं. बस के डिवाइस 6 से 8, ज़ोन वन में आते हैं. साथ ही, बस के डिवाइस 9 से 11, ज़ोन टू में आते हैं.

कार के ऑडियो सिस्टम का कॉन्फ़िगरेशन

आम तौर पर, आउटपुट डिवाइसों को एक ऑडियो ज़ोन में असाइन किया जाता है. हर ऑडियो ज़ोन को car_audio_configuration.xml में तय किया गया है. यहां दिया गया कोड स्निपेट, पहली इमेज के लिए कार के ऑडियो कॉन्फ़िगरेशन को दिखाता है:

<carAudioConfiguration version="3">
    <zones>
        <zone name="Zone0" audioZneId="0" occupantZoneId="0">
            <zoneConfigs>
                <zoneConfig name="config0" isDefault="true">
                   <volumeGoups>
                        <group>
                            <device address="bus_1">
                                <context context="music"/>
                            </device>
                        </group>
                        <group>
                            <device address="bus_2">
                                <context context="navigation"/>
                            </device>
                        </group>
                        ...
                    </volumeGroups>
                </zoneConfig>
            </zoneConfigs>
        </zone>
        <zone name="Zone1" audioZoneId="1" occupantZoneId="1">
            <zoneConfigs>
                <zoneConfig name="config0" isDefault="true">
                    <volumeGroups>
                        <group>
                            <device address="bus_6">
                                <context context="music"/>
                            </device>
                        </group>
                        <group>
                            <device address="bus_7">
                                <context context="navigation"/>
                           </device>
                       </group>
                       ...
                    </volumeGroups>
                </zoneConfig>
            </zoneConfigs>
        </zone>
        ...
    ...
   </zones>
</carAudioConfiguration>

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

  • ऑडियो ज़ोन आईडी और ऑक्युपेंट ज़ोन आईडी.

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

    • वॉल्यूम बदलने पर, ग्रुप में मौजूद सभी ऑडियो डिवाइस एक ही तरह से कंट्रोल किए जाते हैं.

    • हर ऑडियो डिवाइस को ऑडियो एट्रिब्यूट की एक सूची असाइन की जाती है. इस जानकारी का इस्तेमाल, अलग-अलग एट्रिब्यूट वाले ऑडियो को मिलाकर, ऑडियो नीति के मिक्स बनाने के लिए किया जाता है.

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

मल्टी-ज़ोन ऑडियो के लिए, यात्री के लॉगिन वर्कफ़्लो

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

इमेज

दूसरी इमेज.

इस क्रम में, उपयोगकर्ता के लॉगिन को कार की ऑडियो सेवा पर, ऑक्युपेंट ज़ोन सेवा के ज़रिए भेजा जाता है.

  1. कार की ऑडियो सेवा (किसी खास ऑडियो ज़ोन के लिए), उपयोगकर्ता के डिवाइस से जुड़ी दिलचस्पी को हटाने के लिए, AudioPolicy#removeUserIdDeviceAffinity एपीआई का इस्तेमाल करती है. यह एपीआई, यूज़र आईडी लेता है. इस मामले में, पिछले ज़ोन का उपयोगकर्ता.

  2. AudioPolicy#setUserIdDeviceAffinity API, नए उपयोगकर्ता को किसी ज़ोन में असाइन करता है. यह ज़ोन, किसी खास ज़ोन कॉन्फ़िगरेशन के लिए यूज़र आईडी और सभी डिवाइसों को शामिल करता है.

डाइनैमिक ज़ोन कॉन्फ़िगरेशन

Android 14 में, डाइनैमिक ज़ोन कॉन्फ़िगरेशन की सुविधा जोड़ी गई है. इससे OEM, यात्रियों के लिए डिवाइसों के अलग-अलग सेट कॉन्फ़िगर कर सकते हैं. इस उदाहरण में, पीछे की सीट पर बैठे यात्री, पीछे की सीट के हेडरेस्ट स्पीकर और पीछे की सीट के हेडफ़ोन के बीच स्विच कर सकते हैं.

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

डाइनैमिक ज़ोन कॉन्फ़िगरेशन के लिए वर्कफ़्लो

तीसरी इमेज. डाइनैमिक ज़ोन कॉन्फ़िगरेशन वर्कफ़्लो.

तीसरे चित्र में, डाइनैमिक ज़ोन कॉन्फ़िगरेशन वर्कफ़्लो के लिए आर्किटेक्चर दिखाया गया है. ऑडियो ज़ोन 1 में दो कॉन्फ़िगरेशन, Config 0 और Config 1 शामिल हैं. ये कॉन्फ़िगरेशन, आउटपुट डिवाइस के स्पीकर और हेडरेस्ट से जुड़े होते हैं.

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

यहां दिया गया कोड स्निपेट, इस डाइनैमिक ज़ोन कॉन्फ़िगरेशन का सेटअप दिखाता है.

<carAudioConfiguration version="3">
    <zones>
        <zone name="Zone1" audioZoneId="1" occupantZoneId="1">
            <zoneConfigs>
                <zoneConfig name="Zone 1 Config 0" isDefault="true">
                    <volumeGroups>
                        <group>
                            <device address="bus_100">
                                <context context="music"/>
                                    ***
                            </device>
                        </group>
                    </volumeGroups>
                </zoneConfig>
                <zoneConfig name="Zone 1 Config 1">
                    <volumeGroups>
                        <group>
                            <device address="bus_101">
                                <context context="music"/>
                                    ***
                            </device>
                        </group>
                    </volumeGroups>
                </zoneConfig>
            </zoneConfigs>
        </zone>
    </zones>

ऑडियो कॉन्फ़िगरेशन को मैनेज करने के लिए, कार ऑडियो मैनेजर, कॉन्फ़िगरेशन मैनेज करने के लिए एपीआई उपलब्ध कराता है:

  • किसी ज़ोन के लिए उपलब्ध क्वेरी कॉन्फ़िगरेशन.
  • किसी ज़ोन के लिए, फ़िलहाल सेट किए गए कॉन्फ़िगरेशन के बारे में क्वेरी करें.
  • किसी दूसरे कॉन्फ़िगरेशन पर स्विच करें.

सिस्टम यूज़र इंटरफ़ेस (यूआई) ऐप्लिकेशन या सेवा, इन एपीआई का इस्तेमाल करके ऑडियो ज़ोन के कॉन्फ़िगरेशन को मैनेज कर सकती है, जैसा कि चौथे चित्र में दिखाया गया है. Query API, यात्री को दोनों विकल्प दिखाता है. उपयोगकर्ता अपनी पसंद के कॉन्फ़िगरेशन के लिए, किसी कमांड पर टैप करके कोई दूसरा कॉन्फ़िगरेशन चुन सकता है.

डाइनैमिक ज़ोन कॉन्फ़िगरेशन का वर्कफ़्लो

चौथी इमेज. डाइनैमिक ज़ोन कॉन्फ़िगरेशन वर्कफ़्लो.

प्राइमरी ज़ोन में सवार यात्रियों के लिए ऑडियो कास्ट

Android 14 में, प्राइमरी ज़ोन में यात्री का ऑडियो कास्ट करने की सुविधा जोड़ी गई है. इससे यात्री, प्राइमरी ज़ोन में अपने मीडिया का ऑडियो कास्ट कर सकते हैं. इस तरह, ड्राइवर के पास पूरी तरह से कंट्रोल रहते हुए, यात्री के मीडिया ऑडियो को मुख्य केबिन में कास्ट किया जा सकता है.

नीचे दिए गए इलस्ट्रेशन में, मुख्य ज़ोन के यात्रियों के लिए मीडिया ऑडियो कास्ट करने की सुविधा के आर्किटेक्चर को आसानी से समझाया गया है.

डाइनैमिक ज़ोन कॉन्फ़िगरेशन का वर्कफ़्लो

पांचवीं इमेज. डाइनैमिक ज़ोन कॉन्फ़िगरेशन वर्कफ़्लो.

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

  • यात्री के लिए मीडिया आउटपुट डिवाइस को डिवाइसों की सूची से हटा दिया गया है
  • डिवाइसों की सूची में, ड्राइवर के लिए मीडिया आउटपुट डिवाइस जोड़ा गया है
  • यात्रियों के लिए ऑडियो ज़ोन के बाकी आउटपुट डिवाइस, डिवाइसों की सूची में बने रहते हैं

डिवाइसों की यह नई सूची, AudioPolicy#setUserIdDeviceAffinity एपीआई से यात्री को असाइन की जाती है. एपीआई को डिवाइसों की सूची और यात्री का यूज़र आईडी, दोनों पैरामीटर भेजे जाते हैं. जब ऑडियो सिस्टम की ऑडियो नीति सेवा, यात्री से जुड़े मीडिया ट्रैक के लिए यह क्वेरी करती है कि किस ऑडियो मिक्स को चुना जाए, तो प्राइमरी ज़ोन से जुड़ा मीडिया ऑडियो मिक्स चुना जाता है.

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

यात्री क्षेत्र का ऑडियो मिरर

ऑडियो मिरर की सुविधा की मदद से, यात्री ऑडियो शेयर कर सकते हैं. मिरर की सुविधा, हर ऑडियो ज़ोन में ऑडियो डेटा को डुप्लीकेट करती है, ताकि सभी यात्री एक ही ऑडियो सुन सकें. इस मामले में, ऑडियो फ़ोकस उन यात्रियों के साथ शेयर किया जाता है जो ऑडियो मिररिंग में शामिल हैं.

ऑडियो मिरर रूटिंग

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

नीचे दिए गए इलस्ट्रेशन में, दो यात्रियों के बीच मल्टी-ज़ोन ऑडियो मिररिंग के लिए आसान डायग्राम दिखाया गया है. दोनों यात्रियों के ऑडियो को ऑडियो मिरर डिवाइस, bus_1000 पर भेजा जाता है. ऑडियो एचएएल, सोर्स ज़ोन में सिग्नल का डुप्लीकेट बनाता है.

डाइनैमिक ज़ोन कॉन्फ़िगरेशन का वर्कफ़्लो

छठी इमेज. डाइनैमिक ज़ोन कॉन्फ़िगरेशन वर्कफ़्लो.

यह रूटिंग सिर्फ़ तब चालू होती है, जब यात्री मिररिंग मोड में हों. अगर ऐसा नहीं है, तो ऑडियो ज़ोन के लिए डिवाइसों को यात्रियों को असाइन किया जाता है. जब किसी यात्री के लिए स्क्रीन शेयर करने की सुविधा पहली बार चालू की जाती है, तो AudioPolicy#setUserIdDeviceAffinity एपीआई, रूटिंग में बदलाव करता है:

  • यात्री के लिए मीडिया आउटपुट डिवाइस को डिवाइसों की सूची से हटा दिया गया है.
  • डिवाइसों की सूची में, स्क्रीन शेयर करने वाला डिवाइस जोड़ा गया.
  • यात्री के लिए ऑडियो ज़ोन के बाकी आउटपुट डिवाइस, डिवाइसों की सूची में बने रहते हैं.

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

ऑडियो शेयर करने का वर्कफ़्लो

सातवीं इमेज. ऑडियो मिरर करने का वर्कफ़्लो.

सातवें चित्र में, ऑडियो मिररिंग को मैनेज करने के लिए, कार के ऑडियो मैनेजर के एपीआई को मीडिया सिस्टम सेवा से कॉल किया जाता है. खास तौर पर, उपयोगकर्ता 1 और उपयोगकर्ता 2, CarAudioManager#enableMirrorForAudioZones के लिए ऑडियो को डुप्लीकेट करने की सुविधा चालू करने वाला एपीआई.

कार की ऑडियो सेवा, ऊपर बताए गए तरीके से, कार में सवार लोगों के लिए ऑडियो रूटिंग को कॉन्फ़िगर करती है. कार ऑडियो सेवा, ऑडियो एचएएल को भी सिग्नल भेजती है, ताकि वह डुप्लीकेट ऑडियो को मिरर डिवाइस से संबंधित ज़ोन में कॉन्फ़िगर कर सके.

ऊपर दी गई इमेज में, कार की ऑडियो सेवा mirroring_src=bus_1000;mirroring_dest=bus_10,bus_20 भेजती है

जहां,

bus_1000 सोर्स बस है और bus_10 और bus_20 डेस्टिनेशन बसें हैं.

सिलसिलेवार डायग्राम में, AudioManager#setParameters API के ज़रिए भेजा गया सिग्नल नहीं दिखाया गया है. यह सिग्नल, ऑडियो सेवा के ज़रिए HAL तक पहुंचता है.

ऑडियो मिरर की सुविधा बंद करने पर, यह सिग्नल भेजा जाता है, mirroring_src=bus_1000;mirroring=off. ऑडियो डुप्लीकेट करने की सुविधा बंद होने पर, एचएएल इस सिग्नल का इस्तेमाल करके ऑडियो डुप्लीकेट करने की सुविधा को बंद कर सकता है. ऑडियो को दूसरे डिवाइस पर दिखाने वाले डिवाइसों की जानकारी देने के लिए, कार की ऑडियो कॉन्फ़िगरेशन फ़ाइल में mirroringDevices नाम का एक सेक्शन होता है. इसकी जानकारी यहां दिए गए स्निपेट में दी गई है.

इस स्निपेट में, bus_1000 और bus_2000 दो ऐसे डिवाइस हैं जिन पर ऑडियो को मिरर किया जा सकता है. इससे चार यात्री ऑडियो को मिरर कर सकते हैं.

<carAudioConfiguration version="3">
   <mirroringDevices>
       <mirroringDevice address="bus_1000"/>
       <mirroringDevice address="bus_2000"/>
   </mirroringDevices>
  <zones>
    ....
  </zones>
</carAudioConfiguration>