Android 13 memperkenalkan cara standar bagi OEM untuk mendukung audio spasial dan pelacakan gerak kepala tanpa memerlukan penyesuaian atau SDK khusus vendor.
Audio spasial adalah teknologi yang digunakan untuk membuat medan suara yang mengelilingi pendengar. Audio spasial memungkinkan pengguna merasakan saluran dan suara individual di 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 audio spasial, pengguna headphone dapat mendengar dialog di depan mereka, dan efek surround di belakang mereka, meskipun hanya memiliki dua transduser untuk pemutaran.
Pelacakan gerak kepala membantu pengguna memahami sifat panggung suara yang dispatialisasi yang disimulasikan di sekitar kepala mereka. Pengalaman ini hanya efektif saat latensinya rendah, dengan latensi diukur sebagai waktu antara saat pengguna menggerakkan kepala dan saat mereka mendengar posisi speaker virtual bergerak sesuai dengan gerakan kepala.
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 dan API audio Android yang diubah 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:
Gambar 1. Arsitektur pipeline audio dengan spatializer
Dalam model baru, spatializer adalah bagian dari framework audio dan tidak terikat dengan decoder. Spatializer menerima konten audio campuran dan merender streaming stereo ke Audio HAL. Dengan memisahkan spatializer dari decoder, OEM dapat memilih vendor yang berbeda untuk decoder dan spatializer serta mencapai latensi pulang pergi yang diinginkan untuk pelacakan gerak kepala. Model baru ini juga menyertakan hook ke framework sensor untuk pelacakan gerak kepala.
Gambar berikut mengilustrasikan arsitektur sistem framework audio untuk efek spatializer dan pelacakan kepala:
Gambar 2. Arsitektur sistem dengan spatializer dan pelacakan gerakan kepala
Semua API audio spasial dikelompokkan dalam class
Spatializer publik di tingkat aplikasi. Class SpatializerHelper di antarmuka layanan audio berinteraksi dengan komponen UI Sistem untuk mengelola fungsi terkait spatializer berdasarkan platform dan kemampuan perangkat terhubung. Class Spatializer baru di layanan kebijakan audio membuat dan mengontrol grafik audio spasial yang diperlukan untuk pencampuran dan spasialisasi multisaluran berdasarkan kemampuan yang dinyatakan oleh OEM, perangkat yang terhubung, dan kasus penggunaan aktif. Class mixer baru SpatializerThread mencampur trek multisaluran dan mengirimkan campuran yang dihasilkan ke mesin FX pascapemrosesan yang merender output stereo ke HAL Audio. Untuk pelacakan gerak kepala, class
SpatializerPoseController mengelompokkan fungsi yang terkait dengan pelacakan gerak kepala, untuk
berinteraksi dengan stack sensor dan untuk menggabungkan serta memfilter sinyal sensor yang
diteruskan ke mesin efek. Data sensor pelacakan gerak kepala dibawa melalui protokol HID dari driver Bluetooth.
Perubahan pada arsitektur pipeline audio Android 13 meningkatkan hal berikut:
- Mengurangi 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 aktif.
- Menggabungkan sinyal dari berbagai sensor dan menghitung pose kepala yang dapat digunakan oleh mesin efek spatializer.
Fungsi seperti kompensasi bias, deteksi keheningan, dan pembatasan kecepatan dapat diterapkan menggunakan library utilitas pelacakan gerak kepala.
API audio spasial
Android 13 menawarkan sistem audio spasial dan API developer.
OEM dapat menyesuaikan perilaku aplikasi berdasarkan ketersediaan dan status aktif fitur, yang ditetapkan oleh API sistem. Aplikasi juga dapat mengonfigurasi atribut audio untuk menonaktifkan audio spasial untuk alasan estetika atau untuk menunjukkan bahwa streaming audio sudah diproses untuk audio spasial.
Untuk API yang ditujukan bagi 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 gerak 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 ini didukung. Lihat Spatializer.java
untuk mengetahui daftar lengkap API sistem.
Jenis sensor pelacakan gerak 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
Selain menerapkan mesin efek spatializer, OEM harus mengonfigurasi platform mereka 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 spasial.
- Untuk audio spasial dengan pelacakan gerakan kepala, headphone harus memiliki sensor pelacak gerakan kepala bawaan.
- Implementasi harus sesuai dengan standar yang diusulkan untuk pelacakan kepala melalui protokol HID dari headset Bluetooth ke ponsel.
- HAL Audio v7.1 diperlukan untuk dukungan audio spasial.
Integrasikan audio spasial menggunakan langkah-langkah berikut:
Deklarasikan dukungan audio spasial di file
device.mkAnda, sebagai berikut:PRODUCT_PROPERTY_OVERRIDES += \ ro.audio.spatializer_enabled=trueTindakan ini menyebabkan
AudioServicemenginisialisasi dukungan spatializer.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"/>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 spesifik yang diperlukan agar framework dapat menemukan kemampuan dan konfigurasi yang didukung, seperti:
SPATIALIZER_PARAM_SUPPORTED_LEVELSSPATIALIZER_PARAM_LEVELSPATIALIZER_PARAM_HEADTRACKING_SUPPORTEDSPATIALIZER_PARAM_HEADTRACKING_MODESPATIALIZER_PARAM_SUPPORTED_CHANNEL_MASKSSPATIALIZER_PARAM_SUPPORTED_SPATIALIZATION_MODESSPATIALIZER_PARAM_HEAD_TO_STAGE
Lihat
effect_spatializer.huntuk mengetahui informasi selengkapnya.
Rekomendasi
Sebaiknya OEM menggunakan pedoman berikut selama penerapan:
- Gunakan LE audio jika tersedia untuk mempermudah 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) Classic dengan Advanced Audio Distribution Profile (A2DP):
Validasi
Untuk memvalidasi fungsi fitur audio spasial, gunakan pengujian CTS yang tersedia di SpatializerTest.java.
Penerapan algoritma spasialisasi atau pelacakan gerak kepala yang buruk dapat menyebabkan kegagalan memenuhi rekomendasi latensi pulang pergi seperti yang tercantum dalam Rekomendasi.