صوتی فضایی و ردیابی سر

Android 13 یک روش استاندارد برای OEM ها برای پشتیبانی از صدای مکانی و ردیابی سر بدون نیاز به سفارشی سازی های خاص فروشنده یا SDK ها معرفی می کند.

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

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

اندروید 13 با ارائه پردازش صوتی فضایی در پایین ترین سطح ممکن در خط لوله صوتی برای به دست آوردن کمترین تأخیر ممکن، صدای مکانی و ردیابی سر را بهینه می کند.

معماری

چارچوب و API اصلاح شده اندروید در Android 13 پذیرش فناوری صوتی فضایی را در سراسر اکوسیستم تسهیل می کند.

شکل زیر تغییرات مربوط به صوتی فضایی ایجاد شده در معماری خط لوله صوتی با Android 13 را نشان می دهد:

spatial-audio

شکل 1. معماری خط لوله صوتی با فضاساز

در مدل جدید، فضاساز بخشی از چارچوب صوتی است و از رمزگشا جدا شده است. Spatializer محتوای صوتی ترکیبی را دریافت می کند و یک جریان استریو را به HAL صوتی ارائه می دهد. جداسازی فضاساز از رمزگشا به OEM ها این امکان را می دهد تا فروشندگان مختلفی را برای رمزگشا و فضای ساز انتخاب کنند و به تأخیر رفت و برگشت مورد نظر برای ردیابی سر دست یابند. این مدل جدید همچنین شامل قلاب هایی به چارچوب حسگر برای ردیابی سر است.

شکل زیر معماری سیستم فریم ورک صوتی را برای فضای ساز و اثر ردیابی سر نشان می دهد:

spatial-sys-arch

شکل 2. معماری سیستم با فضای ساز و ردیابی سر

همه APIهای صوتی فضایی در کلاس Spatializer عمومی در سطح برنامه گروه بندی می شوند. کلاس SpatializerHelper در خدمات صوتی با مؤلفه های System UI برای مدیریت عملکردهای مرتبط با فضای ساز بر اساس پلتفرم و قابلیت های دستگاه متصل ارتباط دارد. کلاس Spatializer جدید در سرویس خط مشی صدا، نمودار صوتی فضایی مورد نیاز برای اختلاط چند کاناله و فضاسازی را بر اساس قابلیت های بیان شده توسط OEM ، دستگاه های متصل و موارد استفاده فعال ایجاد و کنترل می کند. یک کلاس میکسر جدید SpatializerThread آهنگ های چند کاناله را مخلوط می کند و ترکیب حاصل را به یک موتور FX پس از پردازش می دهد که یک خروجی استریو را به HAL صوتی ارائه می کند. برای ردیابی هد، کلاس SpatializerPoseController توابع مربوط به ردیابی سر، برای رابط با پشته حسگر و ادغام و فیلتر کردن سیگنال‌های حسگر که به موتور افکت داده می‌شوند را گروه‌بندی می‌کند. داده های حسگر ردیابی سر از طریق پروتکل HID از درایور بلوتوث منتقل می شود.

تغییرات در معماری خط لوله صوتی Android 13 در موارد زیر بهبود می یابد:

  • کاهش تأخیر بین فضاساز و هدفون.
  • ارائه APIهای یکپارچه برای خدمت به توسعه دهندگان برنامه.
  • کنترل وضعیت ردیابی سر از طریق APIهای سیستم.
  • کشف حسگرهای ردیابی سر و مرتبط کردن آنها با دستگاه های صوتی فعال.
  • ادغام سیگنال‌ها از حسگرهای مختلف و محاسبه موقعیت سر که می‌تواند توسط موتور اثر فضای‌ساز مصرف شود.

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

APIهای صوتی فضایی

اندروید 13 سیستم صوتی فضایی و API های توسعه دهنده را ارائه می دهد.

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

برای APIهای برنامه‌نویس، Spatializer ببینید.

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

کاربر همچنین می تواند صدای مکانی و ردیابی سر را در تنظیمات دستگاه بلوتوث برای هر دستگاه فعال یا غیرفعال کند. تنظیم ردیابی سر فقط در صورتی در دسترس است که هدست بلوتوث حسگر ردیابی سر را در معرض دید قرار دهد.

اگر این ویژگی پشتیبانی شود، تنظیمات پیش‌فرض برای صدای مکانی همیشه روشن است. برای مشاهده لیست کاملی از APIهای سیستم به Spatializer.java مراجعه کنید.

