वॉल्यूम मैनेजमेंट

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

तय वॉल्यूम

AAOS के लागू होने पर, आवाज़ कंट्रोल करने के लिए सॉफ़्टवेयर मिक्सर के बजाय, हार्डवेयर एम्प्लफ़ायर का इस्तेमाल किया जाता है. साइड इफ़ेक्ट से बचने के लिए, config_useFixedVolume फ़्लैग को true पर सेट करें (ज़रूरत के हिसाब से ओवरले करें):

<resources>
    <!-- Car uses hardware amplifier for volume. -->
    <bool name="config_useFixedVolume">true</bool>
</resources>

अगर config_useFixedVolume फ़्लैग सेट नहीं है (या false पर सेट है), तो ऐप्लिकेशन, सॉफ़्टवेयर मिक्सर में स्ट्रीम टाइप के हिसाब से वॉल्यूम बदलने के लिए AudioManager.setStreamVolume() को कॉल कर सकते हैं. ऐसा हमेशा ज़रूरी नहीं होता, क्योंकि इससे अन्य ऐप्लिकेशन पर असर पड़ सकता है. साथ ही, सॉफ़्टवेयर मिक्सर में वॉल्यूम कम करने की वजह से, हार्डवेयर एम्प्लफ़ायर को सिग्नल मिलने पर, उसमें कम बिट उपलब्ध हो सकते हैं.

वॉल्यूम ग्रुप

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

वॉल्यूम ग्रुप तय करना

CarAudioService, car_audio_configuration.xml में तय किए गए वॉल्यूम ग्रुप का इस्तेमाल करता है:

<audioZoneConfiguration version="2.0">
    <zones>
        <zone name="primary zone" isPrimary="true">
            <volumeGroups>
                <group>
                    <device address="bus0_media_out">
                        <context context="music"/>
                    </device>
                </group>
                <group>
                    <device address="bus1_navigation_out">
                        <context context="navigation"/>
                    </device>
                    <device address="bus2_voice_command_out">
                        <context context="voice_command"/>
                    </device>
                </group>
                ...
            </volumeGroups>
        </zone>
     </zones>
</audioZoneConfiguration>

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

वॉल्यूम ग्रुप में होने वाली बढ़ोतरी को कॉन्फ़िगर करना

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

<devicePort tagName="bus0_media_out" role="sink" type="AUDIO_DEVICE_OUT_BUS" address="bus0_media_out">
  <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
  <gains>
    <gain name="" mode="AUDIO_GAIN_MODE_JOINT"
      minValueMB="-3200" maxValueMB="600" defaultValueMB="0" stepValueMB="100"/>
  </gains>
</devicePort>

शुरू करने के दौरान, वॉल्यूम ग्रुप, इससे जुड़े डिवाइसों की गेन वैल्यू की जांच करता है और ग्रुप को इस तरह कॉन्फ़िगर करता है:

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

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

वॉल्यूम ग्रुप आइडेंटिफ़ायर

वॉल्यूम ग्रुप की पहचान, रनटाइम के दौरान उसी क्रम में की जाती है जिस क्रम में उन्हें एक्सएमएल फ़ाइल में तय किया गया है. ऑडियो ज़ोन में आईडी की सीमा 0 से N-1 तक होती है. यहां N, उस ज़ोन में वॉल्यूम ग्रुप की संख्या है. इस तरह, वॉल्यूम ग्रुप आईडी सभी ज़ोन में यूनीक नहीं होते. इन आइडेंटिफ़ायर का इस्तेमाल, वॉल्यूम ग्रुप से जुड़े CarAudioManager एपीआई के लिए किया जाता है. कोई भी एपीआई जो zoneId के बिना groupId को डिफ़ॉल्ट रूप से प्राइमरी ऑडियो ज़ोन में ले जाता है.

एक से ज़्यादा ज़ोन में आवाज़ को मैनेज करना

हर ऑडियो ज़ोन में एक या उससे ज़्यादा वॉल्यूम ग्रुप होने चाहिए. साथ ही, हर वॉल्यूम ग्रुप सिर्फ़ एक ऑडियो ज़ोन से जुड़ा होना चाहिए. इस संबंध को car_audio_configuration.xml के हिस्से के तौर पर तय किया गया है. ज़्यादा जानने के लिए, वॉल्यूम ग्रुप तय करना में ऊपर दिया गया उदाहरण देखें.

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

आवाज़ कम या ज़्यादा करने वाले बटन से होने वाले इवेंट मैनेज करना

