مدیریت حجم

مدیریت صدا در CarAudioService وجود دارد که از ولوم‌های ثابت استفاده می‌کند با این انتظار که ولوم‌های زیر HAL توسط تقویت‌کننده سخت‌افزار به جای نرم‌افزار اعمال شوند. 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>

در طول مقداردهی اولیه، گروه حجم مقادیر بهره دستگاه های مرتبط را بررسی می کند و گروه را به صورت زیر پیکربندی می کند:

  • اندازه مرحله باید برای همه دستگاه‌هایی که توسط گروه صدا کنترل می‌شوند یکسان باشد.
  • حداقل سود کمترین حداقل سود در بین دستگاه های گروه.
  • حداکثر سود بالاترین حداکثر سود در بین دستگاه های موجود در گروه.
  • سود پیش فرض بالاترین سود پیش فرض در بین دستگاه های گروه.

با توجه به نحوه پیکربندی این مقادیر، می توان بهره یک گروه حجم را خارج از محدوده پشتیبانی شده برای دستگاه مرتبط با گروه حجم تنظیم کرد. در این حالت، بهره برای آن دستگاه بر اساس اینکه مقدار گروه حجمی زیر یا بالاتر از محدوده باشد، بر روی حداقل یا حداکثر مقدار بهره دستگاه تنظیم می شود.

شناسه های گروه حجم

گروه های حجم در زمان اجرا به ترتیب تعریف شده در فایل XML شناسایی می شوند. شناسه ها از 0 تا N-1 در یک منطقه صوتی متغیر هستند، که در آن N تعداد گروه های صدا در آن منطقه است. به این ترتیب، شناسه های گروه حجمی در بین مناطق منحصر به فرد نیستند. این شناسه‌ها برای APIهای CarAudioManager مرتبط با گروه‌های حجمی استفاده می‌شوند. هر API که یک groupId بدون zoneId می‌گیرد، به‌طور پیش‌فرض به منطقه صوتی اولیه می‌رسد.

مدیریت حجم چند ناحیه ای

انتظار می‌رود هر ناحیه صوتی دارای یک یا چند گروه صدا باشد و هر گروه صدا فقط با یک منطقه صوتی مرتبط است. این رابطه به عنوان بخشی از car_audio_configuration.xml تعریف شده است. برای کسب اطلاعات بیشتر، به مثال بالا در تعریف گروه‌های حجمی مراجعه کنید.

سطوح فعلی حجم برای هر منطقه برای کاربر مرتبط با آن منطقه باقی می ماند. این تنظیمات مختص منطقه هستند، به این معنی که اگر کاربر در صفحه نمایش مرتبط با منطقه اصلی وارد شود، و بعداً در یک منطقه مرتبط با منطقه صوتی ثانویه وارد شود، سطح صدا بارگیری شده و ماندگار برای منطقه اول با سطوح برای منطقه اول متفاوت است. منطقه ثانویه

رویدادهای کلیدی میزان صدا را مدیریت کنید

اندروید چندین کد کلید برای کنترل صدا تعریف می کند، از جمله:

  • 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 تعیین می شود.AUDIO_CONTEXT_VOLUME_PRIORITY.

محو شدن و تعادل

هر دو نسخه AudioControl HAL دارای APIهایی برای تنظیم محو شدن و تعادل در خودرو هستند. APIهای سیستم مربوطه برای CarAudioManager مقادیر را به AudioControl HAL منتقل می کنند. این APIها به android.car.permission.CAR_CONTROL_AUDIO_VOLUME نیاز دارند. API های AudioControl عبارتند از:

  • setBalanceTowardRight(float value) صدای بلندگو را به سمت راست (+) یا چپ (-) ماشین تغییر می دهد.

    • 0.0 در مرکز قرار دارد
    • +1.0 کاملا درست است
    • -1.0 به طور کامل باقی مانده است
    • مقدار خارج از محدوده 1- تا 1 یک خطا است
  • setFadeTowardFront(float value) صدای بلندگو را به سمت جلو (+) یا عقب (-) ماشین تغییر می دهد.

    • 0.0 در مرکز قرار دارد
    • +1.0 کاملاً جلو است
    • -1.0 کاملاً به پشت است
    • مقدار خارج از محدوده 1- تا 1 یک خطا است

