مسیریابی صوتی چند منطقه ای

سرویس صوتی خودرو از خط مشی صوتی دینامیک Core Audio برای تسهیل موارد استفاده در خودروها استفاده می کند.

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

  • پیکربندی منطقه صوتی پویا

  • پخش صوتی منطقه اولیه مسافر.

  • آینه صوتی مسافر.

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

صدای چند منطقه ای

صدای چند منطقه ای به چندین کاربر امکان می دهد به طور همزمان با AAOS تعامل داشته باشند. مجموعه ای از دستگاه های خروجی با یک منطقه مرتبط است و هر منطقه فوکوس صدا و سطح صدا را حفظ می کند. مسافران می توانند به صدای خود گوش دهند در حالی که راننده به منبع دیگری در منطقه اصلی (معمولاً کابین اصلی) گوش می دهد.

معماری صوتی چند ناحیه ای

معماری خدمات صوتی خودرو

شکل 1. معماری خدمات صوتی خودرو.

مناطق صوتی خودرو انتزاعی از خروجی‌های صوتی، فوکوس صوتی و سایر تنظیمات صوتی هستند که همه آن‌ها را می‌توان به طور مستقل مدیریت کرد. برای اهداف مسیریابی، هر منطقه به عنوان مجموعه ای از دستگاه های گذرگاه خروجی صدا همانطور که در پیکربندی خط مشی صدا مرتب شده است، تعریف می شود. دستگاه ها برای هر تعریف منطقه صوتی متفاوت هستند. در شکل 1، دستگاه های باس 1 تا 5 متعلق به منطقه صفر، دستگاه های اتوبوس 6 تا 8 به منطقه یک و دستگاه های اتوبوس 9 تا 11 متعلق به منطقه دو هستند.

تنظیمات صوتی ماشین

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

<carAudioConfiguration version="3">
    <zones>
        <zone name="Zone0" audioZneId="0" occupantZoneI="0">
            <zoneConfigs>
                <zoneConfig name="config0" isDefault="true">
                   <volumeGoups>
                        <group>
                            <device address="bus_1">
                                <context context="music"/>
                            </device>
                        </group>
                        <group>
                            <device address="bus_2">
                                <context context="navigation"/>
                            </device>
                        </group>
                        ...
                    </volumeGroups>
                </zoneConfig>
            </zoneConfigs>
        </zone>
        <zone name="Zone1" audioZoneId="1" occupantZoneId="1">
            <zoneConfigs>
                <zoneConfig name="config0" isDefault="true">
                    <volumeGroups>
                        <group>
                            <device address="bus_6">
                                <context context="music"/>
                            </device>
                        </group>
                        <group>
                            <device address="bus_7">
                                <context context="navigation"/>
                           </device>
                       </group>
                       ...
                    </volumeGroups>
                </zoneConfig>
            </zoneConfigs>
        </zone>
        ...
    ...
   </zones>
</carAudioConfiguration>

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

  • شناسه منطقه صوتی و شناسه منطقه ساکن.

    • نقشه های منطقه صوتی به منطقه سرنشین (صندلی، نمایشگر و سایر لوازم جانبی)
    • شناسه کاربری که پس از ورود به سیستم به یک منطقه صوتی اختصاص داده شده است را مشخص کنید
  • لیستی از تنظیمات صوتی هر پیکربندی صوتی دارای مجموعه ای از گروه های صدا است. هر گروه حجم دارای مجموعه ای از دستگاه های اتوبوس صوتی است.

    • وقتی صدا تغییر می کند، همه دستگاه های صوتی در یک گروه به یک روش کنترل می شوند.

    • به هر دستگاه صوتی لیستی از ویژگی های صوتی اختصاص داده شده است. این اطلاعات برای ساخت ترکیبات خط مشی صوتی با ویژگی‌های صوتی متفاوت اختصاص داده شده استفاده می‌شود.

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

گردش کار ورود مسافران صوتی چند منطقه ای

نمودار توالی زیر جریانی را برای فعال کردن مسیریابی صوتی هنگام ورود مسافر به صفحه نمایش مربوطه نشان می دهد:

تصویر

شکل 2.

