वॉल्यूम प्रबंधन

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

निश्चित मात्राएँ

एएओएस कार्यान्वयन सॉफ्टवेयर मिक्सर के बजाय वॉल्यूम को नियंत्रित करने के लिए एक हार्डवेयर एम्पलीफायर का उपयोग करता है। दुष्प्रभावों से बचने के लिए, 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>

आरंभीकरण के दौरान, वॉल्यूम समूह संबंधित उपकरणों के लाभ मूल्यों की जांच करता है और समूह को निम्नानुसार कॉन्फ़िगर करता है:

  • चरण आकार। वॉल्यूम समूह द्वारा नियंत्रित सभी उपकरणों के लिए समान होना चाहिए।
  • न्यूनतम लाभ. समूह में उपकरणों के बीच सबसे छोटा न्यूनतम लाभ।
  • अधिकतम लाभ. समूह में उपकरणों के बीच उच्चतम अधिकतम लाभ।
  • डिफ़ॉल्ट लाभ. समूह में डिवाइसों के बीच उच्चतम डिफ़ॉल्ट लाभ।

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

वॉल्यूम समूह पहचानकर्ता

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

मल्टी-ज़ोन वॉल्यूम प्रबंधन

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

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

वॉल्यूम कुंजी घटनाओं को संभालें

एंड्रॉइड वॉल्यूम नियंत्रण के लिए कई कीकोड को परिभाषित करता है, जिनमें शामिल हैं:

  • KEYCODE_VOLUME_UP
  • KEYCODE_VOLUME_DOWN
  • KEYCODE_VOLUME_MUTE

डिफ़ॉल्ट रूप से, एंड्रॉइड वॉल्यूम कुंजी ईवेंट को ऐप्स पर रूट करता है। ऑटोमोटिव कार्यान्वयन को इन प्रमुख घटनाओं को CarAudioService द्वारा संसाधित करने के लिए मजबूर करना चाहिए, जो तब उचित के रूप में setGroupVolume या setMasterMute को कॉल करता है। इस व्यवहार को बाध्य करने के लिए, config_handleVolumeKeysInWindowManager ध्वज को true पर सेट करें:

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

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

फीका और संतुलन

ऑडियोकंट्रोल एचएएल के दोनों संस्करणों में वाहन में फ़ेड और संतुलन सेट करने के लिए एपीआई शामिल हैं। CarAudioManager के लिए संगत सिस्टम API ऑडियोकंट्रोल HAL को मान पास करते हैं। इन API के लिए android.car.permission.CAR_CONTROL_AUDIO_VOLUME की आवश्यकता होती है। ऑडियोकंट्रोल एपीआई हैं:

  • setBalanceTowardRight(float value) स्पीकर के वॉल्यूम को कार के दाएं (+) या बाएं (-) तरफ शिफ्ट कर देता है।

    • 0.0 केन्द्रित है
    • +1.0 पूर्णतः सही है
    • -1.0 पूर्णतः शेष है
    • -1 से 1 की सीमा के बाहर का मान एक त्रुटि है
  • setFadeTowardFront(float value) स्पीकर के वॉल्यूम को कार के आगे (+) या पीछे (-) की ओर शिफ्ट कर देता है।

    • 0.0 केन्द्रित है
    • +1.0 पूरी तरह से आगे है
    • -1.0 पूरी तरह से पीछे है
    • -1 से 1 की सीमा के बाहर का मान एक त्रुटि है

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

ऑडियो डकिंग

ऑडियो डकिंग तब होती है जब वाहन एक स्ट्रीम के लिए लाभ कम कर देता है ताकि एक साथ चल रही दूसरी स्ट्रीम को अधिक स्पष्ट रूप से सुना जा सके। AAOS में, ऑडियो डकिंग HAL द्वारा कार्यान्वित की जाती है। एंड्रॉइड का ओएस से परे ध्वनियों पर कोई नियंत्रण नहीं है। एंड्रॉइड 11 में, डकिंग निर्णय लेने के लिए एचएएल के लिए उपलब्ध मुख्य जानकारी यह है कि दो आउटपुट डिवाइस में सक्रिय स्ट्रीम हैं या नहीं।

कब झुकना है

हालाँकि यह निर्धारित करना व्यक्तिगत ओईएम पर निर्भर है कि एचएएल द्वारा डकिंग को कैसे नियंत्रित किया जाता है, हम निम्नलिखित दिशानिर्देशों की अनुशंसा करते हैं।

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

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