شما تصمیم می گیرید که چگونه این مقادیر باید اعمال شوند و چگونه مقادیر را به کاربران نمایش دهید. آنها را می توان به شدت در رسانه ها یا در سراسر هیئت مدیره برای همه صداهای Android اعمال کرد. اندروید 11 همچنین پشتیبانی از اعمال جلوه های صوتی بر روی دستگاه های خروجی را معرفی کرد. با این کار، می‌توان به جای این APIها، محو شدن و تعادل را از طریق جلوه‌های صوتی روی دستگاه‌های خروجی مناسب مدیریت کرد.

اردک صوتی

داک شدن صدا زمانی اتفاق می‌افتد که وسیله نقلیه بهره یک جریان را کاهش می‌دهد تا جریان دیگری که همزمان پخش می‌شود با وضوح بیشتری شنیده شود. در AAOS، ducking صوتی توسط HAL پیاده سازی می شود. اندروید هیچ کنترلی بر صداهای فراتر از سیستم عامل ندارد. در Android 11، اطلاعات اصلی در دسترس HAL برای تصمیم گیری در مورد ducking این است که آیا دو دستگاه خروجی هر دو جریان فعال دارند یا خیر.

چه زمانی به اردک زدن

در حالی که تعیین نحوه استفاده از ducking توسط HAL به عهده OEM فردی است، ما دستورالعمل های زیر را توصیه می کنیم.

  • پخش جریانی چندگانه در اندروید معمولاً زمانی اتفاق می‌افتد که دو برنامه یا سرویس به طور همزمان فوکوس صوتی را حفظ کنند. برای اطلاع از اینکه چه زمانی ممکن است Android فوکوس همزمان اعطا کند، به ماتریس تعامل در انواع محدودیت مراجعه کنید. با معرفی پلاگین صدای خودرو، این به مدیریت AudioFocus شما نیز بستگی دارد.

  • هر جریانی که توسط Android با هم مخلوط شده باشد، قبل از اعمال هرگونه سود انجام می شود. به این ترتیب، هر جریانی که باید هنگام پخش همزمان با دیگری پخش شود، باید به دستگاه‌های خروجی مجزا هدایت شود تا HAL بتواند قبل از مخلوط کردن آنها، داکینگ را اعمال کند.

موارد زیر به تعاملات همزمان بالقوه توصیه می‌شود.

تعامل اقدام
EMERGENCY اردک یا قطع همه چیز به جز SAFETY
SAFETY اردک همه چیز به جز EMERGENCY
NAVIGATION اردک همه چیز به جز SAFETY و EMERGENCY
CALL اردک همه چیز به جز SAFETY ، EMERGENCY ، و NAVIGATION
VOICE اردک CALL_RING
VEHICLE_SOUNDS شما اهمیت صدای فعال را تعیین می کنید و اینکه صداهای دیگر را کاهش می دهد یا خیر.
MUSIC و ANNOUNCEMENT غرق در همه چیز استثناها زنگ های تعامل لمسی هستند که به صورت SYSTEM_SOUND پخش می شوند.

ملاحظات در هنگام اردک زدن

برخی از برنامه‌ها و سرویس‌ها، مانند ناوبری یا دستیار، ممکن است از چند بازیکن برای انجام اقدامات استفاده کنند. هنگامی که جریانی از داده‌ها از طریق دستگاه‌های خروجی جریان نمی‌یابد، از بازکردن تهاجمی خودداری کنید تا اطمینان حاصل شود که رسانه قبل از اینکه پخش بعدی از ناوبری یا برنامه دستیار شروع شود، به حجم کامل باز نمی‌گردد.

برای وسایل نقلیه ای که دارای چندین مرحله صوتی با ایزوله کافی خوب هستند، می توانید صدا را به جای اردک زدن به قسمت های مختلف خودرو هدایت کنید. برای مثال، دستورالعمل‌های ناوبری را می‌توان به بلندگوهای پشتی سر راننده هدایت کرد، در حالی که به پخش موسیقی در سراسر کابین با صدای عادی ادامه می‌دهد.

صداهای حیاتی ایمنی

