Audioplayer unterstützen Attribute, die festlegen, wie das Audiosystem die Routing-, Lautstärke- und Fokusentscheidungen für die angegebene Quelle verarbeitet. Anwendungen können Attribute an eine Audiowiedergabe anhängen (z. B. Musik, die von einem Streamingdienst abgespielt wird, oder eine Benachrichtigung für eine neue E-Mail) und dann die Audioquelle an das Framework übergeben. Das Audiosystem verwendet die Attribute, um Entscheidungen zur Mischung zu treffen und Anwendungen über den Status des Systems zu informieren.
Unter Android 4.4 und niedriger wurden die Mischungsentscheidungen des Frameworks nur anhand des Audiostreams vorgenommen. Die Entscheidung auf der Grundlage des Streamtyps war jedoch zu eingeschränkt, um qualitativ hochwertige Ergebnisse für mehrere Anwendungen und Geräte zu erzielen. Beispiel: Auf einem Mobilgerät haben einige Apps (z. B. Google Maps) Wegbeschreibungen mit dem Streamtyp „STREAM_MUSIC“ abgespielt. Auf Mobilgeräten im Projektionsmodus (z. B. Android Auto) können Apps jedoch keine Wegbeschreibungen mit anderen Medienstreams mischen.
Mit der Audio Attribute API stellen Apps dem Audiosystem detaillierte Informationen zu einer bestimmten Audioquelle zur Verfügung, einschließlich Nutzung (Warum wird die Quelle wiedergegeben?), Inhaltstyp (Was wird von der Quelle wiedergegeben?), Flags (Wie soll die Quelle wiedergegeben werden?) und Kontexte (neu in Android 9). Syntax:
AudioAttributes { mUsage mContentType mSource mFlags mTags / mFormattedTags / mBundle (key value pairs) }
- Nutzung: Gibt an, warum die Quelle wiedergegeben wird, und steuert Routing-, Fokus- und Lautstärkeentscheidungen.
- Inhaltstyp Gibt an, was von der Quelle abgespielt wird (Musik, Film, Sprache, Sonifizierung, unbekannt).
- Kontext. Nutzungswerte, die in der Audio HAL abstrahiert werden.
- Flags Gibt an, wie die Quelle wiedergegeben werden soll. Unterstützt die Durchsetzung der Lautstärke (in einigen Ländern ist der Kameraverschlusston erforderlich) und die Hardware-Audio/Videosynchronisierung.
Bei der dynamischen Verarbeitung müssen Anwendungen zwischen Film-, Musik- und Sprachinhalten unterscheiden. Auch Informationen zu den Daten selbst können wichtig sein, z. B. Lautstärke und Spitzenwert der Samples.
Attribute verwenden
„Verwendung“ gibt den Kontext an, in dem der Stream verwendet wird. Außerdem enthält er Informationen dazu, warum der Ton wiedergegeben wird und wofür er verwendet wird. Nutzungsinformationen sind aussagekräftiger als ein Streamtyp und ermöglichen es Plattformen oder Routingrichtlinien, Entscheidungen zu Lautstärke oder Routing zu optimieren.
Geben Sie für jede Instanz einen der folgenden Nutzungswerte an:
- 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
Die Werte für die Verwendung des Audioattributs schließen sich gegenseitig aus. Beispiele finden Sie in den Definitionen von USAGE_MEDIA
und USAGE_ALARM
. Informationen zu Ausnahmen finden Sie in der Definition von AudioAttributes.Builder
.
Inhaltstyp
Der Inhaltstyp definiert, was der Ton ist, und gibt die allgemeine Kategorie des Inhalts an, z. B. Film, Sprache oder Piepton/Klingelton. Das Audio-Framework verwendet Informationen zum Inhaltstyp, um Audio-Nachbearbeitungsblöcke selektiv zu konfigurieren. Die Angabe des Inhaltstyps ist optional. Sie sollten jedoch Informationen zum Typ angeben, wenn der Inhaltstyp bekannt ist, z. B. CONTENT_TYPE_MOVIE
für einen Film-Streamingdienst oder CONTENT_TYPE_MUSIC
für eine Musikwiedergabeanwendung.
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
Die Werte für den Inhaltstyp des Audioattributs schließen sich gegenseitig aus. Weitere Informationen zu Inhaltstypen findest du in der Audioattribut-API.
Kontexte
Jeder Ton in Android wird anhand der verantwortlichen Anwendung und des Grundes für die Generierung des Tons identifiziert. Anhand dieser Informationen wird auf dem Android-Gerät festgelegt, wie der Ton wiedergegeben wird. Unter Android 8.x und niedriger können Anwendungen den Grund für die Tongenerierung mithilfe von Legacy-Streamtypen (z.B. AudioSystem.STREAM_MUSIC
) oder AudioAttributes
melden. In Android 9 werden AudioAttributes.usage
-Werte auf HAL-Ebene als Kontexte abstrahiert.
HAL-Audiokontexte | Verwendung von AudioAttributes |
---|---|
MUSIK | MEDIEN |
VOICE_COMMAND | USAGE_ASSISTANT |
NAVIGATION | ASSISTANCE_NAVIGATION_GUIDANCE |
ANRUFEN | VOICE_COMMUNICATION |
RINGTONE | NOTIFICATION_RINGTONE |
BENACHRICHTIGUNG | BENACHRICHTIGUNG |
WECKER | WECKER |
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 // Klingeln bei Sprachanruf
- CALL_CONTEXT // Sprachanruf
- ALARM_CONTEXT // Weckerton von Android
- NOTIFICATION_CONTEXT // Benachrichtigungen
- SYSTEM_SOUND_CONTEXT // Töne für Nutzerinteraktionen (Schaltflächenklicks usw.)
Flaggen
Mit Flags wird festgelegt, wie das Audio-Framework Effekte auf die Audiowiedergabe anwendet. Geben Sie für eine Instanz eines oder mehrere der folgenden Flags an:
FLAG_AUDIBILITY_ENFORCED
. Das System wird aufgefordert, dafür zu sorgen, dass der Ton gut hörbar ist. Verwenden Sie diese Option, um die Anforderungen von älterenSTREAM_SYSTEM_ENFORCED
-Versionen zu erfüllen (z. B. das Erzwingen von Kamera-Schließgeräuschen).HW_AV_SYNC
. Das System wird aufgefordert, einen Ausgabestream auszuwählen, der die Hardware-A/V-Synchronisierung unterstützt.
Flags für Audioattribute schließen sich nicht gegenseitig aus und können kombiniert werden. Weitere Informationen zu diesen Flags findest du in der API für Audioattribute.
Verwendungsbeispiele
In diesem Beispiel definiert AudioAttributes.Builder
den AudioAttributes
, der von einer neuen AudioTrack
-Instanz verwendet werden soll:
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
App-Entwickler sollten Audioattribute verwenden, wenn sie Apps für Android 5.0 und höher erstellen oder aktualisieren. Anwendungen müssen jedoch nicht unbedingt Attribute nutzen. Sie können nur ältere Streamtypen verarbeiten oder Attribute ignorieren (z. B. ein generischer Mediaplayer, der nichts über die abgespielten Inhalte weiß).
In solchen Fällen sorgt das Framework für Abwärtskompatibilität mit älteren Geräten und Android-Releases, indem ältere Audiostreamtypen automatisch in Audioattribute umgewandelt werden. Das Framework erzwingt oder garantiert diese Zuordnung jedoch nicht für alle Geräte, Hersteller oder Android-Releases.
Kompatibilitätszuordnungen:
Android 5.0 oder höher | Android 4.4 und niedriger |
---|---|
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
|
Eingestellte Streamtypen
Unter Android 9 werden die folgenden Streamtypen für die Nutzung in der Automobilbranche eingestellt:
- 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 Informationen finden Sie unter Automotive Audio.