Android 13 wprowadza standardowy sposób obsługi dźwięku przestrzennego i śledzenia ruchów głowy przez producentów OEM bez konieczności stosowania dostosowań ani pakietów SDK specyficznych dla dostawców.
Dźwięk przestrzenny to technologia służąca do tworzenia pola dźwiękowego otaczającego słuchacza. Dźwięk przestrzenny umożliwia użytkownikom odbieranie kanałów i poszczególnych dźwięków w pozycjach, które różnią się od fizycznych pozycji przetworników urządzenia audio używanego do odtwarzania. Dźwięk przestrzenny umożliwia na przykład słuchanie wielokanałowej ścieżki dźwiękowej przez słuchawki. Dzięki dźwiękowi przestrzennemu użytkownicy słuchawek mogą słyszeć dialogi przed sobą i efekty przestrzenne za sobą, mimo że mają tylko 2 przetworniki do odtwarzania.
Śledzenie ruchów głowy pomaga użytkownikowi zrozumieć charakter symulowanej wokół głowy przestrzennej sceny dźwiękowej. Ta funkcja działa skutecznie tylko wtedy, gdy opóźnienie jest niewielkie. Opóźnienie jest mierzone jako czas między ruchem głowy użytkownika a momentem, w którym słyszy on, że wirtualny głośnik zmienia położenie.
Android 13 optymalizuje dźwięk przestrzenny i śledzenie ruchów głowy, oferując przetwarzanie dźwięku przestrzennego na najniższym możliwym poziomie w potoku audio, aby uzyskać jak najmniejsze opóźnienie.
Architektura
Zmodyfikowana platforma audio i interfejs API Androida w wersji 13 ułatwiają wdrożenie technologii dźwięku przestrzennego w całym ekosystemie.
Na ilustracji poniżej przedstawiono zmiany związane z dźwiękiem przestrzennym wprowadzone w architekturze potoku audio w Androidzie 13:
Rysunek 1. Architektura potoku audio z przestrzennym dźwiękiem
W nowym modelu przestrzenny dźwięk jest częścią platformy audio i jest oddzielony od dekodera. Przestrzenny dźwięk przyjmuje zmiksowaną treść audio i renderuje strumień stereo do Audio HAL. Oddzielenie przestrzennego dźwięku od dekodera umożliwia producentom OEM wybieranie różnych dostawców dekodera i przestrzennego dźwięku oraz osiągnięcie pożądanego opóźnienia w obie strony w przypadku śledzenia ruchów głowy. Ten nowy model obejmuje też punkty zaczepienia do platformy czujników do śledzenia ruchów głowy.
Na ilustracji poniżej przedstawiono architekturę systemu platformy audio dla przestrzennego dźwięku i efektu śledzenia ruchów głowy:
Rysunek 2. Architektura systemu z przestrzennym dźwiękiem i śledzeniem ruchów głowy
Wszystkie interfejsy API dźwięku przestrzennego są pogrupowane w publicznej
Spatializer klasie na poziomie aplikacji. Klasa SpatializerHelper
w interfejsach usługi audio komunikuje się z komponentami interfejsu systemowego, aby zarządzać
funkcjami związanymi z przestrzennym dźwiękiem na podstawie platformy i możliwości podłączonego urządzenia. Nowa klasa Spatializer w usłudze zasad audio tworzy i kontroluje wykres dźwięku przestrzennego potrzebny do miksowania wielokanałowego i przestrzennego dźwięku na podstawie
możliwości określonych przez producenta OEM,
podłączone urządzenia i aktywne przypadki użycia. Nowa klasa miksera SpatializerThread miksuje ścieżki wielokanałowe i przekazuje wynikowy miks do silnika efektów przetwarzania końcowego
, który renderuje wyjście stereo do Audio HAL. W przypadku śledzenia ruchów głowy klasa
SpatializerPoseController grupuje funkcje związane ze śledzeniem ruchów głowy, aby
komunikować się ze stosem czujników oraz łączyć i filtrować sygnały czujników, które są
przekazywane do silnika efektów. Dane z czujnika śledzenia ruchów głowy są przesyłane przez sterownik Bluetooth za pomocą protokołu HID.
Zmiany w architekturze potoku audio w Androidzie 13 poprawiają te aspekty:
- Zmniejszenie opóźnienia między przestrzennym dźwiękiem a słuchawkami.
- Udostępnianie ujednoliconych interfejsów API dla deweloperów aplikacji.
- Kontrolowanie stanu śledzenia ruchów głowy za pomocą interfejsów API systemu.
- Wykrywanie czujników śledzenia ruchów głowy i łączenie ich z aktywnymi urządzeniami audio.
- Łączenie sygnałów z różnych czujników i obliczanie pozycji głowy, która może być wykorzystywana przez silnik efektów przestrzennego dźwięku.
Funkcje takie jak kompensacja odchylenia, wykrywanie bezruchu i ograniczanie szybkości można zaimplementować za pomocą biblioteki narzędzi do śledzenia ruchów głowy.
Interfejsy API dźwięku przestrzennego
Android 13 oferuje interfejsy API systemu dźwięku przestrzennego i interfejsy API dla deweloperów.
Producenci OEM mogą dostosowywać działanie aplikacji na podstawie dostępności funkcji i stanu włączenia, który jest ustawiany przez interfejsy API systemu. Aplikacje mogą też konfigurować atrybuty audio, aby wyłączyć dźwięk przestrzenny ze względów estetycznych lub wskazać, że strumień audio jest już przetwarzany pod kątem dźwięku przestrzennego.
Interfejsy API dla deweloperów znajdziesz w artykule Spatializer.
Producenci OEM mogą używać interfejsów API systemu do implementowania interfejsu ustawień dźwięków i Bluetooth, który umożliwia użytkownikowi kontrolowanie stanu dźwięku przestrzennego i funkcji śledzenia ruchów głowy na urządzeniu. Użytkownik może włączyć lub wyłączyć dźwięk przestrzenny dla głośnika i słuchawek przewodowych w interfejsie ustawień dźwięków. Ustawienie dźwięku przestrzennego dla głośnika jest dostępne tylko wtedy, gdy implementacja efektu przestrzennego dźwięku obsługuje tryb transauralny.
Użytkownik może też włączyć lub wyłączyć dźwięk przestrzenny i śledzenie ruchów głowy w ustawieniach urządzenia Bluetooth dla każdego urządzenia. Ustawienie śledzenia ruchów głowy jest dostępne tylko wtedy, gdy zestaw słuchawkowy Bluetooth udostępnia czujnik śledzenia ruchów głowy.
Domyślne ustawienia dźwięku przestrzennego są zawsze włączone, jeśli funkcja jest obsługiwana. Pełną listę interfejsów API systemu znajdziesz w artykule Spatializer.java.
Do platformy czujników dodano nowy typ czujnika śledzenia ruchów głowy Sensor.TYPE_HEAD_TRACKER, który jest udostępniany przez Sensor HAL jako czujnik dynamiczny przez Bluetooth lub USB.
Integracja dźwięku przestrzennego
Oprócz implementacji silnika efektów przestrzennego dźwięku producenci OEM muszą skonfigurować swoją platformę pod kątem obsługi dźwięku przestrzennego.
Wymagania
Aby zintegrować dźwięk przestrzenny, musisz spełnić te wymagania:
- Audio HAL i audio DSP muszą obsługiwać dedykowaną ścieżkę wyjściową dla dźwięku przestrzennego.
- W przypadku dźwięku przestrzennego ze śledzeniem ruchów głowy słuchawki muszą mieć wbudowane czujniki śledzenia ruchów głowy.
- Implementacja musi być zgodna z proponowanym standardem śledzenia ruchów głowy za pomocą protokołu HID z zestawu słuchawkowego Bluetooth do telefonu.
- Do obsługi dźwięku przestrzennego wymagany jest Audio HAL w wersji 7.1.
Aby zintegrować dźwięk przestrzenny, wykonaj te czynności:
Zadeklaruj obsługę dźwięku przestrzennego w pliku
device.mkw ten sposób:PRODUCT_PROPERTY_OVERRIDES += \ ro.audio.spatializer_enabled=trueSpowoduje to zainicjowanie obsługi przestrzennego dźwięku przez
AudioService.Zadeklaruj dedykowane wyjście dla miksu dźwięku przestrzennego w pliku
audio_policy_configuration.xmlw ten sposób:<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"/>Zadeklaruj bibliotekę efektów przestrzennego dźwięku w pliku
audio_effects.xmlw ten sposób:<audio_effects_conf> <libraries> <library name="spatializer_lib" path="libMySpatializer.so"/> … </libraries> <effects> <effect name="spatializer" library="spatializer_lib" uuid="myunique-uuid-formy-spatializereffect"/>Dostawcy implementujący efekt przestrzennego dźwięku muszą przestrzegać tych zasad:
- Podstawowa konfiguracja i sterowanie identyczne jak w przypadku innych efektów w Effect HAL.
Określone parametry potrzebne do wykrywania przez platformę obsługiwanych funkcji i konfiguracji, takie jak:
SPATIALIZER_PARAM_SUPPORTED_LEVELSSPATIALIZER_PARAM_LEVELSPATIALIZER_PARAM_HEADTRACKING_SUPPORTEDSPATIALIZER_PARAM_HEADTRACKING_MODESPATIALIZER_PARAM_SUPPORTED_CHANNEL_MASKSSPATIALIZER_PARAM_SUPPORTED_SPATIALIZATION_MODESSPATIALIZER_PARAM_HEAD_TO_STAGE
Więcej informacji znajdziesz w artykule
effect_spatializer.h.
Rekomendacje
Podczas implementacji zalecamy producentom OEM stosowanie się do tych wytycznych:
- Aby ułatwić interoperacyjność i osiągnąć cele dotyczące opóźnienia, używaj LE Audio, gdy jest dostępne.
- Opóźnienie w obie strony, od wykrycia ruchu czujnika do dźwięku odbieranego przez słuchawki, musi być mniejsze niż 150 ms, aby zapewnić dobrą jakość obsługi.
- W przypadku Bluetooth Classic z profilem zaawansowanej dystrybucji dźwięku (A2DP):
Weryfikacja
Aby sprawdzić działanie funkcji dźwięku przestrzennego, użyj testów CTS
dostępnych w SpatializerTest.java.
Nieprawidłowa implementacja algorytmów przestrzennego dźwięku lub śledzenia ruchów głowy może spowodować że nie uda się spełnić zalecenia dotyczącego opóźnienia w obie strony wymienionego w sekcji Rekomendacje.