Android, वॉल्यूम कंट्रोल के लिए कई कीकोड तय करता है. इनमें ये भी शामिल हैं:

  • KEYCODE_VOLUME_UP
  • KEYCODE_VOLUME_DOWN
  • KEYCODE_VOLUME_MUTE

डिफ़ॉल्ट रूप से, Android वॉल्यूम बटन से होने वाले मुख्य इवेंट को ऐप्लिकेशन पर भेजता है. वाहन संबंधित ऐप्लिकेशन के लिए, इन मुख्य इवेंट को CarAudioService से प्रोसेस किया जाना चाहिए. इसके बाद, setGroupVolume या setMasterMute को ज़रूरत के हिसाब से कॉल किया जाता है. इस व्यवहार को लागू करने के लिए, config_handleVolumeKeysInWindowManager फ़्लैग को true पर सेट करें:

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

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

फ़ेड और बैलेंस

AudioControl HAL के दोनों वर्शन में, वाहन में फ़ेड और बैलेंस सेट करने के लिए एपीआई शामिल हैं. CarAudioManager के लिए काम करने वाले सिस्टम एपीआई, AudioControl HAL को वैल्यू भेजते हैं. इन एपीआई के लिए, android.car.permission.CAR_CONTROL_AUDIO_VOLUME की ज़रूरत होती है. AudioControl API ये हैं:

  • setBalanceTowardRight(float value), कार के दाईं (+) या बाईं (-) ओर मौजूद स्पीकर की आवाज़ को कम या ज़्यादा करता है.

    • 0.0 बीच में दिखता है
    • +1.0 पूरी तरह से सही है
    • -1.0 का मतलब है कि बैटरी पूरी तरह से खत्म हो गई है
    • -1 से 1 की सीमा से बाहर की वैल्यू गड़बड़ी है
  • setFadeTowardFront(float value), कार के आगे (+) या पीछे (-) की ओर स्पीकर वॉल्यूम को शिफ़्ट करता है.

    • 0.0 बीच में दिखता है
    • +1.0 पूरी तरह से फ़ॉरवर्ड है
    • -1.0 का मतलब है कि कैमरा पूरी तरह से पीछे की ओर है
    • -1 से 1 की सीमा से बाहर की वैल्यू गड़बड़ी है

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

ऑडियो डकिंग

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

कब डक करना है

यह तय करना हर OEM की ज़िम्मेदारी है कि एचएएल, डकिंग को कैसे मैनेज करता है. हालांकि, हमारा सुझाव है कि OEM इन दिशा-निर्देशों का पालन करें.

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

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

यहां उन संभावित इंटरैक्शन के बारे में बताया गया है जिनके लिए डकिंग का सुझाव दिया जाता है.

इंटरैक्शन कार्रवाई
EMERGENCY SAFETY को छोड़कर, सभी आवाज़ों को कम या म्यूट कर देता है
SAFETY EMERGENCY को छोड़कर, सभी को डक करता है
NAVIGATION SAFETY और EMERGENCY को छोड़कर, बाकी सभी चीज़ों को डक करता है
CALL SAFETY, EMERGENCY, और NAVIGATION को छोड़कर, बाकी सभी चीज़ों को डक करता है
VOICE बतख CALL_RING
VEHICLE_SOUNDS आपके पास यह तय करने का विकल्प होता है कि कौनसी आवाज़ ज़रूरी है और क्या उसे दूसरी आवाज़ों के मुकाबले कम करना है या नहीं.
MUSIC और ANNOUNCEMENT हर चीज़ से बचने के लिए. हालांकि, टच इंटरैक्शन के लिए बजने वाली टोन, SYSTEM_SOUND के तौर पर बजती हैं.

वीडियो को डक करते समय ध्यान रखने वाली बातें

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

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

सुरक्षा से जुड़ी अहम आवाज़ें

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

वॉल्यूम की सेटिंग का यूज़र इंटरफ़ेस (यूआई) कॉन्फ़िगर करना

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

कार की सेटिंग के यूज़र इंटरफ़ेस (यूआई) में, packages/apps/Car/Settings/res/xml/car_volume_items.xml के हर एलिमेंट (टाइटल और आइकॉन संसाधन) के लिए, AudioAttributes.USAGE एलिमेंट तय किए जाते हैं. यह फ़ाइल, तय किए गए VolumeGroups को सही तरीके से रेंडर करती है. इसके लिए, यह हर VolumeGroup में मौजूद, पहले इस्तेमाल से जुड़े संसाधनों का इस्तेमाल करती है.

