Audio spasial dan pelacakan gerakan kepala

Android 13 memperkenalkan cara standar bagi OEM untuk mendukung audio spasial dan pelacakan gerakan kepala tanpa memerlukan vendor khusus atau SDK Google.

Audio spasial adalah teknologi yang digunakan untuk menciptakan medan suara yang mengelilingi pemroses. Audio spasial memungkinkan pengguna merasakan saluran dan setiap suara pada posisi yang berbeda dari posisi fisik transduser perangkat audio yang digunakan untuk pemutaran. Misalnya, audio spasial memberi pengguna kemampuan untuk mendengarkan soundtrack multisaluran melalui headphone. Menggunakan spasial audio, pengguna headphone dapat melihat dialog di depan mereka, dan mengelilingi di belakangnya, meskipun hanya memiliki dua transduser untuk pemutaran.

Pelacakan gerak kepala membantu pengguna memahami sifat suara yang dispasialisasi sedang disimulasikan di sekitar kepala mereka. Pengalaman ini hanya efektif ketika latensinya rendah, yang mana latensi diukur sebagai waktu antara saat pengguna menggerakkan kepala mereka dan saat mereka mendengar posisi speaker virtual bergerak sebagaimana mestinya.

Android 13 mengoptimalkan audio spasial dan head dengan menawarkan pemrosesan audio spasial serendah mungkin dalam pipeline audio untuk mendapatkan latensi serendah mungkin.

Arsitektur

Framework audio Android dan API yang dimodifikasi di Android 13 memfasilitasi adopsi teknologi audio spasial di seluruh ekosistem.

Gambar berikut mengilustrasikan perubahan terkait audio spasial yang dilakukan pada arsitektur pipeline audio dengan Android 13:

audio-spasial

Gambar 1. Arsitektur pipeline audio dengan spatializer

Dalam model yang baru, spatializer adalah bagian dari framework audio dan yang dipisahkan dari decoder. spatializer mengambil konten audio campuran dan merender streaming stereo ke HAL Audio. Memisahkan spatializer dari memungkinkan OEM memilih vendor yang berbeda untuk decoder dan spatializer dan untuk mencapai latensi bolak-balik yang diinginkan untuk pelacakan gerak kepala. Model baru ini juga menyertakan hook ke framework sensor untuk pelacakan gerakan kepala.

Gambar berikut mengilustrasikan arsitektur sistem framework audio untuk efek pelacakan gerak dan spatializer:

spasial-sys-arch

Gambar 2. Arsitektur sistem dengan spatializer dan pelacakan gerak kepala

Semua API audio spasial dikelompokkan sebagai publik Class Spatializer di tingkat aplikasi. SpatializerHelper dalam antarmuka layanan audio dengan komponen UI Sistem untuk mengelola fungsionalitas terkait spatializer berdasarkan platform dan perangkat yang terhubung kemampuan IT. Class Spatializer baru di layanan kebijakan audio membuat dan mengontrol setelan grafik audio yang diperlukan untuk mixing dan spasial multisaluran berdasarkan kemampuan yang dinyatakan oleh OEM, perangkat yang terhubung, dan kasus penggunaan aktif. Class mixer baru SpatializerThread menggabungkan trek multisaluran dan memasukkan campuran yang dihasilkan ke FX pascapemrosesan yang menghasilkan output stereo ke HAL Audio. Untuk pelacakan gerak kepala, Class SpatializerPoseController mengelompokkan fungsi yang terkait dengan pelacakan gerak kepala, hingga antarmuka ke tumpukan sensor dan untuk menggabungkan dan menyaring sinyal sensor yang dipasok ke mesin efek. Data sensor pelacakan kepala dibawa melalui protokol HID dari {i>driver Bluetooth<i}.

Perubahan pada arsitektur pipeline audio Android 13 melakukan perbaikan pada hal berikut:

  • Menurunkan latensi antara spatializer dan headphone.
  • Menyediakan API terpadu untuk melayani developer aplikasi.
  • Mengontrol status pelacakan head melalui API sistem.
  • Menemukan sensor pelacakan kepala dan mengaitkannya dengan perangkat audio yang aktif.
  • Menggabungkan sinyal dari berbagai sensor dan menghitung pose kepala yang dapat yang digunakan oleh mesin efek spatializer.

Fungsi seperti kompensasi bias, deteksi keheningan, dan pembatasan kapasitas dapat diterapkan menggunakan library utilitas pelacakan head.

API audio spasial

Android 13 menawarkan sistem audio spasial dan developer Google Cloud Platform.