در این دنباله، ورود کاربر به سرویس صوتی خودرو از طریق سرویس منطقه سرنشین منتشر می شود.

  1. سرویس صدای خودرو (برای یک منطقه صوتی خاص) از AudioPolicy#removeUserIdDeviceAffinity API برای حذف وابستگی های دستگاه کاربر استفاده می کند. این API یک شناسه کاربری می گیرد. در این حالت کاربر منطقه قبلی.

  2. AudioPolicy#setUserIdDeviceAffinity API کاربر جدید را به یک منطقه اختصاص می‌دهد که شناسه کاربر و همه دستگاه‌ها را برای یک پیکربندی منطقه خاص دریافت می‌کند.

تنظیمات منطقه پویا

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

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

گردش کار پیکربندی منطقه پویا

شکل 3. گردش کار پیکربندی منطقه پویا.

شکل 3 معماری گردش کار پیکربندی ناحیه پویا را نشان می دهد. منطقه صوتی 1 شامل دو پیکربندی، Config 0 و Config 1 است که به ترتیب با بلندگوی دستگاه خروجی و پشت سری مرتبط هستند.

پس از ورود به سیستم، پیکربندی پیش فرض به کاربر اختصاص داده می شود. هنگامی که کاربر تصمیم می گیرد پیکربندی ها را تغییر دهد، معمولاً از طریق رابط کاربری سیستم، سرویس صوتی خودرو سوئیچ بین دو پیکربندی را اجرا می کند. به این ترتیب دستگاه خروجی بین اسپیکر Z1 و پشت سری Z1 سوئیچ می شود.

قطعه کد زیر تنظیمات این پیکربندی منطقه پویا را نشان می دهد.

<carAudioConfiguration version="3">
    <zones>
        <zone name="Zone1" audioZoneId="1" occupantZoneId="1">
            <zoneConfigs>
                <zoneConfig name="Zone 1 Config 0" isDefault="true">
                    <volumeGroups>
                        <group>
                            <device address="bus_100">
                                <context context="music"/>
                                    ***
                            </device>
                        </group>
                    </volumeGroups>
                </zoneConfig>
                <zoneConfig name="Zone 1 Config 1">
                    <volumeGroups>
                        <group>
                            <device address="bus_101">
                                <context context="music"/>
                                    ***
                            </device>
                        </group>
                    </volumeGroups>
                </zoneConfig>
            </zoneConfigs>
        </zone>
    </zones>

برای تسهیل مدیریت پیکربندی های صوتی، مدیر صدای خودرو API ها را برای مدیریت پیکربندی ها در معرض دید قرار می دهد:

  • تنظیمات پرس و جو در دسترس یک منطقه است.
  • پرس و جو در حال حاضر پیکربندی یک منطقه را تنظیم کرده است.
  • به پیکربندی متفاوتی بروید.

یک برنامه یا سرویس UI سیستم می تواند از این API برای مدیریت پیکربندی ناحیه صوتی همانطور که در شکل 4 نشان داده شده است استفاده کند. Query API این دو را در معرض دید مسافران قرار می دهد. کاربر می تواند با ضربه زدن روی یک فرمان برای پیکربندی مورد نظر، پیکربندی متفاوتی را انتخاب کند.

گردش کار پیکربندی منطقه پویا

شکل 4. گردش کار پیکربندی منطقه پویا.

بازیگران صوتی مسافر منطقه اصلی

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

شکل زیر یک نسخه ساده شده از معماری برای پخش صوتی رسانه مسافری منطقه اولیه را نشان می دهد.

گردش کار پیکربندی منطقه پویا

شکل 5. گردش کار پیکربندی منطقه پویا.

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

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

این لیست جدید از دستگاه ها توسط AudioPolicy#setUserIdDeviceAffinity API به مسافر اختصاص داده شده است. پارامترهای ارسال شده به API لیست دستگاه ها و شناسه کاربر مسافر است. هنگامی که سرویس خط مشی صوتی سیستم صوتی سؤال می کند که کدام ترکیب صوتی باید برای آهنگ رسانه مرتبط با مسافر انتخاب شود، ترکیب صوتی رسانه مرتبط با منطقه اصلی انتخاب می شود.

