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 | असोसिएटेड एट्रिब्यूटयूज़ |
---|---|
संगीत | UNKNOWN GAME |
नेविगेशन | ASSISTANCE_NAVIGATION_GUIDANCE |
VOICE_COMMAND | ASSISTANT |
CALL_RING | NOTIFICATION_RINGTONE |
कॉल करें | VOICE_COMMUNICATION VOICE_COMMUNICATION_SIGNALING |
अलार्म | ALARM |
सूचना | NOTIFICATION NOTIFICATION_* |
SYSTEM_SOUND | ASSISTANCE_SONIFICATION |
आपातकालीन आवाज़ों की सूचना | EMERGENCY |
Safety | SAFETY |
VEHICLE_STATUS | VEHICLE_STATUS |
एलान | ANNOUNCEMENT |
AAOS रूटिंग की सुविधा चालू करना
AAOS पर आधारित रूटिंग का इस्तेमाल करने के लिए, आपको audioUseDynamicRouting
फ़्लैग को true
पर सेट करना होगा:
<resources>
<bool name="audioUseDynamicRouting">true</bool>
</resources>
जब false
, रूटिंग, और CarAudioService
की ज़्यादातर सुविधाएं बंद होती हैं, तो AAOS AudioService
के डिफ़ॉल्ट तरीके पर स्विच कर जाता है.
प्राइमरी ज़ोन
डिफ़ॉल्ट रूप से, सभी ऑडियो को मुख्य ज़ोन पर भेजा जाता है. सिर्फ़ एक प्राइमरी ज़ोन मौजूद होता है, जिसे कॉन्फ़िगरेशन में एट्रिब्यूट isPrimary="true"
से दिखाया जाता है. प्राइमरी ज़ोन को अपने-आप Audiomanager.PRIMARY_AUDIO_ZONE
असाइन किया जाता है.
सैंपल कॉन्फ़िगरेशन (दूसरा वर्शन)
उदाहरण के लिए, किसी वाहन में दो ज़ोन हो सकते हैं, एक मुख्य ज़ोन और पीछे की सीट पर मनोरंजन वाला सिस्टम. इस स्थिति में, 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
पर कॉन्फ़िगर किया गया है, तो हर ग्रुप के वॉल्यूम लेवल को HAL को भेजा जाता है, ताकि इन डिवाइसों के आउटपुट पर लागू किया जा सके.
हमारा सुझाव है कि मुख्य ज़ोन के लिए, सिस्टम की आवाज़ों को अन्य आवाज़ों से अलग रखें. इससे, वाहन की आवाज़ों को ज़्यादा प्राथमिकता दी जा सकती है. कार की ऑडियो सेवा, फ़ोकस और डकिंग मैनेजमेंट के मामले में, वाहन की आवाज़ों के लिए पहले से ही ये फ़र्क़ करती है. उदाहरण के लिए, आपातकालीन स्थिति में आवाज़ को फ़ोकस करने के अनुरोध को, किसी दूसरे फ़ोकस के अनुरोध से ज़्यादा प्राथमिकता दी जाती है.
चीज़ों को आसान बनाने के लिए, सेकंडरी ज़ोन के उदाहरण में सभी ऑडियो कॉन्टेक्स्ट को एक ही डिवाइस और एक वॉल्यूम ग्रुप पर भेजा गया है.
ऑक्युपेंट ज़ोन के लिए ऑडियो कॉन्फ़िगरेशन
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 ने OEM प्लग इन सेवा को लॉन्च किया है. इसकी मदद से, कार की ऑडियो सेवा की निगरानी में ऑडियो व्यवहार को ज़्यादा बेहतर तरीके से मैनेज किया जा सकता है. नई प्लग इन सेवाओं के साथ-साथ, कार के ऑडियो कॉन्फ़िगरेशन फ़ाइल में ये बदलाव भी किए गए हैं:
- OEM की ओर से तय किया गया कार ऑडियो का कॉन्टेक्स्ट
- प्राइमरी ज़ोन के अलावा अन्य ज़ोन के डाइनैमिक कॉन्फ़िगरेशन
OEM की ओर से तय किया गया कार ऑडियो का कॉन्टेक्स्ट
Android 14 में, कार ऑडियो सेवा की मदद से ऑडियो कॉन्फ़िगरेशन को आसानी से चालू किया जा सकता है. इससे, ऑडियो के इस्तेमाल को ऊपर बताए गए स्टैटिक ऑडियो कॉन्टेक्स्ट से अलग ग्रुप में रखा जा सकता है.
OEM के तय किए गए इस कॉन्टेक्स्ट को car_audio_configuration.xml
वर्शन 3 फ़ाइल में तय किया जा सकता है.
इसके बजाय, फ़िलहाल तय किए गए स्टैटिक ऑडियो कॉन्टेक्स्ट का इस्तेमाल किया जाता है. OEM के तय किए गए कार ऑडियो कॉन्टेक्स्ट का सामान्य फ़ॉर्मैट यहां दिखाया गया है.
हर 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 कॉन्टेक्स्ट तय होने के बाद, कार के ऑडियो कॉन्फ़िगरेशन का बाकी हिस्सा पहले की तरह ही किया जा सकता है. कार के ऑडियो कॉन्टेक्स्ट पर ये नियम लागू होते हैं:
OEM कॉन्टेक्स्ट की परिभाषाएं देना ज़रूरी नहीं है. इसके बजाय, स्टैटिक ऑडियो कॉन्टेक्स्ट का इस्तेमाल किया जाता है.
कॉन्टेक्स्ट के नाम दोहराएं नहीं.
ऑडियो एट्रिब्यूट के इस्तेमाल को एक से ज़्यादा संदर्भों में असाइन न करें.
कॉन्टेक्स्ट बनाने के लिए,
AudioAttributes
में बताए गए ऑडियो के सभी इस्तेमाल का इस्तेमाल किया जाना चाहिए.
असल में, OEM ऑडियो कॉन्टेक्स्ट की परिभाषा के लिए, ऑडियो के इस्तेमाल की android.audio.policy.configuration.V7_0.AudioUsage
स्ट्रिंग का इस्तेमाल किया जाना चाहिए. आने वाले समय में, ऑडियो एट्रिब्यूट के नए इस्तेमाल को सबसे सही संदर्भ में असाइन किया जाएगा. इससे, एक Android वर्शन से दूसरे वर्शन पर माइग्रेट करते समय होने वाली गड़बड़ियों को कम किया जा सकेगा.
OEM प्लग इन ऑडियो सेवा को और बेहतर बनाने के लिए, OEM के तय किए गए कॉन्टेक्स्ट को लॉन्च किया गया था. हालांकि, अब भी OEM प्लग इन सेवा के बिना इसका इस्तेमाल किया जा सकता है. ऑडियो का व्यवहार, स्टैटिक ऑडियो सेवा जैसा ही होता है:
ऑडियो फ़ोकस इंटरैक्शन. ऑडियो एट्रिब्यूट का इस्तेमाल, ऑडियो फ़ोकस इंटरैक्शन मैट्रिक के हिसाब से, सबसे अच्छी तरह से मैच करने वाले व्यवहार का पता लगाने के लिए किया जाता है. ज़्यादा जानकारी के लिए, ऑडियो फ़ोकस लेख पढ़ें.
ऑडियो वॉल्यूम कंट्रोल ऑडियो एट्रिब्यूट का इस्तेमाल, सबसे अच्छी तरह से मैच करने वाले आइटम का पता लगाने के लिए किया जाता है:
- OEM के तय किए गए कॉन्टेक्स्ट के आधार पर वॉल्यूम ग्रुप.
- कॉन्फ़िगर की गई स्टैटिक वॉल्यूम सूची से प्राथमिकता.
ऑडियो डकिंग की सुविधा का काम करने का तरीका:
मौजूदा ऑडियो फ़ोकस के लिए ऑडियो एट्रिब्यूट के इस्तेमाल का इस्तेमाल, कार के ऑडियो कॉन्फ़िगरेशन फ़ाइल में बताई गई ऑडियो डिवाइस की जानकारी को आउटपुट करने के लिए किया जाता है.
ऑडियो एट्रिब्यूट का इस्तेमाल, स्टैटिक ऑडियो डकिंग मैट्रिक के आधार पर, डक करने के लिए मिलते-जुलते स्टैटिक कॉन्टेक्स्ट को मैप करने के लिए किया जाता है.
डाइनैमिक ऑडियो ज़ोन के कॉन्फ़िगरेशन
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) कॉन्फ़िगरेशन हो सकता है. प्राइमरी ज़ोन के अलावा, अन्य ज़ोन में कई कॉन्फ़िगरेशन हो सकते हैं. कार के ऑडियो कॉन्फ़िगरेशन पर ये नियम लागू होते हैं:
मुख्य ऑडियो ज़ोन में सिर्फ़ एक कॉन्फ़िगरेशन हो सकता है.
प्राइमरी ऑडियो ज़ोन के अलावा, अन्य ऑडियो ज़ोन में एक से ज़्यादा कॉन्फ़िगरेशन हो सकते हैं.
हर ऑडियो ज़ोन और ऑडियो ज़ोन कॉन्फ़िगरेशन के लिए, नाम यूनीक होना चाहिए.
ऑडियो ज़ोन में, ऑडियो कॉन्फ़िगरेशन अलग-अलग हो सकते हैं:
- यह ज़रूरी नहीं है कि वॉल्यूम ग्रुप का सेट-अप एक जैसा हो.
- ऑडियो के लिए असाइन किया गया कॉन्टेक्स्ट एक जैसा नहीं होना चाहिए.
ऑडियो आउटपुट डिवाइस के नाम, सभी ज़ोन या कॉन्फ़िगरेशन में यूनीक होने चाहिए. डिवाइस का नाम, ऑडियो कॉन्फ़िगरेशन या ज़ोन में सिर्फ़ एक बार दिखना चाहिए.
एक ही वॉल्यूम ग्रुप में शामिल ऑडियो डिवाइसों के लिए, ऑडियो वॉल्यूम बढ़ाने या घटाने की सुविधा के कॉन्फ़िगरेशन एक ही होने चाहिए.
हर ऑडियो कॉन्फ़िगरेशन के लिए, सभी ऑडियो कॉन्टेक्स्ट (OEM या स्टैटिक) असाइन किए जाने चाहिए.
नए सिस्टम के साथ काम करने की सुविधा
car_audio_configuration.xml
के नए वर्शन में हर अपडेट के साथ नई सुविधाएं आती हैं. हालांकि, AAOS के नए वर्शन में अब भी पुरानी फ़ाइलों का इस्तेमाल किया जा सकता है. Android के नए वर्शन पर अपडेट करने वाले OEM, car_audio_configuration.xml
फ़ाइल का फिर से इस्तेमाल कर सकते हैं.
अगर आपको किसी ऐसी नई सुविधा का इस्तेमाल करना है जिसके लिए car_audio_configuration.xml
में मौजूद नई जानकारी की ज़रूरत है, तो आपको car_audio_configuration.xml
को अपडेट करना होगा. अगर किसी फ़ाइल के पुराने वर्शन का इस्तेमाल करने की कोशिश की जाती है और उसमें ऐसी जानकारी होती है जो उस फ़ाइल के वर्शन में काम नहीं करती, तो कार सेवा शुरू करने पर IllegalStateException
गड़बड़ी का कोड दिखता है. अपवाद वाले मैसेज में, यह जानकारी होती है कि किस जानकारी का इस्तेमाल किया जाता है और कम से कम किस वर्शन की ज़रूरत होती है.