اندروید 11 API های فوکوس صوتی HAL را معرفی کرد. HAL تضمین می کند که صداهای حیاتی ایمنی نسبت به صداهای دیگر اولویت دارند. اگر HAL فوکوس صوتی را برای USAGE_EMERGENCY نگه می‌دارد، تضمین نمی‌شود که برنامه‌ها و سرویس‌های Android صداها را پخش نکنند. HAL تعیین می‌کند که کدام جریان‌ها از Android باید مخلوط یا بی‌صدا شوند تا صداهای مهم ایمنی پخش شوند.

UI تنظیمات صدا را پیکربندی کنید

AAOS رابط تنظیمات صدا را از پیکربندی گروه صدا جدا می کند. همانطور که در پیکربندی دستاوردهای گروه حجم توضیح داده شده است، می توان آنها را روی هم گذاشت. این جداسازی تضمین می کند که در صورت تغییر پیکربندی گروه های حجم، نیازی به تغییر نیست.

در رابط کاربری تنظیمات خودرو، packages/apps/Car/Settings/res/xml/car_volume_items.xml حاوی عناصر رابط کاربری (منابع عنوان و نماد) مرتبط با هر AudioAttributes.USAGE تعریف‌شده است. این فایل با استفاده از منابع مرتبط با اولین استفاده شناخته شده موجود در هر VolumeGroup ، یک رندر معقول از VolumeGroups تعریف شده ارائه می دهد.

به عنوان مثال، مثال زیر یک 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 اعلام شده‌اند. UI تنظیمات حجم از API های CarAudioManager مبتنی بر VolumeGroup زیر استفاده می کند:

  • getVolumeGroupCount() برای یادگیری تعداد کنترل هایی که باید ترسیم شوند.
  • getGroupMinVolume() و getGroupMaxVolume() برای دریافت کران های پایین و بالایی.
  • getGroupVolume() برای دریافت حجم فعلی.
  • registerVolumeChangeObserver() تا از تغییرات حجم مطلع شود.

رویداد گروه حجم خودرو

موارد استفاده خودرو از به‌روزرسانی صدا و تغییر حالت بی‌صدا، زیربنای متنی دارند که ممکن است عملکرد برخی برنامه‌ها را مشخص کند، مانند تنظیمات صدا. صدای فعلی و پاسخ تماس بی‌صدا از پشته صوتی خودرو، اطلاعات متنی محدودی را ارائه می‌دهد. برای ارائه بهتر موارد استفاده از خودرو و مقیاس‌پذیری آینده، CarVolumeGroupEvent به Android 14 اضافه شده است. هر رویداد دارای سه نوع اطلاعات مهم است:

  • لیست CarVolumeGroupInfo
  • EventTypes (بیت نگاشت)
  • لیست ExtraInfos

CarVolumeGroupInfo

گیرنده پاسخ تماس رویداد دسترسی آماده به لیست اطلاعات گروه حجم خودرو تاثیرگذار دارد. این بدان معنی است که برنامه برای دریافت آخرین وضعیت نیازی به تماس اضافی با فریمورک صوتی Car ندارد. به سادگی می تواند از CarVolumeGroupInfos دریافتی برای به روز رسانی رابط کاربری یا حالت های داخلی استفاده کند. برای آسان‌تر کردن برنامه‌ها، جنبه‌هایی که در گروه حجم خودرو تغییر کرده‌اند نیز به عنوان بخشی از EventTypes ارائه می‌شوند، همانطور که در زیر توضیح داده شده است.

نوع رویداد

تعریف می کند که کدام جنبه از CarVolumeGroupInfo تغییر کرده است. برنامه ها می توانند از این برای شناسایی تغییرات و انجام اقدامات لازم استفاده کنند. برای مثال، EVENT_TYPE_VOLUME_MAX_INDEX_CHANGED نشان می‌دهد که شاخص حداکثر افزایش حجم CarVolumeGroups مربوطه تغییر کرده است و می‌تواند توسط CarVolumeGroupInfo.getMaxVolumeGainIndex() پرس و جو شود.

جدول زیر رابطه بین EventType و CarVolumeGroupInfo را نشان می دهد.

