Atrybuty dźwięku

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_MEDIAUSAGE_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 wersji STREAM_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.