Android 13 memperkenalkan cara standar bagi OEM untuk mendukung audio spasial dan pelacakan gerakan kepala tanpa memerlukan vendor khusus atau SDK Google.
Audio spasial adalah teknologi yang digunakan untuk menciptakan medan suara yang mengelilingi pemroses. Audio spasial memungkinkan pengguna merasakan saluran dan setiap suara pada posisi yang berbeda dari posisi fisik transduser perangkat audio yang digunakan untuk pemutaran. Misalnya, audio spasial memberi pengguna kemampuan untuk mendengarkan soundtrack multisaluran melalui headphone. Menggunakan spasial audio, pengguna headphone dapat melihat dialog di depan mereka, dan mengelilingi di belakangnya, meskipun hanya memiliki dua transduser untuk pemutaran.
Pelacakan gerak kepala membantu pengguna memahami sifat suara yang dispasialisasi sedang disimulasikan di sekitar kepala mereka. Pengalaman ini hanya efektif ketika latensinya rendah, yang mana latensi diukur sebagai waktu antara saat pengguna menggerakkan kepala mereka dan saat mereka mendengar posisi speaker virtual bergerak sebagaimana mestinya.
Android 13 mengoptimalkan audio spasial dan head dengan menawarkan pemrosesan audio spasial serendah mungkin dalam pipeline audio untuk mendapatkan latensi serendah mungkin.
Arsitektur
Framework audio Android dan API 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 yang baru, spatializer adalah bagian dari framework audio dan yang dipisahkan dari decoder. spatializer mengambil konten audio campuran dan merender streaming stereo ke HAL Audio. Memisahkan spatializer dari memungkinkan OEM memilih vendor yang berbeda untuk decoder dan spatializer dan untuk mencapai latensi bolak-balik yang diinginkan untuk pelacakan gerak kepala. Model baru ini juga menyertakan hook ke framework sensor untuk pelacakan gerakan kepala.
Gambar berikut mengilustrasikan arsitektur sistem framework audio untuk efek pelacakan gerak dan spatializer:
Gambar 2. Arsitektur sistem dengan spatializer dan pelacakan gerak kepala
Semua API audio spasial dikelompokkan sebagai publik
Class Spatializer
di tingkat aplikasi. SpatializerHelper
dalam antarmuka layanan audio dengan komponen UI Sistem untuk mengelola
fungsionalitas terkait spatializer berdasarkan platform dan perangkat yang terhubung
kemampuan IT. Class Spatializer
baru di layanan kebijakan audio membuat dan mengontrol setelan
grafik audio yang diperlukan untuk mixing dan spasial multisaluran berdasarkan
kemampuan yang dinyatakan oleh OEM,
perangkat yang terhubung, dan kasus penggunaan aktif. Class mixer baru SpatializerThread
menggabungkan trek multisaluran dan memasukkan campuran yang dihasilkan ke FX pascapemrosesan
yang menghasilkan output stereo ke HAL Audio. Untuk pelacakan gerak kepala,
Class SpatializerPoseController
mengelompokkan fungsi yang terkait dengan pelacakan gerak kepala, hingga
antarmuka ke tumpukan sensor dan untuk
menggabungkan dan menyaring sinyal sensor yang
dipasok ke mesin efek. Data sensor pelacakan kepala dibawa melalui protokol HID
dari {i>driver Bluetooth<i}.
Perubahan pada arsitektur pipeline audio Android 13 melakukan perbaikan pada hal berikut:
- Menurunkan latensi antara spatializer dan headphone.
- Menyediakan API terpadu untuk melayani developer aplikasi.
- Mengontrol status pelacakan head melalui API sistem.
- Menemukan sensor pelacakan kepala dan mengaitkannya dengan perangkat audio yang aktif.
- Menggabungkan sinyal dari berbagai sensor dan menghitung pose kepala yang dapat yang digunakan oleh mesin efek spatializer.
Fungsi seperti kompensasi bias, deteksi keheningan, dan pembatasan kapasitas dapat diterapkan menggunakan library utilitas pelacakan head.
API audio spasial
Android 13 menawarkan sistem audio spasial dan developer Google Cloud Platform.
OEM dapat menyesuaikan perilaku aplikasi berdasarkan ketersediaan fitur dan status aktif, yang disetel oleh API sistem. Aplikasi juga dapat mengonfigurasi atribut audio untuk nonaktifkan audio spasial untuk alasan estetika atau untuk menunjukkan bahwa streaming audio sudah diproses untuk audio spasial.
Untuk API yang ditujukan untuk developer, lihat Spatializer
.
OEM dapat menggunakan API sistem untuk menerapkan UI setelan Suara dan Bluetooth, yang memungkinkan pengguna mengontrol status audio spasial dan kepala untuk perangkat mereka. Pengguna dapat mengaktifkan atau menonaktifkan audio spasial untuk speaker dan headphone berkabel di UI setelan Suara. Ruang setelan audio untuk speaker hanya tersedia jika efek spasial mendukung mode transaural.
Pengguna juga dapat mengaktifkan atau menonaktifkan audio spasial dan pelacakan gerakan kepala di Setelan perangkat Bluetooth untuk setiap perangkat. Setelan pelacakan gerak kepala tersedia hanya jika headset Bluetooth mengekspos sensor pelacakan gerakan kepala.
Setelan default untuk audio spasial selalu AKTIF jika fitur
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.
Integrasikan audio spasial
Bersama dengan menerapkan mesin efek spatializer, OEM harus mengonfigurasi 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.
- Untuk audio spasial dengan pelacakan gerakan kepala, headphone harus memiliki bagian kepala sensor pelacak.
- Penerapan harus sesuai dengan standar yang diusulkan untuk pelacakan gerak kepala melalui protokol HID dari headset Bluetooth ke ponsel.
- Audio HAL v7.1 diperlukan untuk mendapatkan 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
melakukan inisialisasi 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 spasial harus sesuai dengan hal berikut:
- Konfigurasi dan kontrol dasar identik dengan efek lain di Effect HAL.
Parameter khusus yang diperlukan framework untuk menemukan parameter yang didukung kemampuan dan konfigurasi Anda, 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 LE Audio jika tersedia untuk memudahkan interoperabilitas dan mencapai latensi tujuan tersebut.
- 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 uji CTS
tersedia di SpatializerTest.java
.
Implementasi algoritma spasial atau pelacakan gerak kepala yang buruk dapat menyebabkan kegagalan dalam memenuhi rekomendasi latensi bolak-balik seperti yang tercantum dalam Rekomendasi.