Audioattribute

Audioplayer unterstützen Attribute, die definieren, wie das Audiosystem Routing-, Lautstärke- und Fokusentscheidungen für die angegebene Quelle handhabt. Anwendungen können einer Audiowiedergabe Attribute hinzufügen (z. B. von einem Streaming-Dienst abgespielte Musik oder eine Benachrichtigung für eine neue E-Mail) und dann die Audioquellenattribute an das Framework übergeben, wo das Audiosystem die Attribute verwendet, um Mischentscheidungen zu treffen und Anwendungen zu benachrichtigen über den Zustand des Systems.

In Android 4.4 und früher traf das Framework Mischentscheidungen nur anhand des Audio-Stream-Typs. Allerdings war es zu einschränkend, solche Entscheidungen auf der Grundlage des Stream-Typs zu treffen, um eine qualitativ hochwertige Ausgabe über mehrere Anwendungen und Geräte hinweg zu erzeugen. Auf einem mobilen Gerät spielten beispielsweise einige Anwendungen (z. B. Google Maps) Wegbeschreibungen im Streamtyp STREAM_MUSIC ab; Auf Mobilgeräten im Projektionsmodus (z. B. Android Auto) können Anwendungen jedoch keine Wegbeschreibungen mit anderen Medienströmen mischen.

Mithilfe der Audio-Attribut-API stellen Anwendungen dem Audiosystem detaillierte Informationen zu einer bestimmten Audioquelle bereit, einschließlich Verwendung (warum die Quelle abgespielt wird), Inhaltstyp (was die Quelle abspielt), Flags (wie die Quelle abgespielt werden soll), und Kontexte (neu in Android 9). Syntax:

AudioAttributes {
    mUsage
    mContentType
    mSource
    mFlags
    mTags / mFormattedTags / mBundle    (key value pairs)
}
  • Verwendung . Gibt an, warum die Quelle abgespielt wird, und steuert Routing-, Fokus- und Lautstärkeentscheidungen.
  • Inhaltstyp . Gibt an, was die Quelle abspielt (Musik, Film, Sprache, Sonifikation, unbekannt).
  • Kontext . Nutzungswerte, abstrahiert zum Audio-HAL.
  • Flaggen . Gibt an, wie die Quelle abgespielt werden soll. Beinhaltet Unterstützung für die Durchsetzung der Hörbarkeit (in einigen Ländern sind Auslösegeräusche der Kamera erforderlich) und Hardware-Audio-/Video-Synchronisierung.

Für die Dynamikverarbeitung müssen Anwendungen zwischen Film-, Musik- und Sprachinhalten unterscheiden. Auch Informationen über die Daten selbst können von Bedeutung sein, etwa die Lautstärke und der Spitzenwert der Abtastung.

Verwenden Sie Attribute

Die Verwendung gibt den Kontext an, in dem der Stream verwendet wird, und liefert Informationen darüber, warum der Sound abgespielt wird und wofür der Sound verwendet wird. Nutzungsinformationen sind aussagekräftiger als ein Stream-Typ und ermöglichen es Plattformen oder Routing-Richtlinien, Volumen- oder Routing-Entscheidungen zu verfeinern.

Geben Sie für jede Instanz einen der folgenden Nutzungswerte an:

  • VERWENDUNG_UNBEKANNT
  • 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

Die Verwendungswerte von Audioattributen schließen sich gegenseitig aus. Beispiele finden Sie in den Definitionen USAGE_MEDIA und USAGE_ALARM ; Ausnahmen finden Sie in der AudioAttributes.Builder Definition.

Inhaltstyp

Der Inhaltstyp definiert den Ton und drückt die allgemeine Kategorie des Inhalts aus, z. B. Film, Sprache oder Signalton/Klingelton. Das Audio-Framework verwendet Inhaltstypinformationen, um Audio-Nachbearbeitungsblöcke selektiv zu konfigurieren. Während die Angabe des Inhaltstyps optional ist, sollten Sie Typinformationen immer dann angeben, wenn der Inhaltstyp bekannt ist, z. B. indem Sie CONTENT_TYPE_MOVIE für einen Film-Streaming-Dienst oder CONTENT_TYPE_MUSIC für eine Musikwiedergabeanwendung verwenden.

Geben Sie für jede Instanz einen der folgenden Inhaltstypwerte an:

  • CONTENT_TYPE_UNKNOWN (Standard)
  • CONTENT_TYPE_MOVIE
  • CONTENT_TYPE_MUSIC
  • CONTENT_TYPE_SONIFICATION
  • CONTENT_TYPE_SPEECH

