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

اندروید ۱۳ یک روش استاندارد برای تولیدکنندگان تجهیزات اصلی (OEM) معرفی می‌کند تا بدون نیاز به سفارشی‌سازی‌های خاص فروشنده یا SDKها، از صدای مکانی و ردیابی سر پشتیبانی کنند.

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

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

اندروید ۱۳ با ارائه پردازش صدای مکانی در پایین‌ترین سطح ممکن در خط لوله صوتی، برای دستیابی به کمترین تأخیر ممکن، صدای مکانی و ردیابی سر را بهینه می‌کند.

معماری

چارچوب و API صوتی اندروید اصلاح‌شده در اندروید ۱۳، پذیرش فناوری صدای فضایی را در سراسر اکوسیستم تسهیل می‌کند.

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

spatial-audio

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

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

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

spatial-sys-arch

شکل ۲. معماری سیستم با قابلیت مکان‌یابی و ردیابی سر

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

تغییرات در معماری خط لوله صوتی اندروید ۱۳ موارد زیر را بهبود می‌بخشد:

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

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

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

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

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

برای API های مخصوص توسعه‌دهندگان، به Spatializer مراجعه کنید.

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

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

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

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

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

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

الزامات

برای ادغام صدای فضایی، الزامات زیر باید رعایت شوند:

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

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

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

    PRODUCT_PROPERTY_OVERRIDES += \
         ro.audio.spatializer_enabled=true
    

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

  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. کتابخانه افکت‌های فضایی‌ساز را در 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 استفاده کنید تا قابلیت همکاری را تسهیل کرده و به اهداف مربوط به تأخیر برسید.
  • برای یک تجربه کاربری خوب، تأخیر رفت و برگشت، از تشخیص حرکت حسگر تا دریافت صدا توسط هدفون، باید کمتر از ۱۵۰ میلی‌ثانیه باشد.
  • برای بلوتوث (BT) کلاسیک با پروفایل توزیع صدای پیشرفته (A2DP):
    • از یک کدک با تأخیر کم، مانند Opus ، استفاده کنید.
    • توابع کنترل تأخیر را در Audio HAL پیاده‌سازی کنید. این امر بهینه‌سازی مصرف انرژی و عملکرد را در هنگام خاموش بودن ردیابی سر و غیرفعال کردن ردیابی سر در شرایط غیربهینه امکان‌پذیر می‌سازد.

اعتبارسنجی

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

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