निम्नलिखित संभावित समवर्ती इंटरैक्शन हैं, डकिंग की अनुशंसा की जाती है।

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

डकिंग करते समय विचार

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

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

सुरक्षा महत्वपूर्ण ध्वनियाँ

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

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

AAOS वॉल्यूम सेटिंग्स UI को वॉल्यूम ग्रुप कॉन्फ़िगरेशन से अलग कर देता है। वॉल्यूम समूह लाभ कॉन्फ़िगर करें में वर्णित अनुसार इन्हें ओवरलैड किया जा सकता है। यह पृथक्करण सुनिश्चित करता है कि वॉल्यूम समूहों के कॉन्फ़िगरेशन में परिवर्तन होने पर किसी परिवर्तन की आवश्यकता नहीं है।

कार सेटिंग्स यूआई में, packages/apps/Car/Settings/res/xml/car_volume_items.xml में प्रत्येक परिभाषित AudioAttributes.USAGE से जुड़े UI तत्व (शीर्षक और आइकन संसाधन) शामिल हैं। यह फ़ाइल प्रत्येक 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 -आधारित कारऑडियोमैनेजर एपीआई का उपयोग करता है:

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

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

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

  • CarVolumeGroupInfo की सूची
  • EventTypes (बिट-मैप्ड)
  • ExtraInfos की सूची

कारवॉल्यूमग्रुपइन्फो

इवेंट कॉलबैक के रिसीवर के पास प्रभावित कार वॉल्यूम समूह की जानकारी की सूची तक पहुंच तैयार है। इसका मतलब यह है कि ऐप को नवीनतम स्थिति प्राप्त करने के लिए कार ऑडियो फ्रेमवर्क पर कोई अतिरिक्त कॉल करने की आवश्यकता नहीं है। यह to update the UI or internal states. To make it easier for apps, the aspects that changed in a car volume group are also provided as part of प्राप्त CarVolumeGroupInfos का उपयोग कर सकता है। to update the UI or internal states. To make it easier for apps, the aspects that changed in a car volume group are also provided as part of , जैसा कि नीचे बताया गया है।

घटना प्रकार

परिभाषित करता है कि CarVolumeGroupInfo का कौन सा पहलू बदल गया है। ऐप्स इसका उपयोग परिवर्तनों की पहचान करने और आवश्यक कार्रवाई करने के लिए कर सकते हैं। उदाहरण के लिए, EVENT_TYPE_VOLUME_MAX_INDEX_CHANGED इंगित करता है कि संबंधित CarVolumeGroups' maximum volume gain index has changed and can be queried by

निम्न तालिका 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.isAtenuated()
EVENT_TYPE_ZONE_CONFIGURATION_CHANGED CarVolumeGroupInfo.getAudioAttributes()

एक्स्ट्राइन्फोस

CarVolumeGroup क्यों बदल गया है, इसके बारे में अतिरिक्त जानकारी प्रदान करता है। ऐप्स इस जानकारी का उपयोग उपयोगकर्ता को कार्य करने के लिए सचेत करने या सूचित करने के लिए अतिरिक्त संदर्भ प्रदान करने के लिए कर सकते हैं। उदाहरण के लिए, EXTRA_INFO_TRANSIENT_ATTENUATION_THERMAL थर्मल अधिभार के कारण सक्रिय क्षणिक क्षीणन को इंगित करता है। यदि उपयोगकर्ता वॉल्यूम बढ़ाने का प्रयास करते हैं तो ऐप उन्हें सूचित कर सकता है।

हम ExtraInfos के लिए कोई प्रक्रिया लागू नहीं करते हैं। ExtraInfos के आधार पर प्रक्रिया का निर्धारण करना आपके विवेक पर छोड़ दिया गया है। उदाहरण के लिए, यदि EXTRA_INFO_TRANSIENT_ATTENUATION_DUCKED के कारण क्षीणन सक्रिय है, तो आप उपयोगकर्ता को वॉल्यूम बदलने से रोकने के लिए शुरुआत में वॉल्यूम बार यूआई को फीका करने का विकल्प भी चुन सकते हैं। अन्य लोग टोस्ट दिखाने का विकल्प चुन सकते हैं कि डकिंग सक्रिय है और उपयोगकर्ता को वॉल्यूम बदलने की अनुमति दें।

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

