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 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 kepala membantu pengguna memahami sifat panggung suara yang disimulasikan di sekitar kepala mereka. Pengalaman ini hanya efektif jika 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 HAL Audio. Dengan memisahkan spatializer dari decoder, OEM dapat memilih vendor yang berbeda untuk decoder dan spatializer serta mencapai latensi pulang pergi yang diinginkan untuk pelacakan kepala. Model baru ini juga mencakup hook ke framework sensor untuk pelacakan 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 layanan audio berinteraksi 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 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 hasil campuran ke mesin FX pascapemrosesan yang merender output stereo ke Audio HAL. Untuk pelacakan kepala, class
SpatializerPoseController
mengelompokkan fungsi yang terkait dengan pelacakan kepala, untuk
berinteraksi dengan stack sensor dan menggabungkan serta memfilter sinyal sensor yang
diteruskan ke mesin efek. Data sensor pelacakan kepala dibawa melalui protokol HID
dari driver Bluetooth.
Perubahan pada arsitektur pipeline audio Android 13 meningkatkan kualitas 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 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 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 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 kepala baru Sensor.TYPE_HEAD_TRACKER
ditambahkan ke
framework Sensor dan diekspos oleh HAL Sensor 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.mk
Anda, sebagai berikut:PRODUCT_PROPERTY_OVERRIDES += \ ro.audio.spatializer_enabled=true
Hal ini menyebabkan
AudioService
menginisialisasi dukungan spatializer.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"/>
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_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 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 kepala yang buruk dapat menyebabkan kegagalan memenuhi rekomendasi latensi pulang pergi seperti yang tercantum dalam Rekomendasi.