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

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

फ़िक्स्ड वॉल्यूम का इस्तेमाल करना

AAOS लागू करने के लिए, वॉल्यूम को कंट्रोल करने के लिए सॉफ़्टवेयर मिक्सर. खराब असर से बचने के लिए, config_useFixedVolume फ़्लैग सेट करें सही से बदलें (ज़रूरत के हिसाब से ओवरले):

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

जब config_useFixedVolume फ़्लैग सेट नहीं होता या 'गलत है' पर सेट होता है, ऐप्लिकेशन 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>

car_audio_configuration.xml को लागू करने का उदाहरण.

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

यह तय करना OEM पर निर्भर करता है कि इन वैल्यू को कैसे लागू किया जाना चाहिए और लोगों को दिखेगा. उन्हें पूरी तरह से मीडिया या पूरे समाचार संगठनों पर लागू किया जा सकता है सभी Android साउंड खोजें.

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

ऑडियो डकिंग

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

डक कब करें

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

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

डकिंग का सुझाया गया तरीका

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

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

डकिंग करते समय इन बातों का ध्यान रखें

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

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

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

Android 11 के साथ आने के दौरान एचएएल ऑडियो फ़ोकस एपीआई, यह एचएएल के ऊपर निर्भर करता है. इससे यह पक्का किया जाता है कि सुरक्षा से जुड़ी अहम आवाज़ों को प्राथमिकता दी जाए अन्य. भले ही एचएएल, 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. डिफ़ॉल्ट कार की सेटिंग के यूज़र इंटरफ़ेस (यूआई) को लागू करने की प्रोसेस के दौरान, जुड़े हुए संसाधनों का इस्तेमाल करके 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 पर आधारित Car AudioManager के इन एपीआई का इस्तेमाल किया जाता है:

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