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 altenSTREAM_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 .