OEM dapat menyesuaikan perilaku aplikasi berdasarkan ketersediaan fitur dan status aktif, yang disetel oleh API sistem. Aplikasi juga dapat mengonfigurasi atribut audio untuk nonaktifkan audio spasial untuk alasan estetika atau untuk menunjukkan bahwa streaming audio sudah diproses untuk audio spasial.

Untuk API yang ditujukan untuk developer, lihat Spatializer.

OEM dapat menggunakan API sistem untuk menerapkan UI setelan Suara dan Bluetooth, yang memungkinkan pengguna mengontrol status audio spasial dan kepala untuk perangkat mereka. Pengguna dapat mengaktifkan atau menonaktifkan audio spasial untuk speaker dan headphone berkabel di UI setelan Suara. Ruang setelan audio untuk speaker hanya tersedia jika efek spasial mendukung mode transaural.

Pengguna juga dapat mengaktifkan atau menonaktifkan audio spasial dan pelacakan gerakan kepala di Setelan perangkat Bluetooth untuk setiap perangkat. Setelan pelacakan gerak kepala tersedia hanya jika headset Bluetooth mengekspos sensor pelacakan gerakan kepala.

Setelan default untuk audio spasial selalu AKTIF jika fitur didukung. Lihat Spatializer.java untuk mengetahui daftar lengkap API sistem.

Jenis sensor pelacakan kepala baru Sensor.TYPE_HEAD_TRACKER ditambahkan ke Framework sensor dan diekspos oleh Sensor HAL sebagai sensor dinamis melalui Bluetooth atau USB.

Integrasikan audio spasial

Bersama dengan menerapkan mesin efek spatializer, OEM harus mengonfigurasi untuk dukungan audio spasial.

Persyaratan

Persyaratan berikut harus dipenuhi untuk mengintegrasikan audio spasial:

  • HAL Audio dan DSP audio harus mendukung jalur output khusus untuk audio.
  • Untuk audio spasial dengan pelacakan gerakan kepala, headphone harus memiliki bagian kepala sensor pelacak.
  • Penerapan harus sesuai dengan standar yang diusulkan untuk pelacakan gerak kepala melalui protokol HID dari headset Bluetooth ke ponsel.
  • Audio HAL v7.1 diperlukan untuk mendapatkan dukungan audio spasial.

Integrasikan audio spasial menggunakan langkah-langkah berikut:

  1. Deklarasikan dukungan audio spasial di file device.mk Anda, sebagai berikut:

    PRODUCT_PROPERTY_OVERRIDES += \
         ro.audio.spatializer_enabled=true
    

    Hal ini menyebabkan AudioService melakukan inisialisasi dukungan spatializer.

  2. Deklarasikan output khusus untuk mix audio spasial di audio_policy_configuration.xml, sebagai berikut:

    <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. Deklarasikan library efek spatializer di audio_effects.xml, sebagai berikut:

    <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. Vendor yang menerapkan efek spasial harus sesuai dengan hal berikut:

    • Konfigurasi dan kontrol dasar identik dengan efek lain di Effect HAL.
    • Parameter khusus yang diperlukan framework untuk menemukan parameter yang didukung kemampuan dan konfigurasi Anda, seperti:

      • 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

    Lihat effect_spatializer.h untuk mengetahui informasi selengkapnya.

Rekomendasi

Sebaiknya OEM menggunakan panduan berikut selama penerapan:

  • Gunakan LE Audio jika tersedia untuk memudahkan interoperabilitas dan mencapai latensi tujuan tersebut.
  • Latensi bolak-balik, dari deteksi gerakan sensor hingga audio yang diterima oleh headphone, harus kurang dari 150 md untuk UX yang baik.
  • Untuk Bluetooth (BT) Klasik dengan Advanced Audio Distribution Profile (A2DP):
    • Gunakan codec latensi rendah, seperti Opus.
    • Implementasikan fungsi kontrol latensi di Audio HAL. Hal ini memungkinkan pengoptimalan daya dan performa saat pelacakan gerak kepala nonaktif, dan menonaktifkan pelacakan gerakan kepala dalam kondisi yang tidak optimal.

Validasi

Untuk memvalidasi fungsi fitur audio spasial, gunakan uji CTS tersedia di SpatializerTest.java.

Implementasi algoritma spasial atau pelacakan gerak kepala yang buruk dapat menyebabkan kegagalan dalam memenuhi rekomendasi latensi bolak-balik seperti yang tercantum dalam Rekomendasi.