نوع رویداد CarVolumeGroupInfo
EVENT_TYPE_VOLUME_GAIN_INDEX_CHANGED CarVolumeGroupInfo.getVolumeGainIndex()
EVENT_TYPE_VOLUME_MIN_INDEX_CHANGED CarVolumeGroupInfo.getMinVolumeGainIndex()
EVENT_TYPE_VOLUME_MAX_INDEX_CHANGED CarVolumeGroupInfo.getMaxVolumeGainIndex()
EVENT_TYPE_MUTE_CHANGED CarVolumeGroupInfo.isMuted()
EVENT_TYPE_VOLUME_BLOCKED_CHANGED CarVolumeGroupInfo.isBlocked()
EVENT_TYPE_ATTENUATION_CHANGED CarVolumeGroupInfo.isAttenuated()
EVENT_TYPE_ZONE_CONFIGURATION_CHANGED CarVolumeGroupInfo.getAudioAttributes()

اطلاعات اضافی

اطلاعات بیشتری در مورد علت تغییر CarVolumeGroup ارائه می دهد. برنامه‌ها می‌توانند از این اطلاعات برای ارائه زمینه اضافی برای هشدار دادن به کاربر یا اطلاع‌رسانی استفاده کنند. برای مثال، EXTRA_INFO_TRANSIENT_ATTENUATION_THERMAL یک تضعیف گذرا فعال به دلیل اضافه بار حرارتی را نشان می دهد. در صورت تلاش برای افزایش صدا، برنامه می تواند به کاربر اطلاع دهد.

ما هیچ فرآیندی را برای ExtraInfos اعمال نمی کنیم. تعیین فرآیند بر اساس ExtraInfos به اختیار شما واگذار شده است. برای مثال، اگر میرایی به دلیل EXTRA_INFO_TRANSIENT_ATTENUATION_DUCKED فعال است، می‌توانید ابتدا رابط کاربری نوار صدا را محو کنید تا کاربر از تغییر صدا جلوگیری کند. برخی دیگر ممکن است تصمیم بگیرند که نان تست را نشان دهند که ducking فعال است و به کاربر اجازه می دهد صدا را تغییر دهد.

چارچوب صوتی خودرو برای ارائه ExtraInfos پیشنهادی به AudioControl HAL IAudioGainCallback بستگی دارد. برای کسب اطلاعات بیشتر، بازگشت به تماس دریافت صوتی را ببینید.

CarVolumeGroupEvent برای برآوردن نیازهای آینده چارچوب صوتی خودرو مقیاس می‌گیرد. ما قصد داریم از ویژگی های جدید فقط از طریق CarVolumeGroupEvent پشتیبانی کنیم . ما قویاً توصیه می کنیم که توسعه دهندگان برنامه CarVolumeGroupEvent برای مدیریت حجم گروه و بی صدا کردن تغییرات استفاده کنند.

تماس رویداد گروه حجم خودرو

Android 14، یک تماس جدید برای برنامه‌های دارای امتیاز و پلتفرم ارائه می‌کند تا ثبت‌نام کنند و از CarVolumeGroupEvents مطلع شوند.

  • برای ثبت نام برای پاسخ به تماس، از CarAudioManager#registerCarVolumeGroupEventCallback() استفاده کنید

  • برای لغو ثبت تماس، از CarAudioManager#unregisterCarVolumeGroupEventCallback() استفاده کنید

اگر برنامه‌ای با CarVolumeGroupEventCallback جدید و قدیمی CarVolumeCallback ثبت شود، رویداد CarVolumeGroupEventCallbacks در اولویت قرار می‌گیرد. پشته صدای خودرو دیگر CarVolumeCallback فعال نمی کند. این کار از ایجاد محرک های تکراری در همان برنامه برای همان رویداد جلوگیری می کند.

ما قویاً توصیه می کنیم که از CarVolumeGroupEventCallback برای مدیریت حجم گروه و بی صدا کردن تغییرات استفاده کنید.

دریافت تماس پاسخ صوتی

از اندروید 13، AudioControl HAL می‌تواند یک تماس ناهمزمان را برای مدیریت به‌روزرسانی‌های سطح صدا به دلیل تغییرات در سیستم صوتی خودرو راه‌اندازی کند.

HAL API

AudioControl @2.0 AIDL

نسخه 2.0 AudioControl AIDL HAL API زیر را اضافه می کند:

API هدف
IAudioControl#registerGainCallback نمونه ای از IAudioGainCallback را با AudioControl HAL ثبت می کند.
IAudioGainCallback#onAudioDeviceGainsChanged پاسخ تماس ناهمزمان برای اطلاع از تغییرات پیکربندی افزایش صدا.