उदाहरण के लिए, यहां दिए गए उदाहरण में VolumeGroup को voice_communication और voice_communication_signalling के तौर पर दिखाया गया है. कार की सेटिंग के यूज़र इंटरफ़ेस (यूआई) को डिफ़ॉल्ट रूप से लागू करने पर, voice_communication से जुड़े संसाधनों का इस्तेमाल करके VolumeGroup को रेंडर किया जाता है, क्योंकि यह फ़ाइल में पहली मैच है.

<carVolumeItems xmlns:car="http://schemas.android.com/apk/res-auto">
    <item car:usage="voice_communication"
          car:title="@*android:string/volume_call"
          car:icon="@*android:drawable/ic_audio_ring_notif"/>
    <item car:usage="voice_communication_signalling"
          car:title="@*android:string/volume_call"
          car:icon="@*android:drawable/ic_audio_ring_notif"/>
    <item car:usage="media"
          car:title="@*android:string/volume_music"
          car:icon="@*android:drawable/ic_audio_media"/>
    <item car:usage="game"
          car:title="@*android:string/volume_music"
          car:icon="@*android:drawable/ic_audio_media"/>
    <item car:usage="alarm"
          car:title="@*android:string/volume_alarm"
          car:icon="@*android:drawable/ic_audio_alarm"/>
    <item car:usage="assistance_navigation_guidance"
          car:title="@string/navi_volume_title"
          car:icon="@drawable/ic_audio_navi"/>
    <item car:usage="notification_ringtone"
          car:title="@*android:string/volume_ringtone"
          car:icon="@*android:drawable/ic_audio_ring_notif"/>
    <item car:usage="assistant"
          car:title="@*android:string/volume_unknown"
          car:icon="@*android:drawable/ic_audio_vol"/>
    <item car:usage="notification"
          car:title="@*android:string/volume_notification"
          car:icon="@*android:drawable/ic_audio_ring_notif"/>
    <item car:usage="notification_communication_request"
          car:title="@*android:string/volume_notification"
          car:icon="@*android:drawable/ic_audio_ring_notif"/>
    <item car:usage="notification_communication_instant"
          car:title="@*android:string/volume_notification"
          car:icon="@*android:drawable/ic_audio_ring_notif"/>
    <item car:usage="notification_communication_delayed"
          car:title="@*android:string/volume_notification"
          car:icon="@*android:drawable/ic_audio_ring_notif"/>
    <item car:usage="notification_event"
          car:title="@*android:string/volume_notification"
          car:icon="@*android:drawable/ic_audio_ring_notif"/>
    <item car:usage="assistance_accessibility"
          car:title="@*android:string/volume_notification"
          car:icon="@*android:drawable/ic_audio_ring_notif"/>
    <item car:usage="assistance_sonification"
          car:title="@*android:string/volume_unknown"
          car:icon="@*android:drawable/ic_audio_vol"/>
    <item car:usage="unknown"
          car:title="@*android:string/volume_unknown"
          car:icon="@*android:drawable/ic_audio_vol"/>
</carVolumeItems>

ऊपर दिए गए कॉन्फ़िगरेशन में इस्तेमाल किए गए एट्रिब्यूट और वैल्यू, packages/apps/Car/Settings/res/values/attrs.xml में बताई गई हैं. आवाज़ की सेटिंग का यूज़र इंटरफ़ेस (यूआई), VolumeGroup पर आधारित इन CarAudioManager एपीआई का इस्तेमाल करता है:

  • getVolumeGroupCount() को यह जानना है कि कितने कंट्रोल बनाए जाने चाहिए.
  • getGroupMinVolume() और getGroupMaxVolume(), ताकि निचली और ऊपरी सीमा का पता लगाया जा सके.
  • getGroupVolume() का इस्तेमाल करके, वॉल्यूम का मौजूदा लेवल देखें.
  • registerVolumeChangeObserver() को वॉल्यूम में होने वाले बदलावों की सूचना दी जाएगी.

कार के वॉल्यूम का ग्रुप इवेंट

