Audioattribute

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 älteren STREAM_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.