Wersja Android 10 zawiera te udoskonalenia dotyczące dźwięku w wysokiej rozdzielczości:
- Płytka: kodery i ekstraktory WAV i FLAC zostały zaktualizowane, aby obsługiwać zmiennoprzecinkowe (24 i więcej bitów bezstratnej precyzji). Efekty downmix i Virtualizer zostały zaktualizowane do typu float. Zaktualizowana dokładność jest dozwolona przez MediaPlayer (NuPlayer).
- Wysoka częstotliwość: kodeki WAV, FLAC i moduły wyodrębniania danych zostały zaktualizowane do obsługi 192 kHz. Domyślne efekty dostarczane przez Androida są testowane pod kątem obsługi 192 kHz przy standardowych częstotliwościach. Dozwolone standardowe częstotliwości to 88,2 kHz, 96 kHz, 176,4 kHz i 192 kHz.
- Wielokanałowy: domyślne efekty odtwarzania na Androidzie są testowane pod kątem obsługi wielu kanałów do 8 kanałów.
- Czas: informacje o czasie są uwzględniane w całej ścieżce audio.
Od Androida 9 te ulepszenia nie wymagają implementacji przez partnera:
- Liczba jednoczesnych ścieżek wyjściowych klienta zwiększa się z 14 do 40, ponieważ ograniczone instancje klienta
AudioTrack
stanowiły problem w przypadku aplikacji na Androida 8.x. - Maksymalna pamięć klienta/serwera zwiększa się z 4 MB do 32 MB (w zależności od łącznej pamięci urządzenia), aby umożliwić odtwarzanie większej liczby ścieżek audio w wysokiej rozdzielczości.
- Łączna liczba ścieżek mieszanych zwiększa się z 32 do 256, aby zapobiec rywalizacji o zasoby między aplikacjami a interfejsem systemu.
Zmiany efektu wyjściowego
Informacje o zmianach w Androidzie 11 znajdziesz w artykule Efekty dźwiękowe.
Przed wydaniem Androida 9 przetwarzanie łańcucha efektów było implementowane w formacie próbki stereo int16. Ta metoda miała kilka ograniczeń:
- Wszystkie efekty wyjściowe wymuszają konwersję danych audio z punktu ruchomego na int16, co powoduje utratę dokładności.
- Efekty wyjściowe zostały odrzucone przez wyjściowe złącza z większą niż 2 liczbą kanałów.
W wersji Androida 9 potok przetwarzania łańcucha efektów został uaktualniony, aby obsługiwać wielokanałowy format liczby zmiennoprzecinkowej. Najważniejsze kwestie:
- Efekty oprogramowania na Androida zostały już przeniesione do formatu stereo float.
- Starsze efekty są obsługiwane za pomocą adapterów formatu, które w razie potrzeby konwertują typ danych float na int16.
Implementowanie efektów wyjściowych
Referencyjna implementacja efektów wyjściowych jest dostępna w sekcji frameworks/av/media/libeffects
.
Partnerzy implementujący własne niestandardowe efekty wyjściowe powinni wykonać te czynności w przypadku wersji Android 10:
- Zaktualizuj efekty wyjściowe, aby obsługiwały format wielokanałowej liczby zmiennoprzecinkowej:
- Obsługa przetwarzania typu Int16 nie jest już wymagana.
- Obsługuj liczbę kanałów wyjściowych na poziomie 2–8 (aby zapewnić zgodność w przyszłości, ustaw liczbę od 1 do 30).
- Obsługa liczby kanałów wejściowych odpowiadających liczbie kanałów wyjściowych w przypadku wstawiania efektów. Liczba kanałów wejściowych w przypadku efektów dodatkowych nadal wynosi 1 (mono).
- Obsługuje maski pozycji kanału (kanoniczne) i maski indeksu kanału
(1 << n) - 1
.
- Jeśli musisz nadal obsługiwać starsze efekty wyjściowe dostawcy i nie możesz ich zaktualizować, zweryfikuj starszy kod w ten sposób:
- Starsze efekty wyjściowe (wstawianie) muszą odrzucać nieobsługiwane konfiguracje w
EFFECT_CMD_SET_CONFIG
.- Sprawdź, czy format jest int16.
- Sprawdź, czy maski kanałów wejściowych i wyjściowych są stereo.
- Jeśli którykolwiek z testów się nie powiedzie, zwracaj
-EINVAL
.
- Starsze efekty wyjściowe (pomocnicze) są konfigurowane przez AudioFlingera za pomocą maski kanału wejściowego mono i potencjalnie wielokanałowych masek kanału wyjściowego, w zależności od tego, czy odbiornik wyjściowy jest wielokanałowy.
Muszą odrzucać nieobsługiwane konfiguracje w
EFFECT_CMD_SET_CONFIG
.- Sprawdź, czy format jest int16.
- Sprawdź, czy maska kanału wejściowego jest mono, a maska kanału wyjściowego jest stereo.
- Jeśli którykolwiek z testów się nie powiedzie, zwracaj
-EINVAL
.
- Weryfikuj starszy kod. Nie zakładaj, że wszystko działa.
- Starsze efekty wyjściowe (wstawianie) muszą odrzucać nieobsługiwane konfiguracje w