Audio spasial dan pelacakan 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 menciptakan medan suara di sekitar pendengar. Audio spasial memungkinkan pengguna untuk melihat saluran dan suara individual pada posisi yang berbeda dari posisi fisik transduser perangkat audio yang digunakan untuk pemutaran. Misalnya, audio spasial menawarkan pengguna kemampuan untuk mendengarkan soundtrack multisaluran melalui headphone. Dengan menggunakan audio spasial, pengguna headphone dapat merasakan dialog di depannya, dan efek surround di belakangnya, meski hanya memiliki dua transduser untuk pemutaran.

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

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

Arsitektur

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

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

spatial-audio

Gambar 1. Arsitektur saluran audio dengan spasializer

Dalam model baru, spasialisator adalah bagian dari kerangka audio dan dipisahkan dari dekoder. Spatializer mengambil konten audio campuran dan merender aliran stereo ke Audio HAL. Memisahkan spasializer dari decoder memungkinkan OEM memilih vendor yang berbeda untuk decoder dan spasializer dan mencapai latensi bolak-balik yang diinginkan untuk pelacakan kepala. Model baru ini juga menyertakan kait ke kerangka sensor untuk pelacakan kepala.

Gambar berikut mengilustrasikan arsitektur sistem kerangka audio untuk efek spasial dan pelacakan kepala:

spatial-sys-arch

Gambar 2. Arsitektur sistem dengan spasializer dan pelacakan kepala

Semua API audio spasial dikelompokkan dalam kelas Spatializer publik di tingkat aplikasi. Kelas SpatializerHelper dalam layanan audio berinteraksi dengan komponen UI Sistem untuk mengelola fungsionalitas terkait spasialisasi berdasarkan platform dan kemampuan perangkat yang terhubung. Kelas Spatializer baru dalam layanan kebijakan audio membuat dan mengontrol grafik audio spasial yang diperlukan untuk pencampuran dan spasialisasi multisaluran berdasarkan kemampuan yang diungkapkan oleh OEM , perangkat yang terhubung, dan kasus penggunaan aktif. SpatializerThread kelas mixer baru memadukan trek multisaluran dan memasukkan campuran yang dihasilkan ke mesin FX pasca-pemrosesan yang menghasilkan output stereo ke Audio HAL. Untuk pelacakan kepala, kelas SpatializerPoseController mengelompokkan fungsi yang terkait dengan pelacakan kepala, untuk menghubungkan ke tumpukan sensor dan untuk menggabungkan dan memfilter sinyal sensor yang diumpankan ke mesin efek. Data sensor pelacakan kepala dibawa melalui protokol HID dari driver Bluetooth.

Perubahan pada arsitektur pipeline audio Android 13 mengalami peningkatan pada hal berikut:

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

Fungsi seperti kompensasi bias, deteksi keheningan, dan pembatasan laju dapat diterapkan menggunakan pustaka utilitas pelacakan kepala .

API audio spasial

Android 13 menawarkan sistem audio spasial dan API pengembang.

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

Untuk API yang digunakan oleh pengembang, lihat Spatializer .

OEM dapat menggunakan API sistem untuk mengimplementasikan UI pengaturan 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 pengaturan Suara. Pengaturan audio spasial untuk speaker hanya tersedia jika penerapan efek spasial mendukung mode transaural.

Pengguna juga dapat mengaktifkan atau menonaktifkan audio spasial dan pelacakan kepala di pengaturan perangkat Bluetooth untuk setiap perangkat. Pengaturan pelacakan kepala hanya tersedia jika headset Bluetooth menampilkan sensor pelacakan kepala.

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

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

Integrasikan audio spasial

Seiring dengan penerapan mesin efek spasial, OEM harus mengonfigurasi platform mereka untuk dukungan audio spasial.

Persyaratan

Persyaratan berikut harus dipenuhi untuk mengintegrasikan audio spasial:

  • Audio HAL dan audio DSP harus mendukung jalur output khusus untuk audio spasial.
  • Untuk audio spasial dengan pelacakan kepala, headphone harus memiliki sensor pelacak kepala internal.
  • Penerapannya harus sesuai dengan standar yang diusulkan untuk pelacakan kepala melalui protokol HID dari headset Bluetooth ke telepon.
  • Audio HAL v7.1 diperlukan untuk 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 menginisialisasi dukungan spasialisator.

  2. Deklarasikan output khusus untuk campuran 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 pustaka efek spasialisator 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 mematuhi hal-hal berikut:

    • Konfigurasi dasar dan kontrolnya identik dengan efek lain di Effect HAL.
    • Parameter spesifik yang diperlukan kerangka kerja 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 informasi lebih lanjut.

Rekomendasi

Kami menyarankan agar OEM menggunakan pedoman berikut selama penerapan:

  • Gunakan audio LE bila tersedia untuk memudahkan interoperabilitas dan mencapai sasaran latensi.
  • Latensi bolak-balik, mulai dari deteksi pergerakan sensor hingga audio yang diterima oleh headphone, harus kurang dari 150 ms untuk UX yang baik.
  • Untuk Bluetooth (BT) Klasik dengan Profil Distribusi Audio Tingkat Lanjut (A2DP):
    • Gunakan codec latensi rendah, seperti Opus .
    • Menerapkan fungsi kontrol latensi di Audio HAL . Hal ini memungkinkan pengoptimalan daya dan kinerja saat pelacakan kepala tidak aktif, dan menonaktifkan pelacakan kepala selama kondisi tidak optimal.

Validasi

Untuk memvalidasi fungsionalitas fitur audio spasial, gunakan tes CTS yang tersedia di SpatializerTest.java .

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