Dźwięk przestrzenny i śledzenie głowy

Android 13 wprowadza dla producentów OEM standardowy sposób obsługi dźwięku przestrzennego i śledzenia głowy bez konieczności dostosowywania specyficznych dla dostawcy lub zestawów SDK.

Dźwięk przestrzenny to technologia wykorzystywana 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 różniących się od fizycznych pozycji przetworników urządzenia audio używanego do odtwarzania. Na przykład dźwięk przestrzenny oferuje użytkownikowi możliwość słuchania wielokanałowej ścieżki dźwiękowej przez słuchawki. Korzystając z dźwięku przestrzennego, użytkownicy słuchawek mogą dostrzec dialog przed sobą i efekty przestrzenne za sobą, mimo że do odtwarzania mają tylko dwa przetworniki.

Śledzenie głowy pomaga użytkownikowi zrozumieć naturę przestrzennej sceny dźwiękowej symulowanej wokół jego głowy. To doświadczenie jest skuteczne tylko wtedy, gdy opóźnienie jest niskie, gdzie opóźnienie jest mierzone jako czas między poruszeniem głowy użytkownika a momentem, w którym usłyszy odpowiedni ruch wirtualnego głośnika.

Android 13 optymalizuje dźwięk przestrzenny i śledzenie głowy, oferując przetwarzanie dźwięku przestrzennego na najniższym możliwym poziomie w potoku audio, aby uzyskać najniższe możliwe opóźnienie.

Architektura

Zmodyfikowana platforma audio i interfejs API systemu Android w systemie Android 13 ułatwiają przyjęcie technologii dźwięku przestrzennego w całym ekosystemie.

Poniższy rysunek ilustruje zmiany związane z dźwiękiem przestrzennym wprowadzone w architekturze potoku audio w systemie Android 13:

spatial-audio

Rysunek 1. Architektura potoku audio z przestrzennikiem

W nowym modelu przestrzennik stanowi część struktury audio i jest oddzielony od dekodera. Przestrzenizator pobiera zmiksowaną zawartość audio i renderuje strumień stereo do Audio HAL. Oddzielenie przestrzennika od dekodera umożliwia producentom OEM wybór różnych dostawców dekodera i przestrzennika oraz osiągnięcie pożądanego opóźnienia w obie strony dla śledzenia głowy. Ten nowy model zawiera również haczyki do ramy czujnika w celu śledzenia głowy.

Poniższy rysunek ilustruje architekturę systemu audio dla efektu przestrzennego i śledzenia głowy:

spatial-sys-arch

Rysunek 2. Architektura systemu z przestrzennikiem i śledzeniem głowy

Wszystkie interfejsy API dźwięku przestrzennego są zgrupowane w publicznej klasie Spatializer na poziomie aplikacji. Klasa SpatializerHelper w interfejsach usług audio ze składnikami interfejsu użytkownika systemu umożliwia zarządzanie funkcjami związanymi z przestrzennikiem w oparciu o możliwości platformy i podłączonego urządzenia. Nowa klasa Spatializer w usłudze zasad audio tworzy i kontroluje przestrzenny wykres audio potrzebny do wielokanałowego miksowania i uprzestrzenniania w oparciu o możliwości określone przez producenta OEM , podłączone urządzenia i aktywne przypadki użycia. Nowa klasa miksera SpatializerThread miksuje ścieżki wielokanałowe i przekazuje powstały miks do silnika FX przetwarzania końcowego, który renderuje sygnał stereo do Audio HAL. W przypadku śledzenia głowy klasa SpatializerPoseController grupuje funkcje związane ze śledzeniem głowy, aby połączyć się ze stosem czujników oraz połączyć i filtrować sygnały czujników podawane do silnika efektów. Dane czujnika śledzenia głowy są przesyłane protokołem HID ze sterownika Bluetooth.

Zmiany w architekturze potoku audio Androida 13 poprawiają następujące elementy:

  • Obniżenie opóźnienia między przestrzennikiem a słuchawkami.
  • Udostępnianie ujednoliconych interfejsów API do obsługi twórców aplikacji.
  • Kontrolowanie stanu śledzenia głowy poprzez systemowe API.
  • Odkrycie czujników śledzenia głowy i powiązanie ich z aktywnymi urządzeniami audio.
  • Łączenie sygnałów z różnych czujników i obliczanie pozycji głowy, która może zostać wykorzystana przez silnik efektu przestrzennego.

Funkcje takie jak kompensacja odchylenia, wykrywanie bezruchu i ograniczanie szybkości można wdrożyć za pomocą biblioteki narzędzia do śledzenia głowy .

Przestrzenne API audio

Android 13 oferuje system dźwięku przestrzennego i interfejsy API dla programistów.

