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