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

आवाज़ का मैनेजमेंट 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 के लिए भी Android 11 का इस्तेमाल किया जा सकता है आउटपुट वाले डिवाइसों पर ऑडियो इफ़ेक्ट लागू करने के लिए. इससे, यह मुमकिन है कि इसके अलावा, आपके पास सही फ़ॉर्मैट में ऑडियो इफ़ेक्ट इस्तेमाल करने का विकल्प भी है. इसके अलावा, फ़ेड और बैलेंस को मैनेज किया जा सकता है आउटपुट वाले डिवाइसों का इस्तेमाल करने के बजाय, इन एपीआई के ज़रिए डाउनलोड करना चाहिए.

ऑडियो डकिंग

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

डक कब करें

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

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

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

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

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

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

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

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

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

<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().

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

वाहन संबंधित इस्तेमाल के उदाहरण, जिनमें आवाज़ को अपडेट किया गया है और जिन्हें म्यूट किया गया है अंडरपिनिंग जो कुछ ऐप्लिकेशन की कार्रवाइयों को तय कर सकती हैं, जैसे कि वॉल्यूम सेटिंग. कार के ऑडियो स्टैक से मौजूदा वॉल्यूम और म्यूट कॉलबैक की सुविधा मिलती है काम की सीमित जानकारी. वाहन संबंधित इस्तेमाल के उदाहरणों और आने वाले समय में सेवा को बेहतर बनाने के लिए 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 VolumeGroupInfo.getMax बदलावोंGainIndex()
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 की वजह से चालू है. आपके पास इसके लिए ऑप्ट इन करने का विकल्प भी है आवाज़ को कम या ज़्यादा करने के लिए, वॉल्यूम बार यूज़र इंटरफ़ेस (यूआई) को शुरुआत में फ़ेड करें. दूसरे लोग टोस्ट दिखाने का विकल्प चुन सकते हैं कि डकिंग चालू है. ऐसा करके वे उपयोगकर्ता को अनुमति दे सकते हैं ताकि आवाज़ कम या ज़्यादा की जा सके.

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

आने वाले समय में कार के ऑडियो फ़्रेमवर्क की ज़रूरतों को पूरा करने के लिए, 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.setVolumeGroupmute(...,/* माइग्रेशन=*/ 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 वेंडर, ऑडियो सिस्टम स्थानीय रूप से.

    • 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 इस ऑडियो कंट्रोल एचएएल.
IModuleChangeCallback#onAudioPortsChanged AudioPort में बदलावों की सूचना देने के लिए कॉलबैक करें

क्रम

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

इमेज

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

अहम पहलू

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

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

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

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