कार ऑडियो फ्रेमवर्क की भविष्य की जरूरतों को पूरा करने के लिए CarVolumeGroupEvent स्केल। हम केवल CarVolumeGroupEvent के माध्यम से नई सुविधाओं का समर्थन करने का इरादा रखते हैं। हम दृढ़ता से अनुशंसा करते हैं कि ऐप डेवलपर्स समूह वॉल्यूम को संभालने और परिवर्तनों को म्यूट करने के लिए CarVolumeGroupEvent का उपयोग करें।

कार वॉल्यूम समूह ईवेंट कॉलबैक

एंड्रॉइड 14, विशेषाधिकार प्राप्त और प्लेटफ़ॉर्म ऐप्स को पंजीकृत करने और CarVolumeGroupEvents के बारे में सूचित करने के लिए एक नया कॉलबैक प्रदान करता है।

  • कॉलबैक के लिए पंजीकरण करने के लिए, CarAudioManager#registerCarVolumeGroupEventCallback() का उपयोग करें

  • कॉलबैक को अपंजीकृत करने के लिए, CarAudioManager#unregisterCarVolumeGroupEventCallback() का उपयोग करें

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

हम दृढ़तापूर्वक अनुशंसा करते हैं कि आप समूह वॉल्यूम प्रबंधित करने और परिवर्तनों को म्यूट करने के लिए CarVolumeGroupEventCallback का उपयोग करें।

ऑडियो लाभ कॉलबैक

एंड्रॉइड 13 के बाद से, ऑडियोकंट्रोल एचएएल कार ऑडियो सिस्टम में बदलाव के कारण वॉल्यूम स्तर अपडेट को प्रबंधित करने के लिए एक एसिंक्रोनस कॉलबैक ट्रिगर कर सकता है।

एचएएल एपीआई

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

ऑडियोकंट्रोल एआईडीएल एचएएल का संस्करण 2.0 निम्नलिखित एपीआई जोड़ता है:

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

AudioControl HAL कॉलबैक में कारणों की सूची और संबंधित AudioGainConfigInfo शामिल है, जिसमें निम्न शामिल हैं:

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

कारणों को मोटे तौर पर इस प्रकार वर्गीकृत किया जा सकता है:

  • प्रतिबंध के कारण. वॉल्यूम और मूक व्यवहार में क्षणिक परिवर्तन।
  • कारण अद्यतन करें. वॉल्यूम व्यवहार में स्थायी परिवर्तन.

प्रतिबंध के प्रकार

AudioControl HAL AIDL V3 के अनुसार, निम्नलिखित प्रकार के समर्थित प्रतिबंध हैं:

  • आवाज़ बंद करना
  • ब्लॉक कर रहा है
  • परिसीमन
  • क्षीणन
सक्रिय प्रतिबंध उपयोगकर्ता द्वारा ट्रिगर किया गया वॉल्यूम परिवर्तन उपयोगकर्ता द्वारा ट्रिगर किया गया म्यूट टॉगल
आवाज़ बंद करना ❌ (अनम्यूट)

✔ (मौन)
ब्लॉक कर रहा है
परिसीमन ❌ (सीमा से अधिक)

✔ (सीमा के अंतर्गत)
क्षीणन

प्रतिबंधों के बीच प्राथमिकता म्यूट > ब्लॉकिंग > लिमिटेशन > क्षीणन है।

प्रतिबंध म्यूट करें

मूक प्रतिबंध हैं:

  • Reasons.TCU_MUTE
  • Reasons.REMOTE_MUTE

कार ऑडियो फ्रेमवर्क आंतरिक रूप से इन दो म्यूट स्थितियों को बनाए रखता है:

  • उपयोगकर्ता म्यूट. CarAudioManager या मुख्य ईवेंट के माध्यम से उपयोगकर्ता के अनुरोध के आधार पर टॉगल किया गया।

  • एचएएल मूक. AudioGain कॉलबैक के माध्यम से प्राप्त म्यूट प्रतिबंधों के आधार पर टॉगल किया गया।

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

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

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

जब एचएएल म्यूट सक्षम हो और उपयोगकर्ता म्यूट अक्षम हो:

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

