W Androidzie 10 wprowadziliśmy te ulepszenia dotyczące dźwięku w wysokiej rozdzielczości:
- Float: kodeki i ekstraktory WAV i FLAC zostały zaktualizowane, aby obsługiwać format float (24+ bity precyzji bezstratnej). Efekty downmix i Virtualizer zostały zaktualizowane do formatu float. Zaktualizowana precyzja jest obsługiwana przez MediaPlayer (NuPlayer).
- Wysoka częstotliwość: kodeki i ekstraktory WAV i FLAC zostały zaktualizowane, aby obsługiwać częstotliwość 192 kHz. Domyślne efekty dostarczane przez Androida są testowane pod kątem obsługi częstotliwości 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łowość: domyślne efekty odtwarzania w Androidzie są testowane pod kątem obsługi wielokanałowości do 8 kanałów.
- Synchronizacja: informacje o synchronizacji są uwzględniane w całym frameworku audio.
Od Androida 9 te ulepszenia nie wymagają żadnej implementacji przez partnera:
- Liczba równoczesnych ścieżek wyjściowych klienta wzrasta z 14
do 40, ponieważ ograniczone instancje klienta
AudioTrackbyły problemem dla aplikacji w Androidzie 8.x. - Maksymalna pamięć klienta/serwera wzrasta z 4 MB do 32 MB (w zależności od całkowitej pamięci urządzenia), co pozwala na jednoczesne odtwarzanie większej liczby ścieżek audio w wysokiej rozdzielczości.
- Łączna liczba zmiksowanych ścieżek wzrasta z 32 do 256, aby zapobiec konfliktom zasobów między aplikacjami a interfejsem systemowym.
Zmiany efektów wyjściowych
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. Miało to kilka ograniczeń:
- Wszystkie efekty wyjściowe wymuszały konwersję danych audio z formatu zmiennoprzecinkowego na format int16, co powodowało utratę precyzji.
- Efekty wyjściowe były odrzucane przez ujścia wyjściowe z liczbą kanałów większą niż 2.
W Androidzie 9 potok przetwarzania łańcucha efektów został ulepszony, aby obsługiwać format wielokanałowy float. Najważniejsze informacje:
- Efekty oprogramowania Androida zostały już przeniesione do formatu stereo float.
- Starsze efekty są obsługiwane przez adaptery formatów, które w razie potrzeby konwertują format float na int16.
Implementowanie efektów wyjściowych
Implementacja referencyjna efektów wyjściowych jest dostępna w
frameworks/av/media/libeffects.
Partnerzy, którzy implementują własne niestandardowe efekty wyjściowe, powinni w Androidzie 10 wykonać te czynności:
- Zaktualizuj efekty wyjściowe, aby obsługiwały format wielokanałowy float:
- Obsługa przetwarzania int16 nie jest już wymagana.
- Obsługuj liczbę kanałów wyjściowych od 2 do 8 (aby zapewnić zgodność z przyszłymi wersjami rozważ obsługę liczby kanałów od 1 do 30).
- Obsługuj liczbę kanałów wejściowych zgodną z liczbą kanałów wyjściowych w przypadku efektów wstawianych. Efekty pomocnicze nadal będą miały liczbę kanałów wejściowych równą 1 (mono).
- Obsługuj zarówno maski pozycji kanałów (kanoniczne), jak i maski indeksów kanałów
(1 << n) - 1.
- Jeśli musisz nadal obsługiwać starsze efekty wyjściowe dostawcy i nie możesz
ich zaktualizować, sprawdź starszy kod w ten sposób:
- Starsze efekty wyjściowe (wstawiane) 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órykolwiek z tych warunków nie zostanie spełniony, zwróć wartość
-EINVAL.
- Starsze efekty wyjściowe (pomocnicze) są konfigurowane przez AudioFlinger
za pomocą maski kanału wejściowego mono i potencjalnie masek kanałów wyjściowych wielokanałowych
, w zależności od tego, czy ujście wyjściowe jest wielokanałowe.
Muszą odrzucać 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órykolwiek z tych warunków nie zostanie spełniony, zwróć wartość
-EINVAL.
- Sprawdź starszy kod. Nie zakładaj, że działa!
- Starsze efekty wyjściowe (wstawiane) muszą odrzucać
nieobsługiwane konfiguracje w