Odtwarzacze audio obsługują atrybuty definiujące sposób, w jaki system audio obsługuje decyzje dotyczące routingu, głośności i fokusu dla określonego źródła. Aplikacje mogą dołączać atrybuty do odtwarzania dźwięku (takie jak muzyka odtwarzana przez usługę przesyłania strumieniowego lub powiadomienie o nowej wiadomości e-mail), a następnie przekazywać atrybuty źródła dźwięku do platformy, gdzie system audio wykorzystuje te atrybuty do podejmowania decyzji dotyczących miksowania i powiadamiania aplikacji o stanie systemu.
W systemie Android 4.4 i wcześniejszych struktura podejmowała decyzje dotyczące miksowania, korzystając wyłącznie z typu strumienia audio. Jednak opieranie takich decyzji na typie strumienia było zbyt ograniczone, aby zapewnić wysoką jakość wyników w wielu aplikacjach i urządzeniach. Na przykład na urządzeniu mobilnym niektóre aplikacje (np. Google Maps) odtwarzały wskazówki dojazdu w strumieniu typu STREAM_MUSIC; jednakże na urządzeniach mobilnych w trybie projekcji (np. Android Auto) aplikacje nie mogą łączyć wskazówek dojazdu z innymi strumieniami multimediów.
Korzystając z interfejsu API atrybutów audio , aplikacje dostarczają systemowi audio szczegółowe informacje o konkretnym źródle dźwięku, w tym o sposobie użycia (dlaczego źródło jest odtwarzane), typie treści (co odtwarza źródło), flagach (w jaki sposób źródło powinno być odtwarzane), i konteksty (nowość w Androidzie 9). Składnia:
AudioAttributes { mUsage mContentType mSource mFlags mTags / mFormattedTags / mBundle (key value pairs) }
- Stosowanie . Określa powód odtwarzania źródła i kontroluje decyzje dotyczące routingu, fokusu i głośności.
- Typ zawartości . Określa, co odtwarza źródło (muzyka, film, mowa, sonifikacja, nieznane).
- Kontekst . Wartości użytkowe wyabstrahowane do warstwy audio HAL.
- Flagi . Określa sposób odtwarzania źródła. Obejmuje obsługę wymuszania słyszalności (w niektórych krajach wymagane są dźwięki migawki aparatu) i sprzętowej synchronizacji audio/wideo.
Aby przetwarzać dynamikę, aplikacje muszą rozróżniać zawartość filmową, muzyczną i mowę. Znaczenie mogą mieć również informacje o samych danych, takie jak głośność i szczytowa wartość próbki.
Użyj atrybutów
Użycie określa kontekst, w którym strumień jest używany, dostarczając informacji o tym, dlaczego dźwięk jest odtwarzany i do czego jest używany. Informacje o użyciu są bardziej wyraziste niż typ strumienia i umożliwiają platformom lub zasadom routingu uściślenie decyzji dotyczących wolumenu lub routingu.
Podaj jedną z następujących wartości użycia dla dowolnej instancji:
- UŻYCIE_UNKNOWN
- WYKORZYSTANIE_MEDIA
- USAGE_VOICE_COMMUNICATION
- USAGE_VOICE_COMMUNICATION_SIGNALLING
- UŻYCIE_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
- WYKORZYSTANIE_GRA
- UŻYCIE_WIRTUALNEGO_ŹRÓDŁA
- UŻYCIE_ASSISTANT
Wartości użycia atrybutów audio wzajemnie się wykluczają. Przykłady można znaleźć w definicjach USAGE_MEDIA
i USAGE_ALARM
; wyjątki można znaleźć w definicji AudioAttributes.Builder
.
Typ zawartości
Typ zawartości definiuje dźwięk i wyraża ogólną kategorię treści, taką jak film, mowa lub sygnał dźwiękowy/dzwonek. Struktura audio wykorzystuje informacje o typie zawartości do selektywnego konfigurowania bloków końcowego przetwarzania audio. Chociaż podanie typu zawartości jest opcjonalne, należy podać informację o typie, gdy typ zawartości jest znany, na przykład CONTENT_TYPE_MOVIE
w przypadku usługi strumieniowego przesyłania filmów lub CONTENT_TYPE_MUSIC
w przypadku aplikacji do odtwarzania muzyki.
Podaj jedną z następujących wartości typu zawartości dla dowolnej instancji:
-
CONTENT_TYPE_UNKNOWN
(domyślnie) -
CONTENT_TYPE_MOVIE
-
CONTENT_TYPE_MUSIC
-
CONTENT_TYPE_SONIFICATION
-
CONTENT_TYPE_SPEECH
Wartości typu zawartości atrybutu audio wzajemnie się wykluczają. Szczegółowe informacje na temat typów treści można znaleźć w interfejsie API atrybutów audio .
Konteksty
Każdy dźwięk w systemie Android jest identyfikowany przez odpowiedzialną aplikację i przyczynę wygenerowania dźwięku; i urządzenie z Androidem wykorzystuje te informacje do określenia sposobu prezentacji dźwięku. W systemie Android 8.xi starszym aplikacje mogą zgłaszać przyczynę generowania dźwięku, korzystając ze starszych typów strumieni (np. AudioSystem.STREAM_MUSIC
) lub AudioAttributes
. W systemie Android 9 wartości AudioAttributes.usage
są wyodrębniane na poziomie HAL jako Contexts .
Konteksty audio HAL | Użycie atrybutów audio |
---|---|
MUZYKA | GŁOSKA BEZDŹWIĘCZNA |
KOMENDA GŁOSOWA | UŻYCIE_ASSISTANT |
NAWIGACJA | ASSISTANCE_NAVIGATION_GUIDANCE |
DZWONIĆ | KOMUNIKACJA GŁOSOWA |
DZWONEK | NOTIFICATION_RINGTONE |
POWIADOMIENIE | POWIADOMIENIE |
ALARM | ALARM |
SYSTEM_DŹWIĘK | ASSISTANCE_SONIFICATION |
NIEZNANY | NIEZNANY |
Dla dowolnej instancji możesz podać jedną z następujących wartości CONTEXT_NUMBER
:
- MUSIC_CONTEXT // Odtwarzanie muzyki
- NAVIGATION_CONTEXT // Kierunki nawigacji
- VOICE_COMMAND_CONTEXT // Sesja poleceń głosowych
- CALL_RING_CONTEXT // Dzwonienie połączenia głosowego
- CALL_CONTEXT // Połączenie głosowe
- ALARM_CONTEXT // Dźwięk alarmu z Androida
- NOTIFICATION_CONTEXT // Powiadomienia
- SYSTEM_SOUND_CONTEXT // Dźwięki interakcji użytkownika (kliknięcia przycisków itp.)
Flagi
Flagi określają, w jaki sposób środowisko audio stosuje efekty do odtwarzania dźwięku. Podaj jedną lub więcej z następujących flag dla instancji:
-
FLAG_AUDIBILITY_ENFORCED
. Żąda od systemu zapewnienia słyszalności dźwięku. Użyj, aby zaspokoić potrzeby starszegoSTREAM_SYSTEM_ENFORCED
(takie jak wymuszanie dźwięków migawki aparatu). -
HW_AV_SYNC
. Żąda od systemu wybrania strumienia wyjściowego obsługującego sprzętową synchronizację A/V.
Flagi atrybutów audio nie są wyłączne i można je łączyć. Szczegółowe informacje na temat tych flag można znaleźć w interfejsie API atrybutów audio .
Przykład
W tym przykładzie AudioAttributes.Builder
definiuje AudioAttributes
, które mają 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ść
Twórcy aplikacji powinni używać atrybutów audio podczas tworzenia lub aktualizowania aplikacji dla systemu Android 5.0 i nowszych. Jednak aplikacje nie muszą korzystać z atrybutów; mogą obsługiwać tylko starsze typy strumieni lub pozostają nieświadome atrybutów (tj. ogólny odtwarzacz multimedialny, który nie wie nic o odtwarzanej treści).
W takich przypadkach platforma zachowuje kompatybilność wsteczną ze starszymi urządzeniami i wersjami Androida, automatycznie tłumacząc starsze typy strumieni audio na atrybuty audio. Jednak platforma nie wymusza ani nie gwarantuje tego mapowania na różnych urządzeniach, producentach lub wersjach Androida.
Mapowania zgodności:
Android 5.0 i 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 | (@ukryj) STREAM_BLUETOOTH_SCO |
FLAG_AUDIBILITY_ENFORCED | (@ukryj) STREAM_SYSTEM_ENFORCED |
CONTENT_TYPE_SONIFICATION USAGE_VOICE_COMMUNICATION_SIGNALLING | (@ukryj) STREAM_DTMF |
Przestarzałe typy strumieni
W systemie Android 9 wycofuje się następujące typy strumieni do użytku motoryzacyjnego:
- STREAM_DEFAULT
- STREAM_VOICE_CALL
- STREAM_SYSTEM
- STREAM_RING
- STREAM_MUZYKA
- STREAM_ALARM
- STREAM_NOTIFICATION
- STREAM_BLUETOOTH_SCO
- STREAM_SYSTEM_ENFORCED
- STREAM_DTMF
- STREAM_TTS
- STREAM_DOSTĘPNOŚĆ
Aby uzyskać więcej informacji, zobacz Automotive Audio .