Producenci OEM mogą dostosowywać zachowanie aplikacji w oparciu o dostępność funkcji i stan włączenia, który jest ustawiany przez systemowe interfejsy API. Aplikacje mogą także 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 .

Aby zapoznać się z interfejsami API przeznaczonymi dla programistów, zobacz Spatializer .

Producenci OEM mogą używać systemowych interfejsów API do implementowania interfejsu dźwięków i ustawień Bluetooth, który umożliwia użytkownikowi kontrolowanie stanu dźwięku przestrzennego i funkcji śledzenia głowy w ich 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ęki. Ustawienie dźwięku przestrzennego dla głośnika jest dostępne tylko wtedy, gdy implementacja efektu przestrzennego obsługuje tryb przezuszny.

Użytkownik może także włączyć lub wyłączyć dźwięk przestrzenny i śledzenie głowy w ustawieniach urządzenia Bluetooth dla każdego urządzenia. Ustawienie śledzenia głowy jest dostępne tylko wtedy, gdy zestaw słuchawkowy Bluetooth posiada czujnik śledzenia głowy.

Domyślne ustawienia dźwięku przestrzennego są zawsze włączone, jeśli funkcja jest obsługiwana. Pełną listę systemowych interfejsów API można znaleźć w Spatializer.java .

Nowy czujnik śledzenia głowy typu Sensor.TYPE_HEAD_TRACKER został dodany do struktury Sensor i udostępniony przez Sensor HAL jako czujnik dynamiczny przez Bluetooth lub USB.

Zintegruj dźwięk przestrzenny

Wraz z wdrożeniem silnika efektów przestrzennych producenci OEM muszą skonfigurować swoją platformę pod kątem obsługi dźwięku przestrzennego.

Wymagania

Aby zintegrować dźwięk przestrzenny, muszą zostać spełnione następujące wymagania:

  • Audio HAL i audio DSP muszą obsługiwać dedykowaną ścieżkę wyjściową dla dźwięku przestrzennego.
  • Aby uzyskać dźwięk przestrzenny ze śledzeniem głowy, słuchawki muszą mieć wbudowane czujniki śledzenia głowy.
  • Implementacja musi być zgodna z proponowanym standardem śledzenia głowy za pośrednictwem protokołu HID z zestawu słuchawkowego Bluetooth do telefonu.
  • Do obsługi dźwięku przestrzennego wymagana jest wersja audio HAL v7.1 .

Zintegruj dźwięk przestrzenny, wykonując następujące kroki:

  1. Zadeklaruj obsługę dźwięku przestrzennego w swoim pliku device.mk w następujący sposób:

    PRODUCT_PROPERTY_OVERRIDES += \
         ro.audio.spatializer_enabled=true
    

    Powoduje to, że AudioService inicjuje obsługę przestrzennika.

  2. Zadeklaruj dedykowane wyjście dla przestrzennego miksu audio w pliku audio_policy_configuration.xml w następujący 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"/>
    
  3. Zadeklaruj bibliotekę efektów przestrzennych w audio_effects.xml w następujący 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"/>
    
  4. Dostawcy wdrażający efekt przestrzenny muszą spełniać następujące wymagania:

    • Podstawowa konfiguracja i sterowanie identyczne z innymi efektami w Effect HAL.
    • Konkretne parametry potrzebne platformie do wykrywania obsługiwanych możliwości 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 effect_spatializer.h .

Zalecenia

Zalecamy, aby producenci OEM podczas wdrażania stosowali się do następujących wytycznych:

  • Używaj dźwięku LE, jeśli jest dostępny, aby ułatwić interoperacyjność i osiągnąć cele w zakresie opóźnień.
  • Aby zapewnić dobry UX, opóźnienie w obie strony, od wykrycia ruchu czujnika do dźwięku odbieranego przez słuchawki, musi być mniejsze niż 150 ms.
  • Dla Bluetooth (BT) Classic z zaawansowanym profilem dystrybucji audio (A2DP):
    • Użyj kodeka o niskim opóźnieniu, takiego jak Opus .
    • Zaimplementuj funkcje kontroli opóźnień w Audio HAL . Umożliwia to optymalizację mocy i wydajności, gdy śledzenie głowy jest wyłączone, oraz wyłączenie śledzenia głowy w nieoptymalnych warunkach.

Walidacja

Aby sprawdzić funkcjonalność funkcji dźwięku przestrzennego, użyj testów CTS dostępnych w SpatializerTest.java .

Zła implementacja algorytmów uprzestrzenniania lub śledzenia głowy może spowodować niespełnienie zaleceń dotyczących opóźnień w obie strony wymienionych w Zaleceniach .