Android 10 में, car_audio_configuration.xml ने car_volumes_groups.xml और IAudioControl.getBusForContext की जगह ले ली है. ऑडियो नीति वाली फ़ाइलें, आम तौर पर वेंडर पार्टीशन में मौजूद होती हैं. ये बोर्ड के ऑडियो हार्डवेयर कॉन्फ़िगरेशन को दिखाती हैं. car_audio_configuration.xml में जिन डिवाइसों का रेफ़रंस दिया गया है उन्हें audio_policy_configuration.xml में तय किया जाना चाहिए.
पहली इमेज में, कार ऑडियो सेवा के आर्किटेक्चर की खास जानकारी दिखाई गई है. इसमें, कार ऑडियो सेवा, डिवाइस के लिए ऑडियो सेट अप करने के लिए, कार ऑडियो कॉन्फ़िगरेशन फ़ाइल को पढ़ती है.
पहली इमेज. कार ऑडियो आर्किटेक्चर की खास जानकारी.
कार ऑडियो कॉन्फ़िगरेशन फ़ाइल को डिवाइस पर vendor/etc/ या system/etc/ में रखें. कार ऑडियो सेवा, फ़ाइल को ढूंढने के लिए सबसे पहले vendor/etc/ में खोजती है. ऑडियो कॉन्फ़िगरेशन तय करने के लिए, कार ऑडियो सेवाएं car_audio_configuration.xml को पढ़ती हैं.
कार ऑडियो ज़ोन:
- हर ऑडियो ज़ोन में, यूनीक ऑडियो ज़ोन आईडी होता है.
- हर ऑडियो ज़ोन को, ऑक्यूपेंट ज़ोन से मैप किया जा सकता है.
हर ज़ोन में ऑडियो ऐक्शन एक-दूसरे से अलग होते हैं:
- ऑडियो फ़ोकस
- ऑडियो रूटिंग
- ऑडियो डकिंग
कार के वॉल्यूम ग्रुप:
वॉल्यूम ग्रुप वाले सभी ऑडियो डिवाइस, एक साथ कंट्रोल किए जाते हैं. साथ ही, इन सभी के लिए एक ही तरह के गेन में बदलाव किए जाते हैं. किसी ग्रुप में शामिल सभी डिवाइसों के लिए, ऑडियो गेन कॉन्फ़िगरेशन एक जैसा होना चाहिए.
ऑडियो डिवाइसों की मैपिंग के लिए ऑडियो कॉन्टेक्स्ट. इसका इस्तेमाल करके, ऑडियो मिक्स बनाएं. इससे ऑडियो के इस्तेमाल को आउटपुट डिवाइस से मैप किया जा सकता है.
सभी ऑडियो कॉन्टेक्स्ट को किसी ज़ोन में दिखाया जाना चाहिए. इससे, ऑडियो एट्रिब्यूट के सभी इस्तेमाल के लिए, ऑडियो रूटिंग को सटीक तरीके से सेट अप किया जा सकता है.
ऑडियो कॉन्टेक्स्ट
AAOS के ऑडियो के कॉन्फ़िगरेशन को आसान बनाने के लिए, एक जैसे इस्तेमाल को CarAudioContexts में ग्रुप किया गया है. इन ऑडियो कॉन्टेक्स्ट का इस्तेमाल, CarAudioService में रूटिंग, वॉल्यूम ग्रुप, ऑडियो फ़ोकस, और डकिंग मैनेजमेंट तय करने के लिए किया जाता है. इस टेबल में, AAOS में मौजूद स्टैटिक ऑडियो कॉन्टेक्स्ट की सूची दी गई है.
इस टेबल में, ऑडियो कॉन्टेक्स्ट और इस्तेमाल के बीच मैपिंग के बारे में बताया गया है. नई सिस्टम यूसेज के लिए, हाइलाइट की गई पंक्तियां दी गई हैं.
| CarAudioContext | Associated AttributeUsages |
|---|---|
MUSIC |
UNKNOWNGAMEMEDIA |
NAVIGATION |
ASSISTANCE_NAVIGATION_GUIDANCE |
VOICE_COMMAND |
ASSISTANT |
CALL_RING |
NOTIFICATION_RINGTONE |
CALL |
VOICE_COMMUNICATIONVOICE_COMMUNICATION_SIGNALING |
ALARM |
ALARM |
NOTIFICATION |
NOTIFICATIONNOTIFICATION_* |
SYSTEM_SOUND |
ASSISTANCE_SONIFICATION |
EMERGENCY |
EMERGENCY |
SAFETY |
SAFETY |
VEHICLE_STATUS |
VEHICLE_STATUS |
ANNOUNCEMENT |
ANNOUNCEMENT |
AAOS रूटिंग की सुविधा चालू करना
AAOS पर आधारित रूटिंग का इस्तेमाल करने के लिए, आपको audioUseDynamicRouting फ़्लैग को true पर सेट करना होगा:
<resources>
<bool name="audioUseDynamicRouting">true</bool>
</resources>
जब false पर सेट होता है, तो रूटिंग और CarAudioService की ज़्यादातर सुविधाएं बंद हो जाती हैं. साथ ही, AAOS, AudioService के डिफ़ॉल्ट व्यवहार पर वापस आ जाता है.
कॉन्फ़िगर किया जा सकने वाला ऑडियो पॉलिसी इंजन
Android 14 में कार ऑडियो मैनेजमेंट को और बेहतर बनाने के लिए, AAOS ने कॉन्फ़िगर किया जा सकने वाला ऑडियो पॉलिसी इंजन (सीएपी) की मदद से ऑडियो मैनेजमेंट की सुविधा शुरू की है. इससे, ऑडियो रूटिंग और वॉल्यूम मैनेजमेंट को कंट्रोल करने में ज़्यादा फ़्लेक्सिबिलिटी मिलती है. साथ ही, इसके लिए कई तरह की परिभाषाएं दी गई हैं:
useCoreAudioVolume और useCoreAudioRouting का इस्तेमाल करके, कॉन्फ़िगर किया जा सकने वाला ऑडियो पॉलिसी (सीएपी) इंजन चालू किया जा सकता है. ज़्यादा जानकारी के लिए,
कॉन्फ़िगर किया जा सकने वाला ऑडियो पॉलिसी इंजन
देखें.
प्राइमरी ज़ोन
डिफ़ॉल्ट रूप से, सभी ऑडियो को प्राइमरी ज़ोन पर रूट किया जाता है. सिर्फ़ एक प्राइमरी ज़ोन
होता है. इसे कॉन्फ़िगरेशन में, 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 पर कॉन्फ़िगर किया जाता है, तो हर ग्रुप के लिए वॉल्यूम लेवल, एचएएल को पास किए जाते हैं. इससे, इन डिवाइसों के आउटपुट पर ये लेवल लागू किए जा सकते हैं.
हमारा सुझाव है कि प्राइमरी ज़ोन के लिए, सिस्टम साउंड को अन्य साउंड से अलग रखा जाए. इससे, वाहन के साउंड को ज़्यादा प्राथमिकता दी जा सकती है. कार ऑडियो सेवा, फ़ोकस और डकिंग मैनेजमेंट के मामले में, वाहन के साउंड के लिए पहले से ही ये अंतर करती है. उदाहरण के लिए, इमरजेंसी साउंड के फ़ोकस के अनुरोध को, किसी अन्य फ़ोकस के अनुरोध से ज़्यादा प्राथमिकता दी जाती है.
सेकंडरी ज़ोन के उदाहरण में, सभी ऑडियो कॉन्टेक्स्ट को एक ही डिवाइस और एक वॉल्यूम ग्रुप पर रूट किया जाता है.
सीएपी इंजन के लिए वॉल्यूम ग्रुप की परिभाषा
<group name="media">
<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 name="navigation">
<device address="bus1_navigation_out">
<context context="navigation"/>
</device>
<device address="bus2_voice_command_out">
<context context="voice_command"/>
</device>
</group>
वॉल्यूम ग्रुप का यह नाम, सीएपी इंजन में तय किए गए वॉल्यूम के नाम से मेल खाना चाहिए. इसके अलावा, useFixedVolume को false पर भी सेट किया जाना चाहिए. ज़्यादा जानकारी के लिए,
ऑडियो कॉन्फ़िगरेशन AAOS फ़्लैग
देखें.
ऑक्यूपेंट ज़ोन का ऑडियो कॉन्फ़िगरेशन
Android 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के बीच सिर्फ़ एक-से-एक मैपिंग हो सकती है.
Android 14 में कार ऑडियो कॉन्फ़िगरेशन
Android 14 में, AAOS ने ओईएम प्लगिन सेवा शुरू की है. इससे, कार ऑडियो सेवा की निगरानी में, ऑडियो के व्यवहार को मैनेज किया जा सकता है. नई प्लगिन सेवाओं के साथ-साथ, कार ऑडियो कॉन्फ़िगरेशन फ़ाइल में ये बदलाव किए गए हैं:
- ओईएम की ओर से तय किया गया कार ऑडियो कॉन्टेक्स्ट
- नॉन-प्राइमरी ज़ोन के डाइनैमिक कॉन्फ़िगरेशन
ओईएम की ओर से तय किया गया कार ऑडियो कॉन्टेक्स्ट
Android
14 में, ऑडियो कॉन्फ़िगरेशन में फ़्लेक्सिबिलिटी लाने के लिए, कार ऑडियो सेवा, तय किए गए स्टैटिक ऑडियो कॉन्टेक्स्ट के मुकाबले, ऑडियो के इस्तेमाल को अलग-अलग ग्रुप में बांटने की अनुमति देती है.
ओईएम की ओर से तय किए गए इस कॉन्टेक्स्ट को, car_audio_configuration.xml के वर्शन 3 की फ़ाइल में तय किया जा सकता है.
इसके बजाय, पहले से तय किए गए स्टैटिक ऑडियो कॉन्टेक्स्ट का इस्तेमाल किया जाता है. ओईएम की ओर से तय किए गए कार ऑडियो कॉन्टेक्स्ट का सामान्य फ़ॉर्मैट, बाद में दिखाया गया है.
ओईएम कॉन्टेक्स्ट के लिए, हर कॉन्टेक्स्ट को असाइन किए गए ऑडियो एट्रिब्यूट के इस्तेमाल की सूची के साथ-साथ, एक 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 फ़ाइल में सबसे ऊपर तय किया जाना चाहिए. ओईएम कॉन्टेक्स्ट तय किए जाने के बाद, कार ऑडियो कॉन्फ़िगरेशन की बाकी प्रोसेस पहले की तरह जारी रखी जा सकती है. कार ऑडियो कॉन्टेक्स्ट पर ये नियम लागू होते हैं:
ओईएम कॉन्टेक्स्ट की परिभाषाएं ज़रूरी नहीं हैं. इसके बजाय, स्टैटिक ऑडियो कॉन्टेक्स्ट का इस्तेमाल किया जाता है.
कॉन्टेक्स्ट के नाम न दोहराएं.
ऑडियो एट्रिब्यूट के इस्तेमाल को एक से ज़्यादा कॉन्टेक्स्ट में असाइन न करें.
कॉन्टेक्स्ट बनाने के लिए,
AudioAttributesमें तय किए गए ऑडियो के सभी इस्तेमाल का इस्तेमाल किया जाना चाहिए.
ओईएम ऑडियो कॉन्टेक्स्ट की परिभाषा के लिए, ऑडियो के इस्तेमाल के android.audio.policy.configuration.V7_0.AudioUsage स्ट्रिंग के तौर पर दिखाए गए फ़ॉर्मैट का इस्तेमाल करना ज़रूरी है. आने वाले समय में, Android के एक वर्शन से दूसरे वर्शन पर माइग्रेट करते समय होने वाली गड़बड़ी को कम करने के लिए, ऑडियो एट्रिब्यूट के नए इस्तेमाल को सबसे सही कॉन्टेक्स्ट में असाइन किया जाएगा.
ओईएम प्लगिन ऑडियो सेवा को और बेहतर बनाने के लिए, ओईएम की ओर से तय किए गए कॉन्टेक्स्ट को शुरू किया गया था. हालांकि, इसका इस्तेमाल ओईएम प्लगिन सेवा के बिना भी किया जा सकता है. ऑडियो का व्यवहार, स्टैटिक ऑडियो सेवा जैसा होता है:
ऑडियो फ़ोकस के इंटरैक्शन. ऑडियो एट्रिब्यूट का इस्तेमाल, सबसे सही मैचिंग व्यवहार तय करने के लिए किया जाता है. इसे ऑडियो फ़ोकस इंटरैक्शन मैट्रिक्स से सेट अप किया जाता है. ज़्यादा जानकारी के लिए, ऑडियो फ़ोकस देखें.
ऑडियो वॉल्यूम कंट्रोल ऑडियो एट्रिब्यूट का इस्तेमाल, सबसे सही मैचिंग तय करने के लिए किया जाता है:
- ओईएम की ओर से तय किए गए कॉन्टेक्स्ट के आधार पर वॉल्यूम ग्रुप.
- कॉन्फ़िगर की गई स्टैटिक वॉल्यूम सूची से प्राथमिकता.
ऑडियो डकिंग का व्यवहार:
मौजूदा ऑडियो फ़ोकस के लिए, ऑडियो एट्रिब्यूट के इस्तेमाल का इस्तेमाल, कार ऑडियो कॉन्फ़िगरेशन फ़ाइल में तय किए गए आउटपुट ऑडियो डिवाइस की जानकारी से मैप करने के लिए किया जाता है.
ऑडियो एट्रिब्यूट का इस्तेमाल, स्टैटिक ऑडियो डकिंग मैट्रिक्स के आधार पर, डक करने के लिए, स्टैटिक कॉन्टेक्स्ट को मैप करने के लिए किया जाता है.
सीएपी इंजन की प्रॉडक्ट रणनीतियां
जब किसी डिवाइस को वॉल्यूम या रूटिंग मैनेजमेंट के लिए सीएपी इंजन का इस्तेमाल करना हो, तो ओईएम की ओर से तय किया गया कॉन्टेक्स्ट, सीएपी इंजन की प्रॉडक्ट रणनीति की परिभाषा से मेल खाना चाहिए. ऐसा न होने पर, ओईएम की ओर से तय किए गए कॉन्टेक्स्ट का इस्तेमाल, सीएपी इंजन के बिना किया जा सकता है.
ज़्यादा जानने के लिए, AAOS में सीएपी इंजन की प्रॉडक्ट प्रॉडक्ट रणनीति देखें.
डाइनैमिक ऑडियो ज़ोन के कॉन्फ़िगरेशन
Android 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 की फ़ाइल देखें. Android 14 से, प्राइमरी ज़ोन के लिए सिर्फ़ एक (1) कॉन्फ़िगरेशन हो सकता है. नॉन-प्राइमरी ज़ोन के लिए, एक से ज़्यादा कॉन्फ़िगरेशन हो सकते हैं. कार ऑडियो कॉन्फ़िगरेशन पर ये नियम लागू होते हैं:
प्राइमरी ऑडियो ज़ोन के लिए सिर्फ़ एक कॉन्फ़िगरेशन हो सकता है.
नॉन-प्राइमरी ऑडियो ज़ोन के लिए, एक से ज़्यादा कॉन्फ़िगरेशन हो सकते हैं.
हर ऑडियो ज़ोन और ऑडियो ज़ोन कॉन्फ़िगरेशन के लिए, नाम यूनीक होना चाहिए.
किसी ऑडियो ज़ोन में, ऑडियो कॉन्फ़िगरेशन अलग-अलग हो सकते हैं:
- यह ज़रूरी नहीं है कि वॉल्यूम ग्रुप का सेट-अप एक जैसा हो.
- यह ज़रूरी नहीं है कि ऑडियो कॉन्टेक्स्ट असाइनमेंट एक जैसा हो.
ऑडियो डिवाइस के नाम, ज़ोन या कॉन्फ़िगरेशन के हिसाब से यूनीक होने चाहिए. किसी डिवाइस का नाम, ऑडियो कॉन्फ़िगरेशन या ज़ोन में सिर्फ़ एक बार दिखना चाहिए.
एक ही वॉल्यूम ग्रुप में शामिल ऑडियो डिवाइसों के लिए, ऑडियो गेन कॉन्फ़िगरेशन एक जैसे होने चाहिए.
हर ऑडियो कॉन्फ़िगरेशन के लिए, सभी ऑडियो कॉन्टेक्स्ट (ओईएम या स्टैटिक) असाइन किए जाने चाहिए.
फ़ॉरवर्ड कंपैटिबिलिटी
car_audio_configuration.xml के नए वर्शन में, हर अपडेट में नई सुविधाएं जोड़ी जाती हैं. हालांकि, AAOS के नए वर्शन में, पुराने वर्शन की फ़ाइलों का इस्तेमाल किया जा सकता है. Android के नए वर्शन पर अपडेट करने वाले ओईएम, car_audio_configuration.xml फ़ाइल का फिर से इस्तेमाल कर सकते हैं.
car_audio_configuration.xml में मौजूद नई जानकारी की ज़रूरत वाली किसी नई सुविधा का इस्तेमाल करने के लिए, वर्शन को अपडेट करना ज़रूरी है. किसी फ़ाइल के पुराने वर्शन का इस्तेमाल करने की कोशिश करने पर, अगर उस फ़ाइल वर्शन में जानकारी मौजूद नहीं है, तो कार सेवा शुरू होने पर IllegalStateException गड़बड़ी दिखती है. गड़बड़ी के मैसेज में, इस बारे में ज़रूरी जानकारी होती है कि कौनसी जानकारी इस्तेमाल की गई है और इसके लिए कौनसे वर्शन की ज़रूरत है.