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!
- Starsze efekty wyjściowe (wstawki) muszą odrzucać nieobsługiwane konfiguracje w