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

एंड्रॉइड 10 में, car_audio_configuration.xml car_volumes_groups.xml और IAudioControl.getBusForContext को प्रतिस्थापित कर दिया। ऑडियो नीति फ़ाइलें, आमतौर पर विक्रेता विभाजन में निहित होती हैं, जो बोर्ड के ऑडियो हार्डवेयर कॉन्फ़िगरेशन का प्रतिनिधित्व करती हैं। car_audio_configuration.xml में संदर्भित सभी डिवाइसों को audio_policy_configuration.xml में परिभाषित किया जाना चाहिए।

नीचे चित्र 1 कार ऑडियो सेवा आर्किटेक्चर का एक उच्च-स्तरीय अवलोकन दिखाता है जिसमें कार ऑडियो सेवा डिवाइस के लिए ऑडियो सेट करने के लिए कार ऑडियो कॉन्फ़िगरेशन फ़ाइल को पढ़ती है।

कार ऑडियो आर्किटेक्चर सिंहावलोकन

चित्र 1. कार ऑडियो आर्किटेक्चर अवलोकन।

कार ऑडियो कॉन्फ़िगरेशन फ़ाइल को डिवाइस पर vendor\etc\ या system\etc\ में रखें, vendor\etc\ कार ऑडियो सेवा द्वारा फ़ाइल के लिए खोजा जाने वाला पहला स्थान है। ऑडियो कॉन्फ़िगरेशन निर्धारित करने के लिए कार ऑडियो सेवाएँ car_audio_configuration.xml पढ़ती हैं।

कार ऑडियो जोन:

  • प्रत्येक ऑडियो ज़ोन में एक अद्वितीय ऑडियो ज़ोन आईडी होती है।
  • प्रत्येक ऑडियो ज़ोन को अधिभोगी ज़ोन में मैप किया जा सकता है।
  • प्रत्येक क्षेत्र में ऑडियो क्रियाएँ एक दूसरे से स्वतंत्र हैं:

    • ऑडियो फोकस
    • ऑडियो रूटिंग
    • ऑडियो डकिंग
  • कार वॉल्यूम समूह:

    • सभी ऑडियो डिवाइस जिनमें वॉल्यूम समूह होता है उन्हें समान लाभ परिवर्तनों के साथ एक साथ नियंत्रित किया जाता है। समूह में सभी उपकरणों के लिए ऑडियो गेन कॉन्फ़िगरेशन समान होना चाहिए।

    • ऑडियो डिवाइस मैपिंग के लिए ऑडियो संदर्भ। इसका उपयोग एक ऑडियो मिश्रण बनाने के लिए करें जो ऑडियो उपयोग को आउटपुट डिवाइस पर मैप करता है।

    • सभी ऑडियो संदर्भों को एक क्षेत्र के भीतर प्रदर्शित किया जाना चाहिए। यह ऑडियो रूटिंग को सभी ऑडियो विशेषता उपयोगों के लिए सटीक रूप से सेट करने की अनुमति देता है।

ऑडियो प्रसंग

AAOS ऑडियो के कॉन्फ़िगरेशन को सरल बनाने के लिए, समान उपयोगों को CarAudioContexts में समूहीकृत किया गया है। इन ऑडियो संदर्भों का उपयोग रूटिंग, वॉल्यूम समूह, ऑडियो फोकस और डकिंग प्रबंधन को परिभाषित करने के लिए पूरे CarAudioService में किया जाता है। AAOS में स्थिर ऑडियो संदर्भ नीचे सूचीबद्ध हैं।

यह तालिका ऑडियो संदर्भों और उपयोगों के बीच मैपिंग का वर्णन करती है। नए सिस्टम उपयोग के लिए हाइलाइट की गई पंक्तियाँ प्रदान की गई हैं।