आवाज़ के अपडेट और म्यूट टॉगल के वाहन से जुड़े इस्तेमाल के उदाहरणों में, कॉन्टेक्स्ट के हिसाब से काम करने वाली ऐसी सुविधाएं होती हैं जो कुछ ऐप्लिकेशन की कार्रवाइयों को तय कर सकती हैं. जैसे, आवाज़ की सेटिंग. कार के ऑडियो स्टैक से मिलने वाली मौजूदा आवाज़ और म्यूट कॉलबैक से, कॉन्टेक्स्ट के हिसाब से सीमित जानकारी मिलती है. Android 14 में CarVolumeGroupEvent को जोड़ा गया है, ताकि आने वाले समय में कार के इस्तेमाल के उदाहरणों को बेहतर तरीके से दिखाया जा सके और इस सुविधा को बड़े पैमाने पर इस्तेमाल किया जा सके. हर इवेंट में तीन तरह की अहम जानकारी होती है:

  • CarVolumeGroupInfo की सूची
  • EventTypes (बिट-मैप किया गया)
  • ExtraInfos की सूची

CarVolumeGroupInfo

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

EventTypes

इससे पता चलता है कि CarVolumeGroupInfo के किस हिस्से में बदलाव हुआ है. ऐप्लिकेशन इस जानकारी का इस्तेमाल, बदलावों की पहचान करने और ज़रूरी कार्रवाइयां करने के लिए कर सकते हैं. उदाहरण के लिए, EVENT_TYPE_VOLUME_MAX_INDEX_CHANGED से पता चलता है कि संबंधित CarVolumeGroups ज़्यादा से ज़्यादा वॉल्यूम में बढ़ोतरी का इंडेक्स बदल गया है और CarVolumeGroupInfo.getMaxVolumeGainIndex() से इसकी क्वेरी की जा सकती है.

नीचे दी गई टेबल में, EventType और CarVolumeGroupInfo के बीच का संबंध दिखाया गया है.

EventType CarVolumeGroupInfo
EVENT_TYPE_VOLUME_GAIN_INDEX_CHANGED CarVolumeGroupInfo.getVolumeGainIndex()
EVENT_TYPE_VOLUME_MIN_INDEX_CHANGED CarVolumeGroupInfo.getMinVolumeGainIndex()
EVENT_TYPE_VOLUME_MAX_INDEX_CHANGED CarVolumeGroupInfo.getMaxVolumeGainIndex()
EVENT_TYPE_MUTE_CHANGED CarVolumeGroupInfo.isMuted()
EVENT_TYPE_VOLUME_BLOCKED_CHANGED CarVolumeGroupInfo.isBlocked()
EVENT_TYPE_ATTENUATION_CHANGED CarVolumeGroupInfo.isAttenuated()
EVENT_TYPE_ZONE_CONFIGURATION_CHANGED CarVolumeGroupInfo.getAudioAttributes()

ExtraInfos

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

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

कार ऑडियो फ़्रेमवर्क, सुझाया गया ExtraInfos उपलब्ध कराने के लिए, AudioControl HAL IAudioGainCallback पर निर्भर करता है. ज़्यादा जानने के लिए, ऑडियो गेन कॉलबैक देखें.

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

कार के वॉल्यूम ग्रुप के इवेंट का कॉलबैक

Android 14 में, खास सुविधाओं वाले और प्लैटफ़ॉर्म ऐप्लिकेशन के लिए एक नया कॉलबैक उपलब्ध कराया गया है. इससे, ऐप्लिकेशन CarVolumeGroupEvents को रजिस्टर कर सकते हैं और इसकी सूचना पा सकते हैं.

  • कॉलबैक के लिए रजिस्टर करने के लिए, CarAudioManager#registerCarVolumeGroupEventCallback() का इस्तेमाल करें

  • कॉलबैक रजिस्ट्रेशन रद्द करने के लिए, CarAudioManager#unregisterCarVolumeGroupEventCallback() का इस्तेमाल करें

अगर कोई ऐप्लिकेशन नए CarVolumeGroupEventCallback और लेगसी CarVolumeCallback के साथ रजिस्टर करता है, तो इवेंट CarVolumeGroupEventCallbacks को प्राथमिकता दी जाती है. कार का ऑडियो स्टैक अब CarVolumeCallback को ट्रिगर नहीं करता. इससे, एक ही इवेंट के लिए एक ही ऐप्लिकेशन में डुप्लीकेट ट्रिगर होने से रोका जा सकता है.

हमारा सुझाव है कि ग्रुप वॉल्यूम को मैनेज करने और बदलावों को म्यूट करने के लिए, CarVolumeGroupEventCallback का इस्तेमाल करें.

ऑडियो गेन कॉलबैक

Android 13 के बाद, कार के ऑडियो सिस्टम में होने वाले बदलावों की वजह से, वॉल्यूम लेवल के अपडेट को मैनेज करने के लिए, AudioControl HAL, असाइनोक्रोनस कॉलबैक को ट्रिगर कर सकता है.

