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

वॉल्यूम मैनेजमेंट की सुविधा 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 के दोनों वर्शन में, वाहन में फ़ेड और बैलेंस की सेटिंग के लिए एपीआई शामिल हैं. AudioControl HAL में CarAudioManager पास की वैल्यू से जुड़े सिस्टम के एपीआई जोड़े जा सकते हैं. इन एपीआई के लिए 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 में, डकिंग से जुड़े फ़ैसले लेने के लिए एचएएल को मुख्य जानकारी इस बात से जुड़ी होती है कि दो आउटपुट डिवाइसों में स्ट्रीम चालू हैं या नहीं.

डक कब करें

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

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

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

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

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

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

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

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

सुरक्षा से जुड़ी गंभीर आवाज़ें

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

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

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

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

उदाहरण के लिए, इस उदाहरण में 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().

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

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

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

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

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

इवेंट टाइप

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

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

इवेंट टाइप कारवॉल्यूम ग्रुपजानकारी
EVENT_TYPE_VOTE_GAIN_INDEX_CHANGED Carवॉल्यूमGroupInfo.getVolumeGainIndex()
EVENT_TYPE_TYPE_MIN_INDEX_CHANGED Carवॉल्यूमGroupInfo.getMin बदलावों के साथ फ़ीचर वाली गैस इंडेक्स करें
EVENT_TYPE_FULL_MAX_INDEX_CHANGED Carवॉल्यूमGroupInfo.getMaxVolumeGainIndex()
EVENT_TYPE_MUTE_CHANGED Carवॉल्यूमGroupInfo.ismuted()
EVENT_TYPE_वॉल्यूम_BLOCKED_CHANGED Carवॉल्यूमGroupInfo.isBlocked()
EVENT_TYPE_ATTENUATION_CHANGED Carवॉल्यूमGroupInfo.isAttenuated()
EVENT_TYPE_ZONE_CONFIGURATION_CHANGED Carवॉल्यूमGroupInfo.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, वॉल्यूम लेवल के अपडेट मैनेज करने के लिए एसिंक्रोनस कॉलबैक को ट्रिगर कर सकता है. ऐसा कार के ऑडियो सिस्टम में हुए बदलावों की वजह से हो सकता है.

एचएएल एपीआई

ऑडियोकंट्रोल @2.0 एआईडीएल

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

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

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

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

वजहों को इन कैटगरी में रखा जा सकता है:

  • पाबंदी की वजहें. आवाज़ और म्यूट व्यवहार में अस्थायी बदलाव.
  • वजहें अपडेट करें. वॉल्यूम के व्यवहार में स्थायी बदलाव.

पाबंदी के टाइप

AudioControl HAL AIDL V3 के हिसाब से, इस्तेमाल की जा सकने वाली पाबंदियां इस तरह की हैं:

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

✔ (म्यूट करें)
इससे वीडियो ब्लॉक हो जाएगा
सीमा ❌ (सीमा से ज़्यादा)

✔ (सीमा से कम)
ध्यान देना

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

पाबंदियों को म्यूट करें

म्यूट से जुड़ी पाबंदियां यहां दी गई हैं:

  • Reasons.TCU_MUTE
  • Reasons.REMOTE_MUTE

कार के ऑडियो फ़्रेमवर्क में ये दो म्यूट स्थितियां होती हैं:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • वॉल्यूम ग्रुप की म्यूट स्थिति बदलकर 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 पर सेट करता है.

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

  • 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 SW इमेज को अपडेट किए बिना साइडलोड होता है.

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

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

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

डिज़ाइन करना

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

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

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

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

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

  • कॉलबैक.

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

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

इमेज

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

एचएएल एपीआई

ऑडियोकंट्रोल @ 3.0 एआईडीएल

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

एपीआई
IऑडियोControl#setModuleChangeCallback AudioControl HAL के साथ IModuleChangeCallback का एक इंस्टेंस सेट करता है.
IऑडियोControl#clearModuleChangeCallback AudioControl HAL के साथ, पहले सेट किए गए IModuleChangeCallback इंस्टेंस को साफ़ करता है.
IModuleChangeCallback#onAudioPortsChanged AudioPort में बदलावों की सूचना देने के लिए कॉलबैक करें

क्रम

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

इमेज

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

अहम पहलू

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

  • कॉलबैक के हिस्से के तौर पर दिए गए ऑडियो पोर्ट, Automotive BUS की परिभाषा से मेल खाने चाहिए:

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

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