जब HAL म्यूट सक्षम होता है और उपयोगकर्ता म्यूट सक्षम होता है:

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

  • म्यूट को अक्षम करने के लिए उपयोगकर्ता के अनुरोध पर कार्रवाई NOT की जाएगी। कैश्ड उपयोगकर्ता म्यूट स्थिति सक्षम रहती है।

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

    • कारण: कैश्ड उपयोगकर्ता म्यूट को अन-म्यूट करने से अनपेक्षित ध्वनि विस्फोट हो सकता है और उपयोगकर्ता सुरक्षा खतरे में पड़ सकती है। यह विशेष रूप से सच है यदि म्यूट स्थिति को इग्निशन चक्रों में सक्षम किया गया है जो ध्वनि स्तर की धारणा के बारे में उपयोगकर्ताओं की जागरूकता को कम करता है।

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

एचएएल म्यूट को टॉगल करने से वॉल्यूम-ग्रुप की समग्र म्यूट स्थिति बदल जाएगी। हालाँकि, यह सीधे उपयोगकर्ता की म्यूट स्थिति को अपडेट नहीं करता है। जब उपयोगकर्ता म्यूट अक्षम हो जाता है और सक्षम करने के लिए 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 में बदलने के लिए वॉल्यूम ऐप का उपयोग करता है।

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

  • Audio HAL के विक्रेता कार्यान्वयन से नया वॉल्यूम लाभ प्राप्त होता है और ऑडियो सिस्टम (बाहरी amp की तरह) अपडेट होता है।

  • ऑडियो सिस्टम जवाब देता है कि वॉल्यूम स्तर केवल इंडेक्स 15 पर अपडेट किया गया है (एंड्रॉइड के लिए अज्ञात कारणों से)।

  • AudioControl HAL ट्रिगर्स का विक्रेता कार्यान्वयन:

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

उपयोग का मामला: सस्पेंड से बाहर निकलने के बाद पहला ऑडियो प्लेबैक

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

  • एंड्रॉइड सस्पेंड में प्रवेश करता है।

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

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

    • विक्रेता AudioControl HAL सुरक्षित सूचकांक के लिए कॉलबैक भी ट्रिगर करता है:

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

गतिशील वॉल्यूम कॉन्फ़िगरेशन

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

  1. वाहन एंड-ऑफ-लाइन (ईओएल) कॉन्फ़िगरेशन।

    • वाहन निर्माता वाहन ऑडियो सिस्टम सेटअप के आधार पर ईओएल पर वॉल्यूम कॉन्फ़िगरेशन को अपडेट करना पसंद करते हैं। आमतौर पर, यह एंड्रॉइड SW छवि को अपडेट किए बिना एक साइडलोड है।

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

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

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

डिज़ाइन

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

  • खोज। विक्रेता ऑडियोकंट्रोल एचएएल कार्यान्वयन विक्रेता के स्वामित्व वाले कस्टम आईपीसी तंत्र के माध्यम से नए वॉल्यूम रेंज अपडेट की खोज करता है।

    एक बार पता चलने पर, AudioControl::IModuleChangeCallback के माध्यम से एक कॉलबैक उत्पन्न होता है।

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

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

  • वापस बुलाओ।

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

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

छवि

चित्र 1. गतिशील वॉल्यूम कॉन्फ़िगरेशन।

एचएएल एपीआई

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

ऑडियोकंट्रोल एआईडीएल एचएएल का संस्करण 3.0 निम्नलिखित एपीआई प्रस्तुत करता है:

एपीआई
IAudioControl#setModuleChangeCallback AudioControl HAL के साथ IModuleChangeCallback का एक उदाहरण सेट करता है।
IAudioControl#clearModuleChangeCallback AudioControl HAL के साथ पहले सेट किए गए IModuleChangeCallback के उदाहरण को साफ़ करता है।
IModuleChangeCallback#onAudioPortsबदल गया ऑडियोपोर्ट्स में परिवर्तनों को सूचित करने के लिए कॉलबैक

अनुक्रम

डायनेमिक वॉल्यूम कॉन्फ़िगरेशन का अनुक्रम आरेख नीचे प्रदर्शित किया गया है।

छवि

चित्र 2. गतिशील वॉल्यूम कॉन्फ़िगरेशन के लिए अनुक्रम आरेख।

प्रमुख पहलु

इस सुविधा को अनुकूलित करने के लिए, निम्नलिखित पर विचार करें।

  • कॉलबैक के भाग के रूप में आपूर्ति किए गए ऑडियोपोर्ट्स को ऑटोमोटिव बस परिभाषा से मेल खाना चाहिए :

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

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