HAL API

AudioControl @2.0 AIDL

AudioControl AIDL HAL के वर्शन 2.0 में ये एपीआई जोड़े गए हैं:

एपीआई मकसद
IAudioControl#registerGainCallback AudioControl HAL के साथ IAudioGainCallback का इंस्टेंस रजिस्टर करता है.
IAudioGainCallback#onAudioDeviceGainsChanged ऑडियो गेन कॉन्फ़िगरेशन में हुए बदलावों की सूचना देने के लिए, असाइनोक्रोनस कॉलबैक.

AudioControl HAL कॉलबैक में, वजहों की सूचियां और उनसे जुड़े AudioGainConfigInfo शामिल होते हैं. इनमें ये शामिल हैं:

  • ज़ोन आईडी
  • डिवाइस का पोर्ट पता
  • वॉल्यूम इंडेक्स > इंडेक्स, पाबंदी वाला इंडेक्स या अपडेट इंडेक्स हो सकता है.

इन वजहों को मुख्य रूप से इन कैटगरी में बांटा जा सकता है:

  • पाबंदी की वजहें. वॉल्यूम और म्यूट करने की सुविधा में कुछ समय के लिए बदलाव.
  • अपडेट की वजहें अपडेट करें. वॉल्यूम के व्यवहार में हमेशा के लिए बदलाव.

पाबंदियों के टाइप

AudioControl HAL AIDL V3 तक, ये पाबंदियां लगाई जा सकती हैं:

  • म्यूट करें
  • ब्लॉकिंग
  • पाबंदी
  • कम होना
पाबंदी चालू है उपयोगकर्ता की ओर से ट्रिगर किया गया वॉल्यूम में बदलाव उपयोगकर्ता की ओर से ट्रिगर किया गया म्यूट टॉगल
म्यूट करें ❌ (अनम्यूट करें)

✔ (म्यूट करें)
ब्लॉकिंग
पाबंदी ❌ (सीमा से ज़्यादा)

✔ (सीमा से कम)
कम होना

पाबंदियों की प्राथमिकता इस तरह से है: म्यूट करना > ब्लॉक करना > सीमित करना > कम करना.

म्यूट करने से जुड़ी पाबंदियां

म्यूट करने से जुड़ी पाबंदियां:

  • Reasons.TCU_MUTE
  • Reasons.REMOTE_MUTE

कार ऑडियो फ़्रेमवर्क, म्यूट की इन दो स्थितियों को अंदरूनी तौर पर मैनेज करता है:

  • उपयोगकर्ता को म्यूट करना. उपयोगकर्ता के अनुरोध के आधार पर टॉगल किया जाता है. यह अनुरोध, CarAudioManager या मुख्य इवेंट के ज़रिए किया जा सकता है.

  • HAL म्यूट करें. AudioGain कॉलबैक के ज़रिए मिली म्यूट करने से जुड़ी पाबंदियों के आधार पर टॉगल किया जाता है.

Settings ऐप्लिकेशन जैसे दर्शकों के लिए, वॉल्यूम-ग्रुप का पूरा म्यूट (CarVolumeGroupInfo.isMuted()) स्टेटस इस बात पर निर्भर करेगा कि ऊपर बताई गई म्यूट करने की सुविधाओं में से कोई एक चालू है या नहीं.

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

इंटरैक्शन का उदाहरण: HAL म्यूट चालू है और उपयोगकर्ता ने म्यूट टॉगल करने का अनुरोध किया है

जब HAL म्यूट चालू हो और उपयोगकर्ता म्यूट बंद हो, तो:

  • वॉल्यूम ग्रुप की पूरी तरह म्यूट की गई स्थिति को true में बदल दिया गया है.
  • उपयोगकर्ता के अनुरोध पर, म्यूट करने की सुविधा चालू की जाएगी.
    • वजह: उपयोगकर्ता की निजता को सुरक्षित रखने के लिए, उसे म्यूट करने के अनुरोधों को हमेशा पूरा किया जाना चाहिए.

जब HAL म्यूट और उपयोगकर्ता म्यूट की सुविधा चालू हो:

  • वॉल्यूम ग्रुप की पूरी तरह म्यूट की गई स्थिति को true में बदल दिया गया है.

  • उपयोगकर्ता के, म्यूट करने की सुविधा बंद करने के अनुरोधों को NOT प्रोसेस किया जाएगा. उपयोगकर्ता के म्यूट किए जाने की कैश मेमोरी में सेव की गई स्थिति चालू रहती है.

    • वजह: उपयोगकर्ता के अनम्यूट करने के अनुरोधों को सिर्फ़ तब स्वीकार किया जाएगा, जब कोई पाबंदी लागू न हो.

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

