Android 13 wprowadza standardowy sposób, w jaki producenci OEM mogą obsługiwać dźwięk przestrzenny i śledzenie ruchów głowy bez konieczności stosowania dostosowań ani pakietów SDK specyficznych dla danego dostawcy.
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. Na przykład dźwięk przestrzenny umożliwia użytkownikowi słuchanie wielokanałowej ścieżki dźwiękowej w słuchawkach. Dzięki dźwiękowi przestrzennemu użytkownicy słuchawek mogą słyszeć dialogi przed sobą, a efekty przestrzenne za sobą, mimo że mają tylko 2 przetworniki do odtwarzania.
Śledzenie ruchów głowy pomaga użytkownikowi zrozumieć charakter przestrzennego dźwięku symulowanego wokół jego głowy. Ta funkcja działa skutecznie tylko wtedy, gdy opóźnienie jest małe. 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 ruchu głowy, oferując przetwarzanie dźwięku przestrzennego na najniższym możliwym poziomie w potoku audio, aby uzyskać najmniejsze możliwe opóźnienie.
Architektura
Zmodyfikowane ramy audio i interfejs API Androida w Androidzie 13 ułatwiają wdrażanie technologii dźwięku przestrzennego w całym ekosystemie.
Na poniższym rysunku przedstawiono zmiany w architekturze potoku audio związane z dźwiękiem przestrzennym, które zostały wprowadzone w Androidzie 13:
Rysunek 1. Architektura potoku audio z przestrzennym dźwiękiem
W nowym modelu przestrzenny procesor dźwięku jest częścią struktury audio i jest odłączony od dekodera. Procesor przestrzenny przyjmuje zmiksowane treści audio i renderuje strumień stereo do warstwy HAL audio. Oddzielenie przestrzennego odtwarzania dźwięku od dekodera umożliwia producentom OEM wybór różnych dostawców dekodera i przestrzennego odtwarzania dźwięku oraz osiągnięcie pożądanego czasu oczekiwania w obie strony w przypadku śledzenia ruchu głowy. Nowy model zawiera też interfejsy do platformy czujników na potrzeby śledzenia ruchu głowy.
Na poniższym rysunku przedstawiono architekturę systemu platformy audio dla efektu przestrzennego i ś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ą zgrupowane w klasie publicznejSpatializer
na poziomie aplikacji. Klasa SpatializerHelper
w interfejsach usługi audio współpracuje z komponentami interfejsu systemu, aby zarządzać funkcjami związanymi z przestrzennym odtwarzaniem dźwięku 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 na podstawie możliwości określonych przez producenta OEM, podłączonych urządzeń i aktywnych przypadków użycia. Nowa klasa miksera SpatializerThread
miksuje ścieżki wielokanałowe i przesyła wynikowy miks do silnika efektów przetwarzania końcowego, który renderuje wyjście stereo do warstwy HAL audio. W przypadku śledzenia ruchu głowy klasa
SpatializerPoseController
grupuje funkcje związane ze śledzeniem ruchu głowy, interfejsem stosu czujników oraz scalaniem i filtrowaniem sygnałów z czujników, które są przekazywane do silnika efektów. Dane z czujnika śledzenia ruchu głowy są przesyłane przez protokół HID z sterownika Bluetooth.
Zmiany w architekturze ścieżki audio w Androidzie 13 poprawiają:
- zmniejszenie opóźnienia między przestrzennym procesorem dźwięku a słuchawkami;
- udostępnianie ujednoliconych interfejsów API deweloperom aplikacji;
- Kontrolowanie stanu śledzenia ruchu głowy za pomocą interfejsów API systemu.
- wykrywanie czujników śledzenia ruchów głowy i przypisywanie ich do aktywnych urządzeń audio;
- Łączenie sygnałów z różnych czujników i obliczanie pozycji głowy, która może być wykorzystywana przez silnik efektów przestrzennych.
Funkcje takie jak kompensacja odchyleń, wykrywanie bezruchu i ograniczanie szybkości można zaimplementować za pomocą biblioteki narzędzi do śledzenia ruchu głowy.
Interfejsy API dźwięku przestrzennego
Android 13 oferuje system dźwięku przestrzennego i interfejsy API dla programistów.
Producenci OEM mogą dostosowywać działanie aplikacji na podstawie dostępności funkcji i ich 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ż przetworzony pod kątem dźwięku przestrzennego.
Interfejsy API dla programistów znajdziesz w Spatializer
.
Producenci OEM mogą używać interfejsów API systemu do implementowania interfejsu ustawień dźwięku i Bluetooth, który umożliwia użytkownikowi kontrolowanie stanu dźwięku przestrzennego i funkcji śledzenia 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ęku. Ustawienie dźwięku przestrzennego głośnika jest dostępne tylko wtedy, gdy implementacja efektu przestrzennego obsługuje tryb transauralny.
Użytkownik może też włączyć lub wyłączyć dźwięk przestrzenny i śledzenie ruchu głowy w ustawieniach urządzenia Bluetooth. Ustawienie monitorowania ruchów głowy jest dostępne tylko wtedy, gdy zestaw słuchawkowy Bluetooth ma czujnik monitorowania 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 Spatializer.java
.
Nowy typ czujnika śledzenia ruchu głowy Sensor.TYPE_HEAD_TRACKER
został dodany do platformy czujników i udostępniony przez HAL czujnika jako czujnik dynamiczny przez Bluetooth lub USB.
Integracja dźwięku przestrzennego
Oprócz wdrożenia silnika efektów przestrzennych producenci OEM muszą skonfigurować platformę pod kątem obsługi dźwięku przestrzennego.
Wymagania
Aby zintegrować dźwięk przestrzenny, musisz spełnić te wymagania:
- Warstwa HAL audio i procesor DSP audio 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 ruchu głowy za pomocą protokołu HID z zestawu słuchawkowego Bluetooth do telefonu.
- Do obsługi dźwięku przestrzennego wymagany jest interfejs HAL audio w wersji 7.1.
Aby zintegrować dźwięk przestrzenny, wykonaj te czynności:
Zadeklaruj obsługę dźwięku przestrzennego w pliku
device.mk
w ten sposób:PRODUCT_PROPERTY_OVERRIDES += \ ro.audio.spatializer_enabled=true
Spowoduje to zainicjowanie przez
AudioService
obsługi przestrzennego odtwarzania dźwięku.Zadeklaruj dedykowane wyjście dla miksu dźwięku przestrzennego w
audio_policy_configuration.xml
w 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 przestrzennych w
audio_effects.xml
w 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 wdrażający efekt przestrzenny muszą spełniać te wymagania:
- Podstawowa konfiguracja i sterowanie są identyczne jak w przypadku innych efektów w interfejsie HAL efektów.
Określone parametry potrzebne do wykrywania przez platformę obsługiwanych funkcji i konfiguracji, takie jak:
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
Więcej informacji znajdziesz w sekcji
effect_spatializer.h
.
Rekomendacje
Podczas wdrażania zalecamy producentom OEM stosowanie się do tych wytycznych:
- Korzystaj z audio LE, gdy jest dostępne, aby ułatwić interoperacyjność i osiągnąć cele związane z opóźnieniem.
- Aby zapewnić dobrą jakość, opóźnienie w obie strony, od wykrycia ruchu czujnika do otrzymania dźwięku przez słuchawki, musi być mniejsze niż 150 ms.
- W przypadku Bluetooth Classic z profilem zaawansowanej dystrybucji audio (A2DP):
- Używaj kodeka o niskim opóźnieniu, np. Opus.
- Wdrażaj funkcje sterowania opóźnieniem w warstwie HAL audio. Umożliwia to optymalizację zużycia energii i wydajności, gdy śledzenie ruchu głowy jest wyłączone, oraz wyłączanie śledzenia ruchu głowy w nieoptymalnych warunkach.
Weryfikacja
Aby sprawdzić działanie funkcji dźwięku przestrzennego, użyj testów CTS dostępnych w SpatializerTest.java
.
Nieprawidłowe wdrożenie algorytmów przestrzennego pozycjonowania dźwięku lub śledzenia ruchu głowy może spowodować niespełnienie rekomendacji dotyczącej opóźnienia w obie strony, która jest podana w rekomendacjach.