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:
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:
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:
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.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"/>
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"/>
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):
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.