कारऑडियोकॉन्टेक्स्ट संबद्ध गुण उपयोग
संगीत UNKNOWN
GAME
MEDIA
मार्गदर्शन ASSISTANCE_NAVIGATION_GUIDANCE
आवाज़ से आदेश ASSISTANT
ASSISTANCE_ACCESSIBILITY
कॉल_रिंग NOTIFICATION_RINGTONE
पुकारना VOICE_COMMUNICATION
VOICE_COMMUNICATION_SIGNALING
खतरे की घंटी ALARM
अधिसूचना NOTIFICATION
NOTIFICATION_*
सिस्टम_ध्वनि ASSISTANCE_SONIFICATION
आपातकाल EMERGENCY
सुरक्षा SAFETY
वाहन_स्थिति VEHICLE_STATUS
घोषणा ANNOUNCEMENT

AAOS रूटिंग सक्षम करें

AAOS-आधारित रूटिंग का उपयोग करने के लिए, आपको audioUseDynamicRouting फ़्लैग को true पर सेट करना होगा:

<resources>
    <bool name="audioUseDynamicRouting">true</bool>
</resources>

जब false , रूटिंग और अधिकांश CarAudioService अक्षम हो जाता है और AAOS AudioService के डिफ़ॉल्ट व्यवहार पर वापस आ जाता है।

प्राथमिक क्षेत्र

डिफ़ॉल्ट रूप से, सभी ऑडियो को प्राथमिक क्षेत्र में रूट किया जाता है। केवल एक प्राथमिक क्षेत्र मौजूद है, जिसे कॉन्फ़िगरेशन में isPrimary="true" विशेषता द्वारा दर्शाया गया है। प्राथमिक क्षेत्र को स्वचालित रूप से Audiomanager.PRIMARY_AUDIO_ZONE असाइन किया गया है।

नमूना विन्यास (संस्करण 2)

उदाहरण के लिए, एक वाहन में दो ज़ोन हो सकते हैं, एक प्राथमिक ज़ोन और एक पिछली सीट मनोरंजन प्रणाली। इस परिदृश्य में, आप एक संभावित car_audio_configuration.xml संस्करण 2 को निम्नानुसार डिज़ाइन कर सकते हैं:

<audioZoneConfiguration version="2.0">
       <zone name="primary zone" isPrimary="true">
           <volumeGroups>
               <group>
                   <device address="bus0_media_out">
                       <context context="music"/>
                       <context context="announcement"/>
                   </device>
                   <device address="bus3_call_ring_out">
                       <context context="call_ring"/>
                   </device>
                   <device address="bus6_notification_out">
                       <context context="notification"/>
                   </device>
               </group>
               <group>
                   <device address="bus1_navigation_out">
                       <context context="navigation"/>
                   </device>
                   <device address="bus2_voice_command_out">
                       <context context="voice_command"/>
                   </device>
               </group>
               <group>
                   <device address="bus4_call_out">
                       <context context="call"/>
                   </device>
               </group>
               <group>
                   <device address="bus5_alarm_out">
                       <context context="alarm"/>
                   </device>
               </group>
               <group>
                   <device address="bus7_system_sound_out">
                       <context context="system_sound"/>
                       <context context="emergency"/>
                       <context context="safety"/>
                       <context context="vehicle_status"/>
                   </device>
               </group>
           </volumeGroups>
       </zone>
        <zone name="rear seat zone" audioZoneId="1">
           <volumeGroups>
               <group>
                   <device address="bus100_rear_seat">
                       <context context="music"/>
                       <context context="navigation"/>
                       <context context="voice_command"/>
                       <context context="call_ring"/>
                       <context context="call"/>
                       <context context="alarm"/>
                       <context context="notification"/>
                       <context context="system_sound"/>
                       <context context="emergency"/>
                       <context context="safety"/>
                       <context context="vehicle_status"/>
                       <context context="announcement"/>
                   </device>
               </group>
           </volumeGroups>
    </zones>
</audioZoneConfiguration>

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

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

चीजों को सरल रखने के लिए, द्वितीयक क्षेत्र उदाहरण में सभी ऑडियो संदर्भों को एक डिवाइस और एक वॉल्यूम समूह में रूट किया जाता है।