Werte für den Inhaltstyp des Audioattributs schließen sich gegenseitig aus. Einzelheiten zu Inhaltstypen finden Sie in der Audioattribut-API .

Kontexte

Jeder Ton in Android wird durch die verantwortliche Anwendung und den Grund für die Erzeugung des Tons identifiziert; und das Android-Gerät verwendet diese Informationen, um zu bestimmen, wie der Ton dargestellt wird. In Android 8.x und niedriger können Anwendungen den Grund für die Tonerzeugung mithilfe älterer Stream-Typen (z. B. AudioSystem.STREAM_MUSIC ) oder AudioAttributes melden. In Android 9 werden AudioAttributes.usage Werte auf HAL-Ebene als Contexts abstrahiert.

HAL-Audiokontexte Verwendung von AudioAttributen
MUSIK MEDIEN
SPRACHBEFEHL USAGE_ASSISTANT
NAVIGATION ASSISTANCE_NAVIGATION_GUIDANCE
ANRUF SPRACH_KOMMUNIKATION
KLINGELTON BENACHRICHTIGUNGSKLINGELTON
BENACHRICHTIGUNG BENACHRICHTIGUNG
ALARM ALARM
SYSTEM_SOUND ASSISTANCE_SONIFICATION
UNBEKANNT UNBEKANNT

Sie können für jede Instanz einen der folgenden CONTEXT_NUMBER Werte angeben:

  • MUSIC_CONTEXT // Musikwiedergabe
  • NAVIGATION_CONTEXT // Navigationsanweisungen
  • VOICE_COMMAND_CONTEXT // Sprachbefehlssitzung
  • CALL_RING_CONTEXT // Sprachanruf klingelt
  • CALL_CONTEXT // Sprachanruf
  • ALARM_CONTEXT // Alarmton von Android
  • NOTIFICATION_CONTEXT // Benachrichtigungen
  • SYSTEM_SOUND_CONTEXT // Benutzerinteraktionstöne (Schaltflächenklicks usw.)

Flaggen

Flags geben an, wie das Audio-Framework Effekte auf die Audiowiedergabe anwendet. Geben Sie eines oder mehrere der folgenden Flags für eine Instanz an:

  • FLAG_AUDIBILITY_ENFORCED . Fordert das System auf, die Hörbarkeit des Tons sicherzustellen. Wird verwendet, um die Anforderungen des alten STREAM_SYSTEM_ENFORCED zu erfüllen (z. B. das Erzwingen von Kameraverschlussgeräuschen).
  • HW_AV_SYNC . Fordert das System auf, einen Ausgabestream auszuwählen, der Hardware-A/V-Synchronisierung unterstützt.

Audioattribut-Flags sind nicht exklusiv und können kombiniert werden. Einzelheiten zu diesen Flags finden Sie in der Audioattribut-API .

Beispiel

In diesem Beispiel definiert AudioAttributes.Builder die AudioAttributes , die von einer neuen AudioTrack Instanz verwendet werden sollen:

AudioTrack myTrack = new AudioTrack(
  new AudioAttributes.Builder()
 .setUsage(AudioAttributes.USAGE_MEDIA)
    .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
    .build(),
  myFormat, myBuffSize, AudioTrack.MODE_STREAM, mySession);

Kompatibilität

Anwendungsentwickler sollten Audioattribute verwenden, wenn sie Anwendungen für Android 5.0 und höher erstellen oder aktualisieren. Es ist jedoch nicht erforderlich, dass Anwendungen Attribute nutzen; Sie können nur mit älteren Stream-Typen umgehen oder sind sich der Attribute nicht bewusst (z. B. ein generischer Mediaplayer, der nichts über den abgespielten Inhalt weiß).

In solchen Fällen gewährleistet das Framework die Abwärtskompatibilität mit älteren Geräten und Android-Versionen, indem es ältere Audiostream-Typen automatisch in Audioattribute übersetzt. Das Framework erzwingt oder garantiert diese Zuordnung jedoch nicht über Geräte, Hersteller oder Android-Versionen hinweg.

Kompatibilitätszuordnungen:

Android 5.0 und höher Android 4.4 und früher
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

Veraltete Stream-Typen

Android 9 veraltet die folgenden Stream-Typen für die Verwendung im Automobilbereich:

  • 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

Weitere Einzelheiten finden Sie unter Automotive Audio .