Odtwarzacze audio obsługują atrybuty, które określają sposób, w jaki system audio zarządza przekierowywaniem, głośnością i decyzjami dotyczącymi skupienia w przypadku określonego źródła. Aplikacje mogą dołączać atrybuty do odtwarzania dźwięku (takich jak muzyka odtwarzana przez usługę strumieniowego przesyłania danych lub powiadomienie o nowym e-mailu), a następnie przekazywać atrybuty źródła dźwięku do platformy. System audio używa tych atrybutów do podejmowania decyzji dotyczących miksowania i powiadamiania aplikacji o stanie systemu.
W wersjach Androida 4.4 i starszych framework podejmował decyzje dotyczące miksowania, korzystając tylko z typu strumienia audio. Jednak podejmowanie takich decyzji na podstawie typu strumienia było zbyt ograniczające, aby uzyskać wysoką jakość w wielu aplikacjach i na różnych urządzeniach. Na przykład na urządzeniu mobilnym niektóre aplikacje (np. Mapy Google) odtwarzały wskazówki dojazdu za pomocą typu strumienia STREAM_MUSIC, ale na urządzeniach mobilnych w trybie rzutowania (np. Android Auto) aplikacje nie mogły łączyć wskazówek dojazdu z innymi strumieniami multimediów.
Za pomocą interfejsu Audio Attribute API aplikacje dostarczają systemowi audio szczegółowe informacje o konkretnym źródle audio, w tym o użyciu (dlaczego odtwarzane jest źródło), typie treści (co odtwarza źródło), flagach (jak należy odtwarzać źródło) i kontekstach (nowość w Androidzie 9). Składnia:
AudioAttributes { mUsage mContentType mSource mFlags mTags / mFormattedTags / mBundle (key value pairs) }
- Użycie. Określa, dlaczego źródło jest odtwarzane, oraz kontroluje decyzje dotyczące kierowania, skupienia i głośności.
- Typ treści. Określa, co jest odtwarzane przez źródło (muzyka, film, mowa, sonifikacja, nieznane).
- Kontekst. Wartości użycia abstrakcyjne dla interfejsu Audio HAL.
- Flagi. Określa sposób odtwarzania źródła. Obejmuje obsługę wymogu słyszalności (w niektórych krajach wymagany jest dźwięk migawki aparatu) oraz sprzętową synchronizację dźwięku i obrazu.
W przypadku przetwarzania dynamiki aplikacje muszą rozróżniać treści filmowe, muzyczne i mowy. Istotne mogą być też informacje o samych danych, takie jak głośność i wartość szczytowej próbki.
Używanie atrybutów
Użycie określa kontekst, w którym jest używany strumień, podając informacje o tym, dlaczego dźwięk jest odtwarzany i do czego służy. Informacje o użytkowaniu są bardziej precyzyjne niż typ strumienia i umożliwiają platformom lub zasadom routingu doprecyzowanie decyzji dotyczących wolumenu lub routingu.
W przypadku każdego wystąpienia podaj jedną z tych wartości:
- USAGE_UNKNOWN
- USAGE_MEDIA
- USAGE_VOICE_COMMUNICATION
- USAGE_VOICE_COMMUNICATION_SIGNALLING
- USAGE_ALARM
- USAGE_NOTIFICATION
- USAGE_NOTIFICATION_TELEPHONY_RINGTONE
- USAGE_NOTIFICATION_COMMUNICATION_REQUEST
- USAGE_NOTIFICATION_COMMUNICATION_INSTANT
- USAGE_NOTIFICATION_COMMUNICATION_DELAYED
- USAGE_NOTIFICATION_EVENT
- USAGE_ASSISTANCE_ACCESSIBILITY
- USAGE_ASSISTANCE_NAVIGATION_GUIDANCE
- USAGE_ASSISTANCE_SONIFICATION
- USAGE_GAME
- USAGE_VIRTUAL_SOURCE
- USAGE_ASSISTANT
Wartości atrybutu audio nie mogą się powtarzać. Przykłady znajdziesz w definicjach USAGE_MEDIA
i USAGE_ALARM
, a wyjątki – w definicji AudioAttributes.Builder
.
Typ treści
Typ treści określa, czym jest dźwięk, i wyraża ogólną kategorię treści, takich jak film, mowa lub sygnał dźwiękowy/dzwonek. Framework audio korzysta z informacji o typach treści do selektywnej konfiguracji bloków przetwarzania końcowego dźwięku. Podanie typu treści jest opcjonalne, ale jeśli jest on znany, należy go uwzględnić. Przykładowo w przypadku usługi strumieniowego przesyłania filmów należy użyć wartości CONTENT_TYPE_MOVIE
, a w przypadku aplikacji do odtwarzania muzyki – CONTENT_TYPE_MUSIC
.
W przypadku każdego wystąpienia podaj jedną z tych wartości typu treści:
CONTENT_TYPE_UNKNOWN
(domyślnie)CONTENT_TYPE_MOVIE
CONTENT_TYPE_MUSIC
CONTENT_TYPE_SONIFICATION
CONTENT_TYPE_SPEECH
Wartości typu treści atrybutu audio nie mogą się powtarzać. Szczegółowe informacje o typach treści znajdziesz w interfejsie API atrybutów audio.
Konteksty
Każdy dźwięk w Androidzie jest identyfikowany przez aplikację odpowiedzialną za jego generowanie oraz powód jego odtwarzania. Urządzenie z Androidem używa tych informacji do określenia sposobu wyświetlania dźwięku. W Androidzie 8.x i starszych aplikacje mogą zgłaszać przyczynę generowania dźwięku za pomocą starszych typów strumieni (np. AudioSystem.STREAM_MUSIC
) lub AudioAttributes
. W Androidzie 9 wartości AudioAttributes.usage
są abstrakcyjne na poziomie HAL jako konteksty.
Konteksty audio HAL | Użycie AudioAttributes |
---|---|
MUZYCZNA | MULTIMEDIA |
VOICE_COMMAND | USAGE_ASSISTANT |
NAWIGACJA | ASSISTANCE_NAVIGATION_GUIDANCE |
ZADZWOŃ | VOICE_COMMUNICATION |
DZWONEK | NOTIFICATION_RINGTONE |
POWIADOMIENIE | POWIADOMIENIE |
ALARM | ALARM |
SYSTEM_SOUND | ASSISTANCE_SONIFICATION |
NIEZNANY | NIEZNANY |
W dowolnym wystąpieniu możesz podać jedną z tych wartości CONTEXT_NUMBER
:
- MUSIC_CONTEXT // Odtwarzanie muzyki
- NAVIGATION_CONTEXT // Wskazówki dotyczące trasy
- VOICE_COMMAND_CONTEXT // Sesja polecenia głosowego
- CALL_RING_CONTEXT // Dzwonek połączenia głosowego
- CALL_CONTEXT // Połączenie głosowe
- ALARM_CONTEXT // Dźwięk alarmu z Androida
- NOTIFICATION_CONTEXT // Notifications
- SYSTEM_SOUND_CONTEXT // Dźwięki interakcji z użytkownikiem (kliknięcia przycisków itp.)
Flagi
Flagi określają, jak framework audio stosuje efekty do odtwarzania dźwięku. W przypadku instancji podaj co najmniej jedną z tych flag:
FLAG_AUDIBILITY_ENFORCED
. Prośba o sprawdzenie, czy dźwięk jest słyszalny. Użyj, aby zaspokoić potrzeby starszych wersjiSTREAM_SYSTEM_ENFORCED
(np. wymuszenie dźwięku migawki aparatu).HW_AV_SYNC
. Prosi system o wybranie strumienia wyjściowego, który obsługuje sprzętową synchronizację obrazu i dźwięku.
Flagi atrybutów audio nie są wyłączne i można je łączyć. Szczegółowe informacje o tych flagach znajdziesz w interfejsie API atrybutów audio.
Przykład
W tym przykładzie AudioAttributes.Builder
definiuje AudioAttributes
, które ma być używane przez nową instancję AudioTrack
:
AudioTrack myTrack = new AudioTrack( new AudioAttributes.Builder() .setUsage(AudioAttributes.USAGE_MEDIA) .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) .build(), myFormat, myBuffSize, AudioTrack.MODE_STREAM, mySession);
Zgodność
Deweloperzy aplikacji powinni używać atrybutów dźwięku podczas tworzenia i aktualizowania aplikacji na Androida 5.0 lub nowszego. Aplikacje nie muszą jednak korzystać z atrybutów.Mogą obsługiwać tylko starsze typy strumieni lub nie wiedzieć nic o treściach, które odtwarzają (np. ogólny odtwarzacz multimediów, który nie wie nic o odtwarzanych treściach).
W takich przypadkach framework zachowuje zgodność wsteczną ze starszymi urządzeniami i wersjami Androida, automatycznie tłumacząc starsze typy strumieni audio na atrybuty audio. Nie narzuca jednak tego mapowania ani nie gwarantuje, że będzie ono działać na różnych urządzeniach, u różnych producentów i w różnych wersjach Androida.
Mapowania zgodności:
Android 5.0 lub nowszy | Android 4.4 i starsze |
---|---|
CONTENT_TYPE_SPEECH USAGE_VOICE_COMMUNICATION
|
STREAM_VOICE_CALL
|
CONTENT_TYPE_SONIFICATION USAGE_ASSISTANCE_SONIFICATION
|
STREAM_SYSTEM
|
CONTENT_TYPE_SONIFICATION USAGE_NOTIFICATION_RINGTONE
|
STREAM_RING
|
CONTENT_TYPE_MUSIC USAGE_UNKNOWN USAGE_MEDIA USAGE_GAME USAGE_ASSISTANCE_ACCESSIBILITY USAGE_ASSISTANCE_NAVIGATION_GUIDANCE
|
STREAM_MUSIC
|
CONTENT_TYPE_SONIFICATION USAGE_ALARM
|
STREAM_ALARM
|
CONTENT_TYPE_SONIFICATION USAGE_NOTIFICATION USAGE_NOTIFICATION_COMMUNICATION_REQUEST USAGE_NOTIFICATION_COMMUNICATION_INSTANT USAGE_NOTIFICATION_COMMUNICATION_DELAYED USAGE_NOTIFICATION_EVENT
|
STREAM_NOTIFICATION
|
CONTENT_TYPE_SPEECH
|
(@hide) STREAM_BLUETOOTH_SCO
|
FLAG_AUDIBILITY_ENFORCED
|
(@hide) STREAM_SYSTEM_ENFORCED
|
CONTENT_TYPE_SONIFICATION USAGE_VOICE_COMMUNICATION_SIGNALLING
|
(@hide) STREAM_DTMF
|
Wycofane typy strumieni
Android 9 wycofuje te typy strumieni danych do użytku w samochodach:
- STREAM_DEFAULT
- STREAM_VOICE_CALL
- STREAM_SYSTEM
- STREAM_RING
- STREAM_MUSIC
- STREAM_ALARM
- STREAM_NOTIFICATION
- STREAM_BLUETOOTH_SCO
- STREAM_SYSTEM_ENFORCED
- STREAM_DTMF
- STREAM_TTS
- STREAM_ACCESSIBILITY
Więcej informacji znajdziesz w artykule Automotive Audio.