अधिभोगी क्षेत्र ऑडियो कॉन्फ़िगरेशन

एंड्रॉइड 11 में, car_audio_configuration.xml दो नए फ़ील्ड, audioZoneId और occupantZoneId पेश किए। ऑडियो ज़ोन प्रबंधन को नियंत्रित करने के लिए आप audioZoneId उपयोग कर सकते हैं। आप उपयोगकर्ता आईडी के आधार पर रूटिंग कॉन्फ़िगर करने के लिए occupantZoneId उपयोग कर सकते हैं।

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

<audioZoneConfiguration version="2.0">
       <zone name="primary zone" isPrimary="true" occupantZoneId="0">
         ...
       </zone>
       <zone name="rear seat zone" audioZoneId="1" occupantZoneId="1">
         ...
       </zone>
    </zones>
</audioZoneConfiguration>

उपरोक्त कॉन्फ़िगरेशन प्राथमिक क्षेत्र से अधिभोगी क्षेत्र 0 और audioZoneId 1 से occupantZoneId 1 के लिए मैपिंग को परिभाषित करता है। सामान्य तौर पर, अधिभोगी क्षेत्र और ऑडियो क्षेत्र के बीच किसी भी मैपिंग को कॉन्फ़िगर किया जा सकता है। हालाँकि, मैपिंग एक-से-एक होनी चाहिए। दो नए क्षेत्रों को परिभाषित करने वाले नियम नीचे सूचीबद्ध हैं।

  • प्राथमिक क्षेत्र के लिए audioZoneId हमेशा PRIMARY_AUDIO_ZONE आईडी होती है। यदि isPrimary="true" परिभाषित है, तो audioZoneId आवश्यकता नहीं है।

  • audioZoneId और occupantZoneId नंबर दोहराए नहीं जा सकते।

  • audioZoneId और occupantZoneId में केवल एक-से-एक मैपिंग हो सकती है।

एंड्रॉइड 14 कार ऑडियो कॉन्फ़िगरेशन

एंड्रॉइड 14 में, AAOS ने OEM प्लगइन सेवा पेश की, जो आपको कार ऑडियो सेवा द्वारा देखे जाने वाले ऑडियो व्यवहार को अधिक सक्रिय रूप से प्रबंधित करने की अनुमति देती है। नई प्लगइन सेवाओं के साथ, कार ऑडियो कॉन्फ़िगरेशन फ़ाइल में निम्नलिखित परिवर्तन जोड़े गए हैं:

  • OEM परिभाषित कार ऑडियो संदर्भ
  • गैर-प्राथमिक क्षेत्र गतिशील विन्यास

OEM-परिभाषित कार ऑडियो संदर्भ

लचीले ऑडियो कॉन्फ़िगरेशन को सक्षम करने के लिए, एंड्रॉइड 14 में, कार ऑडियो सेवा ऑडियो उपयोगों को ऊपर परिभाषित स्थिर ऑडियो संदर्भों से अलग तरीके से समूहीकृत करने की अनुमति देती है। इस OEM-परिभाषित संदर्भ को car_audio_configuration.xml संस्करण 3 फ़ाइल में परिभाषित किया जा सकता है।

इसके बजाय वर्तमान में परिभाषित स्थिर ऑडियो संदर्भों का उपयोग किया जाता है। OEM-परिभाषित कार ऑडियो संदर्भ का सामान्य प्रारूप नीचे दिखाया गया है।

ओईएम संदर्भों में से प्रत्येक को एक name के साथ-साथ ऑडियो विशेषताओं के उपयोग की एक सूची की आवश्यकता होती है जो संदर्भ को सौंपी गई हैं। उपरोक्त उदाहरण में, दो संदर्भ परिभाषित हैं:

<carAudioConfiguration version="3">
    <oemContexts>
        <oemContext name="media">
            <audioAttributes>
                <usage value="AUDIO_USAGE_MEDIA" />
    <usage value="AUDIO_USAGE_UNKNOWN"/>
            </audioAttributes>
        </oemContext>
        <oemContext name="game">
            <audioAttributes>
                <usage value="AUDIO_USAGE_GAME" />
            </audioAttributes>
        </oemContext>
...
  • media संदर्भ में AUDIO_USAGE_MEDIA और AUDIO_USAGE_UNKNOWN शामिल हैं
  • game संदर्भ में केवल AUDIO_USAGE_GAME शामिल है

संदर्भ को car_audio_configuration.xml फ़ाइल के शीर्ष पर परिभाषित किया जाना चाहिए। जब ओईएम संदर्भ परिभाषित हो जाते हैं, तो बाकी कार ऑडियो कॉन्फ़िगरेशन पहले की तरह आगे बढ़ सकता है। निम्नलिखित नियम कार ऑडियो संदर्भ पर लागू होते हैं:

  • OEM संदर्भ परिभाषाएँ वैकल्पिक हैं। इसके बजाय स्थिर ऑडियो संदर्भ का उपयोग किया जाता है।

  • संदर्भों के नाम न दोहराएँ.

  • एकाधिक संदर्भों के लिए ऑडियो विशेषता उपयोग निर्दिष्ट न करें।

  • AudioAttributes में परिभाषित सभी ऑडियो उपयोगों का उपयोग संदर्भ के निर्माण के लिए किया जाना चाहिए।

कड़ाई से बोलते हुए, ऑडियो उपयोग के android.audio.policy.configuration.V7_0.AudioUsage स्ट्रिंग प्रतिनिधित्व का उपयोग OEM ऑडियो संदर्भ परिभाषा के लिए किया जाना चाहिए। भविष्य में, एक एंड्रॉइड संस्करण से दूसरे में माइग्रेट करते समय त्रुटि को कम करने के लिए नए ऑडियो विशेषता उपयोगों को सबसे उपयुक्त संदर्भ में सौंपा जाएगा।

जबकि OEM-परिभाषित संदर्भ को OEM प्लगइन ऑडियो सेवा को और विस्तारित करने के लिए पेश किया गया था, इसे अभी भी OEM प्लगइन सेवा के बिना उपयोग किया जा सकता है। ऑडियो व्यवहार स्थिर ऑडियो सेवा जैसा दिखता है:

  • ऑडियो फोकस इंटरैक्शन. ऑडियो विशेषता का उपयोग ऑडियो फोकस इंटरेक्शन मैट्रिक्स द्वारा स्थापित सर्वोत्तम मिलान व्यवहार को निर्धारित करने के लिए किया जाता है। विवरण के लिए, ऑडियो फोकस देखें।

  • ऑडियो वॉल्यूम नियंत्रण ऑडियो विशेषता का उपयोग सर्वोत्तम मिलान निर्धारित करने के लिए किया जाता है:

    • OEM-परिभाषित संदर्भ के आधार पर वॉल्यूम समूह।
    • स्थिर वॉल्यूम सूची से प्राथमिकता कॉन्फ़िगर की गई।
  • ऑडियो डकिंग व्यवहार:

    • वर्तमान ऑडियो फ़ोकस के लिए ऑडियो विशेषता उपयोग का उपयोग आउटपुट ऑडियो डिवाइस जानकारी को मैप करने के लिए किया जाता है जैसा कि कार ऑडियो कॉन्फ़िगरेशन फ़ाइल में परिभाषित किया गया है।

    • ऑडियो विशेषता का उपयोग स्थिर ऑडियो डकिंग मैट्रिक्स के आधार पर संबंधित स्थिर संदर्भ को डक में मैप करने के लिए किया जाता है।

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