فراخوانی AudioControl HAL شامل لیستی از دلایل و AudioGainConfigInfo مربوطه است که شامل موارد زیر است:

  • شناسه منطقه
  • آدرس پورت دستگاه
  • نمایه حجم > نمایه می تواند یک شاخص محدود یا یک شاخص به روز باشد.

دلایل را می توان به طور کلی به صورت زیر دسته بندی کرد:

  • دلایل محدودیت تغییر گذرا به صدا و رفتار بی صدا.
  • دلایل را به روز کنید. تغییر دائمی رفتار حجم

انواع محدودیت

از AudioControl HAL AIDL V3 ، موارد زیر انواع محدودیت‌های پشتیبانی‌شده هستند:

  • بی صدا
  • مسدود کردن
  • محدودیت
  • تضعیف
محدودیت فعال تغییر حجم توسط کاربر تغییر حالت بی‌صدا توسط کاربر
بی صدا ❌ (لغو صامت)

✔ (بی صدا)
مسدود کردن
محدودیت ❌ (بیش از حد مجاز)

✔ (تحت محدودیت)
تضعیف

اولویت بین محدودیت ها Mute > Blocking > Limitation > Attenuation است.

بی صدا کردن محدودیت ها

محدودیت های بی صدا عبارتند از:

  • Reasons.TCU_MUTE
  • Reasons.REMOTE_MUTE

چارچوب صوتی خودرو به صورت داخلی این دو حالت بی صدا را حفظ می کند:

  • کاربر بی صدا. تغییر بر اساس درخواست کاربر، از طریق CarAudioManager یا رویدادهای کلیدی.

  • HAL بی صدا. تغییر بر اساس محدودیت‌های بی‌صدا دریافت شده از طریق پاسخ به تماس AudioGain .

برای شنوندگانی مانند برنامه تنظیمات، وضعیت بی‌صدا کردن کلی گروه صدا ( CarVolumeGroupInfo.isMuted() ) بر این اساس است که هر یک از بی‌صداهای بالا فعال باشد.

هنگامی که بی‌صدا کردن HAL فعال است، تمام درخواست‌های تغییر حجم ورودی و لغو بی‌صدا کردن گروه در طول مدت محدودیت نادیده گرفته می‌شوند.

مورد تعامل: HAL بی‌صدا فعال است و درخواست‌های کاربر برای بی‌صدا کردن تغییر می‌کند

وقتی HAL Mute فعال و User Mute غیرفعال است:

  • حالت قطعی کلی گروه حجم به true تغییر کرده است.
  • درخواست‌های کاربر برای فعال کردن بی‌صدا کردن پردازش خواهد شد.
    • دلیل: درخواست‌های بی‌صدا کردن کاربر باید همیشه رعایت شود تا حریم خصوصی کاربران حفظ شود.

وقتی HAL Mute فعال و User Mute فعال است:

  • حالت قطعی کلی گروه حجم به true تغییر کرده است.

  • درخواست‌های کاربر برای غیرفعال کردن بی‌صدا کردن پردازش NOT . حالت نادیده گرفتن کاربر ذخیره شده در حافظه پنهان فعال باقی می ماند.

    • دلیل: درخواست‌های لغو نادیده کاربر تنها در صورت عدم وجود محدودیت فعال مورد بررسی قرار می‌گیرد.

    • دلیل: لغو نادیده گرفتن نادیده گرفته شده کاربر ممکن است باعث انفجار صدای ناخواسته شود و ایمنی کاربر را به خطر بیندازد. این امر به ویژه در صورتی صادق است که حالت بی صدا در تمام چرخه های احتراق فعال باشد که آگاهی کاربران را از درک سطح صدا کاهش می دهد.

مورد تعامل: HAL Mute فعال و غیرفعال است در حالی که کاربر بی‌صدا هیچ تغییری ندارد

