Dźwięk w wysokiej rozdzielczości

Wersja Androida 10 zawiera następujące ulepszenia dotyczące dźwięku o wysokiej rozdzielczości:

  • Float: kodeki i ekstraktory WAV, FLAC zostały zaktualizowane w celu obsługi float (ponad 24 bity bezstratnej precyzji). Efekty Downmixu i Virtualizera zostały zaktualizowane do wersji pływającej. Zaktualizowana precyzja jest dozwolona przez MediaPlayer (NuPlayer).
  • Wysoka częstotliwość: kodeki i ekstraktory WAV, FLAC zostały zaktualizowane tak, aby obsługiwały częstotliwość 192 kHz. Domyślne efekty dostarczane z systemem Android są testowane pod kątem obsługi 192 kHz na standardowych częstotliwościach. Dozwolone częstotliwości standardowe to 88,2 kHz, 96 kHz, 176,4 kHz i 192 kHz.
  • Wielokanałowy: Domyślne efekty odtwarzania w systemie Android są testowane pod kątem obsługi wielokanałowej w ośmiu kanałach.
  • Timing: Informacje o synchronizacji są zawarte w całym środowisku audio.

Począwszy od Androida 9, następujące ulepszenia nie wymagają implementacji żadnego partnera:

  • Liczba jednoczesnych ścieżek wyjściowych klienta wzrasta z 14 do 40, ponieważ ograniczona liczba instancji klienta AudioTrack stanowiła problem w aplikacjach w systemie Android 8.x.
  • Maksymalna pamięć klienta/serwera wzrasta z 4 MB do 32 MB (w zależności od całkowitej pamięci urządzenia), aby umożliwić jednoczesne odtwarzanie ścieżek audio w wysokiej rozdzielczości.
  • Całkowita liczba mieszanych utworów wzrasta z 32 do 256, aby zapobiec rywalizacji o zasoby między aplikacjami a interfejsem użytkownika systemu.

Zmiany efektu wyjściowego

Zobacz Efekty dźwiękowe dotyczące zmian w wersji Androida 11.

Przed wydaniem Androida 9 przetwarzanie łańcucha efektów było realizowane w formacie próbki stereo int16. Miało to kilka ograniczeń:

  • Wszystkie efekty wyjściowe wymusiły konwersję z danych audio zmiennoprzecinkowych na int16, powodując utratę precyzji.
  • Efekty wyjściowe zostały odrzucone w przypadku odbiorników wyjściowych o liczbie kanałów większej niż dwa.

W wersji Androida 9 potok przetwarzania łańcucha efektów został zaktualizowany w celu obsługi wielokanałowego formatu float. Kluczowe punkty:

  • Efekty oprogramowania Android zostały już przeniesione do wersji stereo float.
  • Starsze efekty są obsługiwane przez adaptery formatu, które w razie potrzeby konwertują liczbę zmiennoprzecinkową na int16.

Implementuj efekty wyjściowe

Implementacja referencyjna efektów wyjściowych jest dostępna pod frameworks/av/media/libeffects .

Partnerzy wdrażający własne niestandardowe efekty wyjściowe powinni wykonać następujące czynności w przypadku wersji Androida 10:

  • Zaktualizuj efekty wyjściowe, aby obsługiwały wielokanałowy format float:
    • Obsługa przetwarzania Int16 nie jest już wymagana.
    • Obsługuje liczbę kanałów wyjściowych od 2–8 (dla przyszłej kompatybilności rozważ liczbę od 1–30).
    • Obsługuje liczbę kanałów wejściowych odpowiadającą liczbie kanałów wyjściowych dla efektów wstawiania. Efekty pomocnicze nadal mają liczbę kanałów wejściowych wynoszącą 1 (mono).
    • Obsługuje zarówno maski pozycji kanału (kanoniczne), jak i maski indeksu kanału (1 << n) - 1 .
  • Jeśli musisz nadal obsługiwać efekty wyjściowe starszego dostawcy i nie możesz ich zaktualizować, zweryfikuj starszy kod w następujący sposób:
    • Starsze efekty wyjściowe (wstawki) muszą odrzucać nieobsługiwane konfiguracje w EFFECT_CMD_SET_CONFIG .
      • Sprawdź, czy format to int16.
      • Sprawdź, czy maski kanałów wejściowych i wyjściowych są stereo.
      • Jeśli którekolwiek sprawdzenie zakończy się niepowodzeniem, zwróć -EINVAL .
    • Starsze efekty wyjściowe (pomocnicze) są konfigurowane przez AudioFlinger z monofoniczną maską kanału wejściowego i potencjalnie wielokanałowymi maskami kanałów wyjściowych, w zależności od tego, czy ujście wyjściowe jest wielokanałowe. Muszą odrzucić nieobsługiwane konfiguracje w EFFECT_CMD_SET_CONFIG .
      • Sprawdź, czy format to int16.
      • Sprawdź, czy maska ​​kanału wejściowego jest mono, a maska ​​kanału wyjściowego jest stereo.
      • Jeśli którekolwiek sprawdzenie zakończy się niepowodzeniem, zwróć -EINVAL .
    • Zweryfikuj starszy kod. Nie zakładaj, że to działa!