इंटरैक्शन का उदाहरण: उपयोगकर्ता के म्यूट करने की सेटिंग में कोई बदलाव नहीं होने पर, एचएएल म्यूट की सुविधा चालू और बंद की गई

HAL म्यूट को टॉगल करने से, वॉल्यूम-ग्रुप की पूरी म्यूट स्थिति बदल जाएगी. हालांकि, इससे उपयोगकर्ता के म्यूट होने की स्थिति सीधे तौर पर अपडेट नहीं होती. जब उपयोगकर्ता म्यूट करने की सुविधा बंद हो और HAL म्यूट करने की सुविधा चालू करने के लिए कॉलबैक मिलता है, तो:

  • वॉल्यूम ग्रुप की पूरी तरह म्यूट की गई स्थिति को true में बदल दिया गया है.
  • उपयोगकर्ता से वॉल्यूम बदलने का अनुरोध, NOT तब प्रोसेस किया जाएगा, जब एचएएल म्यूट की सुविधा चालू होगी.

    • वजह: म्यूट मोड चालू होने पर, उपयोगकर्ता को आवाज़ नहीं सुनाई देती. आवाज़ कम या ज़्यादा करने की अनुमति देने पर, आवाज़ बहुत ज़्यादा हो सकती है और उपयोगकर्ता की सुरक्षा को खतरा हो सकता है.

    • वजह: वॉल्यूम कंट्रोल करने वाले ऐप्लिकेशन, कॉलबैक के लिए रजिस्टर कर सकते हैं और उपयोगकर्ता के बिना किसी रुकावट के, अपने-आप अनम्यूट (CarAudioManager.setVolumeGroupMute(...,/* mute=*/ true,..)) को ट्रिगर कर सकते हैं. ऐसा तब होता है, जब OEM ऐसा करने की अनुमति देता है.

जब उपयोगकर्ता म्यूट करने की सुविधा बंद है और एचएएल म्यूट करने की सुविधा बंद है, तब:

  • वॉल्यूम ग्रुप के म्यूट होने की स्थिति को false में बदल दिया गया है.

    वजह: म्यूट की स्थिति को स्टिक रहने की सुविधा देने और उपयोगकर्ता से म्यूट हटाने का अनुरोध करने पर, म्यूट की स्थिति बार-बार टॉगल होने पर, उपयोगकर्ता को ग़ैर-ज़रूरी रुकावट आ सकती है.

  • वॉल्यूम बदलने के लिए उपयोगकर्ताओं के अनुरोधों को सामान्य तौर पर प्रोसेस किया जाएगा.

ब्लॉकिंग

ब्लॉक करने से जुड़ी पाबंदियां ये हैं:

  • Reasons.FORCED_MASTER_MUTE
  • Reasons.REMOTE_MUTE
  • Reasons.TCU_MUTE.

ब्लॉक करने से जुड़ी पाबंदियां चालू होने पर, उपयोगकर्ताओं के ये अनुरोध स्वीकार नहीं किए जाते:

  • वॉल्यूम में बदलाव नहीं किया जा सकता.
  • म्यूट बटन को टॉगल करके चालू या बंद करने की सुविधाएं प्रोसेस की जाती हैं.

पाबंदी

सीमाओं से जुड़ी पाबंदियां ये हैं:

  • Reasons.THERMAL_LIMITATION
  • Reasons.SUSPEND_EXIT_VOL_LIMITATION

पाबंदियां लागू होने पर, उपयोगकर्ताओं से इनके लिए अनुरोध नहीं किए जा सकते:

  • वॉल्यूम कम या ज़्यादा करना:

    • सीमित समय में प्रोसेस किए जाते हैं
    • ऊपर बताई गई सीमाएं प्रोसेस नहीं की जाती हैं
  • म्यूट बटन को टॉगल करके चालू या बंद करने की सुविधाएं प्रोसेस की जाती हैं.

कम होना

डेसिबल में कम होने की पाबंदियां ये हैं:

  • Reasons.ADAS_DUCKING
  • Reasons.NAV_DUCKING
  • Reasons.PROJECTION_DUCKING