خاموش کردن HAL حالت بی‌صدایی کلی گروه صدا را تغییر می‌دهد. با این حال، به طور مستقیم وضعیت بی صدا کاربر را به روز نمی کند. هنگامی که کاربر نادیده گرفته شده غیرفعال است و پاسخ تماس HAL برای فعال کردن بی‌صدا دریافت می‌شود:

  • حالت قطعی کلی گروه حجم به true تغییر کرده است.
  • درخواست‌های کاربر برای تغییر صدا تا زمانی که HAL mute فعال باشد پردازش NOT .

    • دلیل: کاربر نمی تواند صدا را در حالی که قطع فعال است درک کند. اجازه تغییر صدا می تواند منجر به انفجار صدا شود و ایمنی کاربر را به خطر بیندازد.

    • دلیل: اگر این رفتار مورد انتظار OEM باشد، برنامه‌های Volume می‌توانند برای تماس‌های برگشتی ثبت‌نام کنند و قطع صدا (CarAudioManager.setVolumeGroupMute(...,/* mute=*/ true,..)) را به طور خودکار و بدون دخالت کاربر فعال کنند.

هنگامی که بی‌صدا کردن HAL غیرفعال است در حالی که نادیده گرفتن کاربر غیرفعال است:

  • حالت بی صدا گروه حجم به false تغییر کرده است.

    دلیل: چسبناک کردن حالت بی‌صدا کردن و درخواست از کاربر برای لغو بی‌صدا کردن، ممکن است در صورت تغییر مکرر حالت‌های بی‌صدا، کاربر را به طور غیر ضروری قطع کند.

  • درخواست های کاربران برای تغییر حجم به طور معمول پردازش می شود.

مسدود کردن

محدودیت های مسدود کردن عبارتند از:

  • Reasons.FORCED_MASTER_MUTE
  • Reasons.REMOTE_MUTE
  • Reasons.TCU_MUTE .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 برای همگام‌سازی فهرست با Apps در ارتباط است.

نمونه ها

Use Case: کاربر شاخص حجم را به 30 به روز می کند

  • کاربر از برنامه Volume برای تغییر شاخص حجم به 30 استفاده می کند.

  • این شاخص به افزایش حجم تبدیل شده و به Audio HAL ارسال می شود.

  • پیاده سازی های فروشنده Audio HAL افزایش حجم جدید را دریافت می کنند و سیستم صوتی را به روز می کنند (مانند آمپر خارجی).

  • سیستم صوتی پاسخ می دهد که سطح صدا فقط تا شاخص 15 به روز می شود (به دلایلی که برای اندروید ناشناخته است).

  • پیاده سازی های فروشنده AudioControl HAL :

    IAudioGainCallback.onAudioDeviceGainsChanged(EXTERNAL_AMP_VOL_FEEDBACK, {...,  15 /* New index */})
    
  • سرویس صوتی خودرو، فهرست جدید را از callback استفاده می‌کند که برای پایداری و تماس‌ها به برنامه حجمی استفاده می‌شود. فهرست درخواستی کاربر 30 است. با این حال، بازخورد ناهمزمان سیستم صوتی ایندکس را به 15 به روز می کند.

مورد استفاده: اولین پخش صدا پس از خروج از حالت تعلیق

  • شاخص حجم قبل از تعلیق روی سطح بالای 95 تنظیم شده است (محدوده: [0-99]).

  • اندروید وارد حالت تعلیق شد.

  • به محض وجود اندروید، تعلیق (به عنوان مثال، از سرگیری):

    • فروشنده Audio HAL/AudioControl HAL شاخص ایمن 30 را به صورت محلی برای سیستم صوتی اعمال می کند.

    • فروشنده AudioControl HAL همچنین برای شاخص ایمن، پاسخ تماس را راه‌اندازی می‌کند:

    IAudioGainCallback.onAudioDeviceGainsChanged(SUSPEND_EXIT_VOL_LIMITATION, {...,  30 /* safe index */})
    
  • سرویس صوتی خودرو فهرست جدید را از پاسخ به تماس که برای پایداری استفاده می‌شود و تماس‌های خود را به برنامه حجمی که نمایه را همگام‌سازی می‌کند، مصرف می‌کند. شاخص صدا قبل از تعلیق 95 است. با این حال، پس از رزومه، این شاخص توسط پیاده‌کننده AudioControl HAL روی سطح صدای ایمن 30 تنظیم می‌شود.

پیکربندی ولوم پویا