یک نیاز کلیدی برای پخش صدای منطقه اولیه این است که دستگاه خروجی رسانه منطقه اصلی از سایر موارد استفاده از ویژگی های صوتی جدا باشد. در غیر این صورت، در طول ساخت میکس های صوتی، سایر ویژگی های صوتی به میکس اضافه می شوند. هنگامی که انتخاب میکس توسط سیستم صوتی انجام می شود، تمام صداهای متصل به میکس برای پخش در کابین اصلی انتخاب می شوند.

آینه صوتی منطقه مسافر

ویژگی آینه صوتی به مسافران امکان می دهد صدا را به اشتراک بگذارند. ویژگی آینه ای داده های صوتی را در هر منطقه صوتی کپی می کند تا همه مسافران بتوانند به همان صدا گوش دهند. در این حالت، فوکوس صوتی با مسافران درگیر در آینه سازی صوتی به اشتراک گذاشته می شود.

مسیریابی آینه صوتی

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

شکل زیر یک نمودار ساده شده برای آینه سازی صوتی چند منطقه ای بین دو مسافر را نشان می دهد. صدا از هر دو مسافر به یک دستگاه آینه صوتی، bus_1000 هدایت می شود. HAL صوتی سیگنال را به مناطق منبع کپی می کند.

گردش کار پیکربندی منطقه پویا

شکل 6. گردش کار پیکربندی منطقه پویا.

این مسیریابی فقط زمانی فعال می شود که مسافران در حالت آینه کاری باشند. در غیر این صورت، دستگاه های مربوط به منطقه صوتی به مسافران اختصاص داده می شود. هنگامی که Mirroring برای اولین بار برای مسافر فعال می شود، AudioPolicy#setUserIdDeviceAffinity API مسیریابی را تغییر می دهد:

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

با لیست دستگاه ها، API با لیست به روز شده دستگاه ها و شناسه کاربری مسافر فراخوانی می شود. تصویر زیر نمودار توالی گردش کار آینه صوتی را ارائه می دهد.

گردش کار آینه صوتی

شکل 7. گردش کار آینه صوتی.

در شکل 7، API های مدیر صدای خودرو برای مدیریت آینه سازی صدا از سرویس Media System فراخوانی شده اند. به طور خاص، API برای فعال کردن بازتاب صدا برای کاربر 1 و کاربر 2، CarAudioManager#enableMirrorForAudioZones .

سرویس صوتی خودرو مسیریابی صوتی را برای مسافران کاربر همانطور که در بالا توضیح داده شد پیکربندی می کند. سرویس صوتی خودرو همچنین سیگنالی را به HAL صوتی ارسال می کند تا صدا را از دستگاه آینه به مناطق مربوطه پیکربندی و کپی کند.

در تصویر بالا سرویس صوتی خودرو mirroring_src=bus_1000;mirroring_dest=bus_10,bus_20 ارسال می کند.

جایی که،

bus_1000 باس مبدا و bus_10 و bus_20 اتوبوس های مقصد هستند.

سیگنالی که از طریق AudioManager#setParameters API ارسال می‌شود، در نمودار توالی نشان داده نمی‌شود، که از طریق سرویس صوتی به HAL می‌رسد.

با غیرفعال کردن آینه صوتی، سیگنال زیر ارسال می شود، mirroring_src=bus_1000;mirroring=off . این سیگنال می تواند توسط HAL برای غیرفعال کردن تکثیر صدا در زمانی که انعکاس صدا فعال نیست استفاده شود. برای تعریف دستگاه‌های آینه‌کاری صوتی، فایل پیکربندی صدای خودرو شامل بخشی به نام mirroringDevices است، همانطور که در قطعه زیر نشان داده شده است.

در این قطعه دو دستگاه Mirroring bus_1000 و bus_2000 تعریف شده است تا چهار سرنشین بتوانند از آینه سازی صوتی استفاده کنند.

<carAudioConfiguration version="3">
   <mirroringDevices>
       <mirroringDevice address="bus_1000"/>
       <mirroringDevice address="bus_2000"/>
   </mirroringDevices>
  <zones>
    ....
  </zones>
</carAudioConfiguration>