डेटा कम करने की पाबंदियां चालू होने पर, उपयोगकर्ताओं से इनके लिए अनुरोध नहीं किए जा सकते:

  • वॉल्यूम में बदलाव करने के अनुरोध को प्रोसेस कर दिया गया है. वॉल्यूम का नया लेवल, पहले से सेट किए गए लेवल के बजाय, कम किए गए लेवल पर सेट हो जाता है. आने वाले समय में वॉल्यूम में होने वाले बदलाव, इस लेवल से किए जाते हैं.

  • म्यूट बटन को टॉगल करके चालू या बंद करने की प्रोसेस पूरी हो गई है.

इंडेक्स करने के लिए अपडेट

वॉल्यूम इंडेक्स के अपडेट को एसिंक्रोनस माना जाता है: Reasons.EXTERNAL_AMP_VOL_FEEDBACK.

इस वजह से, AudioControl HAL वॉल्यूम ग्रुप के मौजूदा इंडेक्स को तय किए गए इंडेक्स पर अपडेट कर सकता है. इसका इस्तेमाल मुख्य रूप से, कार के ऑडियो फ़्रेमवर्क से वॉल्यूम बदलने के अनुरोध के लिए, ऑडियो सिस्टम से फ़ीडबैक के तौर पर किया जाता है. इंडेक्स के अपडेट की जानकारी, ऐप्लिकेशन के साथ भी CarVolumeGroupEvent कॉलबैक के तौर पर दी जाती है, ताकि इंडेक्स को सिंक किया जा सके.

उदाहरण

इस्तेमाल का उदाहरण: उपयोगकर्ता, वॉल्यूम इंडेक्स को 30 पर अपडेट करता है

  • उपयोगकर्ता, वॉल्यूम इंडेक्स को 30 पर सेट करने के लिए, Volume ऐप्लिकेशन का इस्तेमाल करता है.

  • इस इंडेक्स को वॉल्यूम में बदलकर, ऑडियो एचएएल को भेजा जाता है.

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

  • ऑडियो सिस्टम से जवाब मिलता है कि आवाज़ का लेवल सिर्फ़ इंडेक्स 15 पर अपडेट किया गया है (Android को इसकी वजह नहीं पता).

  • AudioControl HAL ट्रिगर को वेंडर के लागू करने का तरीका:

    IAudioGainCallback.onAudioDeviceGainsChanged(EXTERNAL_AMP_VOL_FEEDBACK, {...,  15 /* New index */})
    
  • कार की ऑडियो सेवा, कॉलबैक से मिले नए इंडेक्स का इस्तेमाल करती है. इसका इस्तेमाल, वॉल्यूम ऐप्लिकेशन के लिए कॉलबैक और डेटा को सेव रखने के लिए किया जाता है. उपयोगकर्ता ने 30 इंडेक्स का अनुरोध किया है. हालांकि, ऑडियो सिस्टम के एसिंक्रोनस फ़ीडबैक से इंडेक्स 15 पर अपडेट हो जाता है.

इस्तेमाल का उदाहरण: निलंबित मोड से बाहर निकलने के बाद, पहली बार ऑडियो चलाना

  • निलंबन से पहले वॉल्यूम इंडेक्स, 95 के उच्च लेवल पर सेट है (रेंज: [0-99]).

  • Android, निलंबित मोड में चला जाता है.

  • Android के बंद होने के बाद, उसे फिर से शुरू करने के लिए (उदाहरण के लिए, फिर से शुरू करना):

    • वेंडर Audio HAL/AudioControl HAL, ऑडियो सिस्टम पर स्थानीय तौर पर 30 का सुरक्षित इंडेक्स लागू करता है.

    • वेंडर AudioControl HAL, सेफ़ इंडेक्स के लिए कॉलबैक भी ट्रिगर करता है:

    IAudioGainCallback.onAudioDeviceGainsChanged(SUSPEND_EXIT_VOL_LIMITATION, {...,  30 /* safe index */})
    
  • कार ऑडियो सेवा, कॉलबैक से मिले नए इंडेक्स का इस्तेमाल करती है. इसका इस्तेमाल, डेटा को सेव रखने के लिए किया जाता है. साथ ही, इंडेक्स को सिंक करने वाले वॉल्यूम ऐप्लिकेशन के लिए, अपने कॉलबैक का इस्तेमाल किया जाता है. निलंबित किए जाने से पहले वॉल्यूम इंडेक्स 95 था. हालांकि, फिर से शुरू करने के बाद, AudioControl HAL लागू करने वाला व्यक्ति, इस इंडेक्स को सुरक्षित वॉल्यूम लेवल 30 पर सेट करता है.

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

