Audio spasial dan pelacakan gerakan kepala

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

Audio spasial adalah teknologi yang digunakan untuk membuat medan suara di sekitar pendengar. Audio spasial memungkinkan pengguna merasakan saluran dan suara individual dalam posisi yang berbeda dari posisi fisik transduser perangkat audio yang digunakan untuk pemutaran. Misalnya, audio spasial menawarkan kemampuan kepada pengguna untuk mendengarkan soundtrack multisaluran melalui headphone. Dengan menggunakan audio spasial, pengguna headphone dapat merasakan dialog di depan mereka, dan efek surround di belakang mereka, meskipun hanya memiliki dua transduser untuk pemutaran.

Pelacakan kepala membantu pengguna memahami sifat panggung suara yang di-spatialisasi yang disimulasikan di sekitar kepala mereka. Pengalaman ini hanya efektif jika latensi rendah, dengan latensi diukur sebagai waktu antara saat pengguna menggerakkan kepala dan waktu mereka mendengar posisi speaker virtual bergerak sesuai.

Android 13 mengoptimalkan audio spasial dan pelacakan kepala dengan menawarkan pemrosesan audio spasial pada tingkat serendah mungkin di pipeline audio untuk mendapatkan latensi serendah mungkin.

Arsitektur

Framework dan API audio Android 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 baru, spatializer adalah bagian dari framework audio dan dipisahkan dari decoder. Spatializer mengambil konten audio campuran dan merender streaming stereo ke Audio HAL. Memisahkan spatializer dari decoder memungkinkan OEM memilih vendor yang berbeda untuk decoder dan spatializer serta untuk mencapai latensi bolak-balik yang diinginkan untuk pelacakan kepala. Model baru ini juga menyertakan hook ke framework sensor untuk pelacakan kepala.

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

spatial-sys-arch

Gambar 2. Arsitektur sistem dengan spatializer dan pelacakan gerakan kepala

Semua API audio spasial dikelompokkan dalam class Spatializer publik di tingkat aplikasi. Class SpatializerHelper dalam antarmuka layanan audio dengan komponen UI Sistem untuk mengelola fungsi terkait spatializer berdasarkan platform dan kemampuan perangkat yang terhubung. Class Spatializer baru di layanan kebijakan audio membuat dan mengontrol grafik audio spasial yang diperlukan untuk pencampuran multisaluran dan spasialisasi berdasarkan kemampuan yang dinyatakan oleh OEM, perangkat yang terhubung, dan kasus penggunaan aktif. Class mixer baru SpatializerThread memadukan trek multisaluran dan menyalurkan campuran yang dihasilkan ke mesin FX pascapemrosesan yang merender output stereo ke Audio HAL. Untuk pelacakan kepala, class SpatializerPoseController mengelompokkan fungsi yang terkait dengan pelacakan kepala, untuk antarmuka ke stack sensor dan untuk menggabungkan serta memfilter sinyal sensor yang dimasukkan ke mesin efek. Data sensor pelacakan kepala dikirim melalui protokol HID dari driver Bluetooth.

Perubahan pada arsitektur pipeline audio Android 13 meningkatkan hal berikut:

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

Fungsi seperti kompensasi bias, deteksi diam, dan pembatasan kecepatan dapat diimplementasikan menggunakan library utilitas pelacakan kepala.

API audio spasial

Android 13 menawarkan sistem audio spasial dan API developer.

OEM dapat menyesuaikan perilaku aplikasi berdasarkan ketersediaan fitur dan status yang diaktifkan, yang ditetapkan oleh API sistem. Aplikasi juga dapat mengonfigurasi atribut audio untuk menonaktifkan audio spasial karena alasan estetika atau untuk menunjukkan bahwa streaming audio telah diproses untuk audio spasial.

Untuk API yang ditampilkan kepada developer, lihat Spatializer.

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

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

Setelan default untuk audio spasial selalu AKTIF jika fitur tersebut 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.

Mengintegrasikan audio spasial

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

Persyaratan

Persyaratan berikut harus dipenuhi untuk mengintegrasikan audio spasial:

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

Integrasikan audio spasial menggunakan langkah-langkah berikut:

  1. Deklarasikan dukungan audio spasial dalam 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 campuran audio spasial di audio_policy_configuration.xml, seperti 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 spatializer harus mematuhi hal berikut:

    • Konfigurasi dan kontrol dasar yang identik dengan efek lain di Effect HAL.
    • Parameter tertentu yang diperlukan framework untuk menemukan kemampuan dan konfigurasi yang didukung, 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 audio LE jika tersedia untuk memudahkan interoperabilitas dan mencapai tujuan latensi.
  • 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 kepala nonaktif, dan menonaktifkan pelacakan kepala selama kondisi yang tidak optimal.

Validasi

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

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