سنسور جدید ردیابی سر نوع Sensor.TYPE_HEAD_TRACKER به چارچوب سنسور اضافه شده و توسط حسگر HAL به عنوان یک سنسور پویا از طریق بلوتوث یا USB در معرض دید قرار می‌گیرد.

ادغام صوتی فضایی

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

الزامات

برای ادغام صوت مکانی باید شرایط زیر رعایت شود:

  • HAL صوتی و DSP صوتی باید از یک مسیر خروجی اختصاصی برای صدای فضایی پشتیبانی کنند.
  • برای صدای فضایی با ردیابی سر، هدفون باید دارای حسگر ردیاب سر داخلی باشد.
  • پیاده سازی باید با استاندارد پیشنهادی برای ردیابی سر از طریق پروتکل HID از هدست بلوتوث به تلفن مطابقت داشته باشد.
  • Audio HAL v7.1 برای پشتیبانی صوتی فضایی مورد نیاز است.

با استفاده از مراحل زیر صدای مکانی را ادغام کنید:

  1. پشتیبانی صوتی مکانی را در فایل device.mk خود به شرح زیر اعلام کنید:

    PRODUCT_PROPERTY_OVERRIDES += \
         ro.audio.spatializer_enabled=true
    

    این باعث می شود که AudioService پشتیبانی فضایی ساز را مقداردهی اولیه کند.

  2. خروجی اختصاصی را برای ترکیب صوتی فضایی در audio_policy_configuration.xml به شرح زیر اعلام کنید:

    <audioPolicyConfiguration>
      <modules>
       <module>
         <mixPorts>
         <mixPort name="spatializer" role="source"   flags="AUDIO_OUTPUT_FLAG_SPATIALIZER">
           <profile name="sa" format="AUDIO_FORMAT_PCM_FLOAT"
             samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
    
  3. کتابخانه افکت Spatializer را در audio_effects.xml به صورت زیر اعلام کنید:

    <audio_effects_conf>
          <libraries>
             <library name="spatializer_lib" path="libMySpatializer.so"/>
              …
             </libraries>
          <effects>
           <effect name="spatializer" library="spatializer_lib" uuid="myunique-uuid-formy-spatializereffect"/>
    
  4. فروشندگانی که افکت فضایی ساز را اجرا می کنند باید موارد زیر را رعایت کنند:

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

      • SPATIALIZER_PARAM_SUPPORTED_LEVELS
      • SPATIALIZER_PARAM_LEVEL
      • SPATIALIZER_PARAM_HEADTRACKING_SUPPORTED
      • SPATIALIZER_PARAM_HEADTRACKING_MODE
      • SPATIALIZER_PARAM_SUPPORTED_CHANNEL_MASKS
      • SPATIALIZER_PARAM_SUPPORTED_SPATIALIZATION_MODES
      • SPATIALIZER_PARAM_HEAD_TO_STAGE

    برای اطلاعات بیشتر به effect_spatializer.h مراجعه کنید.

توصیه ها

ما توصیه می کنیم که OEM ها از دستورالعمل های زیر در هنگام اجرا استفاده کنند:

  • برای سهولت قابلیت همکاری و دستیابی به اهداف تأخیر، در صورت وجود از صدای LE استفاده کنید.
  • تأخیر رفت و برگشت، از تشخیص حرکت حسگر تا صدای دریافتی توسط هدفون، برای UX خوب باید کمتر از 150 میلی ثانیه باشد.
  • برای بلوتوث (BT) کلاسیک با نمایه توزیع صوتی پیشرفته (A2DP):
    • از یک کدک با تاخیر کم مانند Opus استفاده کنید.
    • توابع کنترل تأخیر را در Audio HAL اجرا کنید. این بهینه سازی قدرت و عملکرد را در زمانی که ردیابی سر خاموش است، و ردیابی سر را در شرایط غیربهینه غیرفعال می کند.

اعتبار سنجی

برای تأیید عملکرد ویژگی صوتی فضایی، از آزمون‌های CTS موجود در SpatializerTest.java استفاده کنید.

اجرای ضعیف الگوریتم‌های فضایی یا ردیابی سر می‌تواند باعث عدم برآورده شدن توصیه تاخیر رفت و برگشت همانطور که در توصیه‌ها ذکر شده است شود.