इस सुविधा के लिए, हम इस्तेमाल के इन मुख्य उदाहरणों पर विचार करते हैं:

  1. वाहन के लिए, 'लाइन के आखिर में' (ईओएल) कॉन्फ़िगरेशन.

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

    • वाहन बनाने वाली कंपनियों को, सेवा शेड्यूल के दौरान वॉल्यूम कॉन्फ़िगरेशन को अपडेट करना पड़ सकता है.

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

  3. ऑन-डिमांड कॉन्फ़िगरेशन. यह ऑफ़र, मांग के हिसाब से ऑडियो सुविधाओं की बढ़ती ज़रूरत को पूरा करने के लिए दिया गया है. इसमें उपयोगकर्ता, कुछ समय के लिए बेहतर सिग्नल प्रोसेसिंग की सदस्यता लेते हैं. वॉल्यूम की नई रेंज के कॉन्फ़िगरेशन, सदस्यता की अवधि के लिए मान्य होते हैं.

डिज़ाइन

डाइनैमिक वॉल्यूम कॉन्फ़िगरेशन तीन चरणों में किया जाता है:

  • डिस्कवरी. वेंडर के AudioControl HAL लागू करने से, वॉल्यूम की नई रेंज के अपडेट का पता चलता है. इसके लिए, वेंडर के मालिकाना हक वाले कस्टम आईपीसी (इंटर-प्रोसेस कम्यूनिकेशन) तंत्र का इस्तेमाल किया जाता है.

    गड़बड़ी का पता चलने के बाद, AudioControl::IModuleChangeCallback के ज़रिए कॉलबैक जनरेट किया जाता है.

  • अपडेट करें. कार ऑडियो स्टैक, वॉल्यूम ग्रुप की स्थितियों को नई वॉल्यूम रेंज के साथ अपडेट करता है.

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

  • कॉलबैक.

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

    • CarVolumeGroupEvent में अपडेट किया गया CarVolumeGroupInfo, इवेंट टाइप (क्या बदला है) और अतिरिक्त जानकारी (यह क्यों बदला है) शामिल होती है.

इमेज

पहली इमेज. डाइनैमिक वॉल्यूम कॉन्फ़िगरेशन.

HAL API

AudioControl @ 3.0 AIDL

AudioControl AIDL HAL के वर्शन 3.0 में ये एपीआई शामिल किए गए हैं:

एपीआई
IAudioControl#setModuleChangeCallback AudioControl HAL की मदद से, IModuleChangeCallback का एक इंस्टेंस सेट करता है.
IAudioControl#clearModuleChangeCallback AudioControl HAL के साथ पहले से सेट किए गए IModuleChangeCallback के इंस्टेंस को मिटाता है.
IModuleChangeCallback#onAudioPortsChanged AudioPorts में हुए बदलावों की सूचना देने के लिए कॉलबैक

क्रम

डाइनैमिक वॉल्यूम कॉन्फ़िगरेशन का क्रम डायग्राम यहां दिखाया गया है.

इमेज

दूसरी इमेज. डाइनैमिक वॉल्यूम कॉन्फ़िगरेशन के लिए सीक्वेंस डायग्राम.

मुख्य बातें

इस सुविधा को ऑप्टिमाइज़ करने के लिए, इन बातों का ध्यान रखें.

  • कॉलबैक के हिस्से के तौर पर दिए गए ऑडियोपोर्ट, वाहन के लिए बने बस के साथ मैच होने चाहिए:

    • डिवाइस पोर्ट. IN_DEVICE, OUT_DEVICE
    • कनेक्शन. BUS
    • पता. Audio HAL की परिभाषा में बताया गया है
    • गेन मोड. JOINT
  • वेंडर को ऑडियो एचएएल नीति में, वॉल्यूम की सीमा की परिभाषाओं का सुपरसेट तय करना ज़रूरी है. साथ ही, वाहन के वैरिएंट के हिसाब से उसे पसंद के मुताबिक बनाने के लिए, कॉलबैक का इस्तेमाल करना होगा. ज़्यादा जानकारी के लिए, IModuleChangeCallbac एआईडीएल की परिभाषा देखें.

  • जब एक से ज़्यादा ऑडियो बस एक ही वॉल्यूम ग्रुप से जुड़ी हों, तो हर ऑडियो बस के लिए वॉल्यूम रेंज की परिभाषाएं एक जैसी होनी चाहिए. ऐसा न करने पर, कार ऑडियो फ़्रेमवर्क, आवाज़ की नई सीमा की परिभाषा को अस्वीकार कर देता है.