एंड्रॉइड 14 में, डायनामिक ऑडियो ज़ोन कॉन्फ़िगरेशन को समायोजित करने के लिए, ऑडियो ज़ोन को परिभाषित करने के लिए कार ऑडियो कॉन्फ़िगरेशन स्कीमा को भी संस्करण 3 में अपडेट किया गया है। नए स्कीमा के लिए प्रत्येक ज़ोन के लिए एक कॉन्फ़िगरेशन स्थापित करने की आवश्यकता होती है।

<carAudioConfiguration version="3">
    <!-- optional OEM context -->
    <oemContexts>
      <oemContext name="media">
        <audioAttributes>
          <usage value="AUDIO_USAGE_MEDIA" />
          <usage value="AUDIO_USAGE_UNKNOWN"/>
        </audioAttributes>
      </oemContext>
      <oemContext name="game">
        <audioAttributes>
          <usage value="AUDIO_USAGE_GAME" />
        </audioAttributes>
      </oemContext>
...
    </oemContexts>
  <zones>
    <zone name="primary zone" isPrimary="true" occupantZoneId="0">
      <zoneConfigs>
        <zoneConfig name="primary zone config 0" isDefault="true">
          <volumeGroups>
            <group>
              <device address="bus0_media_out">
                <context context="media"/>
            <context context="game"/>
                <context context="announcement"/>
              </device>
              <device address="bus6_notification_out">
                <context context="notification"/>
              </device>
            </group>
  ...
      </zoneConfigs>
    </zone
  </zones>

अधिक जानने के लिए, device/generic/car/emulator/audio/car_audio_configuration.xml में परिभाषित संस्करण 3 फ़ाइल देखें। एंड्रॉइड 14 से शुरू होकर, प्राथमिक क्षेत्र में केवल एक (1) कॉन्फ़िगरेशन हो सकता है। गैर-प्राथमिक क्षेत्रों में एकाधिक कॉन्फ़िगरेशन हो सकते हैं। निम्नलिखित नियम कार ऑडियो कॉन्फ़िगरेशन पर लागू होते हैं:

  • प्राथमिक ऑडियो ज़ोन में केवल एक कॉन्फ़िगरेशन हो सकता है।

  • गैर-प्राथमिक ऑडियो ज़ोन में एकाधिक कॉन्फ़िगरेशन हो सकते हैं।

  • प्रत्येक ऑडियो ज़ोन और ऑडियो ज़ोन कॉन्फ़िगरेशन के लिए नाम अद्वितीय होना चाहिए।

  • ऑडियो ज़ोन के भीतर, ऑडियो कॉन्फ़िगरेशन भिन्न हो सकते हैं:

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

  • समान वॉल्यूम समूह से संबंधित ऑडियो उपकरणों में समान ऑडियो गेन कॉन्फ़िगरेशन होना चाहिए।

  • प्रत्येक ऑडियो कॉन्फ़िगरेशन के लिए सभी ऑडियो संदर्भ (ओईएम या स्थिर) निर्दिष्ट किए जाने चाहिए।

आगे की अनुकूलता

हालाँकि car_audio_configuration.xml के नए संस्करण प्रत्येक अपडेट में नई सुविधाएँ पेश करते हैं, फिर भी आप AAOS के नए संस्करणों में पुरानी फ़ाइलों का उपयोग कर सकते हैं। एंड्रॉइड के नए संस्करणों में अपडेट करने वाले OEM car_audio_configuration.xml फ़ाइल का पुन: उपयोग कर सकते हैं।

एक नई सुविधा का उपयोग करने के लिए जिसके लिए car_audio_configuration.xml में निहित नई जानकारी की आवश्यकता होती है, संस्करण को अद्यतन किया जाना चाहिए। किसी फ़ाइल के पुराने संस्करण का उपयोग करने का प्रयास उस फ़ाइल संस्करण में समर्थित नहीं होने वाली जानकारी के साथ कार सेवा शुरू होने पर एक IllegalStateException फेंकता है। अपवाद संदेश में प्रासंगिक जानकारी होती है कि किस जानकारी का उपयोग किया जाता है और कौन सा न्यूनतम संस्करण आवश्यक है।