برای این ویژگی موارد استفاده اولیه زیر را در نظر می گیریم:

  1. پیکربندی پایان خط خودرو (EOL).

    • خودروسازان ترجیح می دهند تنظیمات صدا را در EOL بر اساس تنظیمات سیستم صوتی خودرو به روز کنند. به طور معمول، این یک بار جانبی بدون به‌روزرسانی تصویر Android SW است.

    • ممکن است خودروسازان نیاز داشته باشند پیکربندی حجم صدا را در طول یک برنامه سرویس به روز کنند.

  2. پیکربندی زمان اجرا سیستم‌های صوتی خودرو از پیکربندی‌های تقویت‌کننده خارجی پشتیبانی می‌کنند و این ECU‌ها ممکن است پیکربندی‌های محدوده حجمی را که در طول زمان راه‌اندازی درخواست می‌شوند میزبانی کنند.

  3. پیکربندی بر اساس درخواست ارائه شده برای حمایت از نیاز رو به رشد به ویژگی‌های صوتی مبتنی بر تقاضا که در آن کاربران برای مدتی در پردازش سیگنال پیشرفته مشترک می‌شوند. پیکربندی‌های محدوده حجم جدید برای مدت زمان اشتراک معتبر هستند.

طراحی

پیکربندی ولوم پویا در سه مرحله به دست می آید:

  • کشف. پیاده سازی AudioControl HAL فروشنده، به روز رسانی های محدوده حجم جدید را از طریق مکانیزم IPC سفارشی متعلق به فروشنده کشف می کند.

    پس از کشف، یک تماس پاسخ از طریق AudioControl::IModuleChangeCallback ایجاد می شود.

  • به روز رسانی. وضعیت های گروه حجم به روز رسانی پشته صوتی خودرو با محدوده های حجم جدید.

    تلاش ها برای حفظ همان سطح حجم پس از به روز رسانی محدوده حجم انجام می شود. با این حال، اگر شاخص از محدوده خارج شود، شاخص حجم فعلی روی یک مقدار مطمئن تنظیم می شود. به عنوان مثال، سطح پیش‌فرض ارائه شده توسط فروشنده در طول تماس.

  • پاسخ به تماس

    • پس از به‌روزرسانی‌های محدوده گروه صدا، پشته صدای خودرو، یک تماس به برنامه‌های ثبت‌شده از طریق CarVolumeGroupEventCallback را راه‌اندازی می‌کند.

    • CarVolumeGroupEvent حاوی CarVolumeGroupInfo به روز شده، نوع رویداد (چه چیزی تغییر کرد) و اطلاعات اضافی (چرا تغییر کرد).

تصویر

شکل 1. پیکربندی حجم پویا.

HAL API

AudioControl @ 3.0 AIDL

نسخه 3.0 AudioControl AIDL HAL API های زیر را معرفی می کند:

API
IAudioControl#setModuleChangeCallback نمونه ای از IModuleChangeCallback را با AudioControl HAL تنظیم می کند.
IAaudioControl#clearModuleChangeCallback نمونه IModuleChangeCallback را که قبلاً با AudioControl HAL تنظیم شده بود پاک می کند.
IMModuleChangeCallback#onAudioPortsChanged تماس برای اطلاع از تغییرات AudioPorts

دنباله

نمودار توالی پیکربندی حجم پویا در زیر نمایش داده شده است.

تصویر

شکل 2. نمودار توالی برای پیکربندی حجم پویا.

جنبه های کلیدی

برای بهینه سازی این ویژگی موارد زیر را در نظر بگیرید.

  • پورت های صوتی ارائه شده به عنوان بخشی از پاسخ تماس باید با تعریف Automotive BUS مطابقت داشته باشد:

    • پورت دستگاه IN_DEVICE ، OUT_DEVICE
    • اتصال. BUS
    • آدرس در تعریف HAL ​​صوتی تعریف شده است
    • حالت به دست آوردن. JOINT
  • فروشندگان باید مجموعه‌ای از تعاریف محدوده حجمی را در خط‌مشی Audio HAL تعریف کنند و از تماس برگشتی برای سفارشی کردن آن برای انواع خودرو استفاده کنند. برای اطلاعات بیشتر به تعریف AIDL IModuleChangeCallbac مراجعه کنید.

  • هنگامی که بیش از یک BUS صوتی به یک گروه صدا تعلق دارد، هر کدام باید محدوده صدا را تعریف کنند. اگر این کار انجام نشود، چارچوب صوتی خودرو تعریف محدوده حجم جدید را رد می کند.