Os players de áudio suportam atributos que definem como o sistema de áudio lida com decisões de roteamento, volume e foco para a fonte especificada. Os aplicativos podem anexar atributos a uma reprodução de áudio (como música tocada por um serviço de streaming ou uma notificação para um novo e-mail) e depois passar os atributos da fonte de áudio para a estrutura, onde o sistema de áudio usa os atributos para tomar decisões de mixagem e notificar os aplicativos sobre o estado do sistema.
No Android 4.4 e anteriores, a estrutura tomava decisões de mixagem usando apenas o tipo de fluxo de áudio. No entanto, basear essas decisões no tipo de fluxo era muito limitante para produzir uma saída de qualidade em vários aplicativos e dispositivos. Por exemplo, em um dispositivo móvel, alguns aplicativos (ou seja, o Google Maps) reproduziam as direções de direção no tipo de stream STREAM_MUSIC; no entanto, em dispositivos móveis no modo de projeção (ou seja, Android Auto), os aplicativos não podem misturar rotas de direção com outros fluxos de mídia.
Usando a API de atributo de áudio , os aplicativos fornecem ao sistema de áudio informações detalhadas sobre uma fonte de áudio específica, incluindo uso (por que a fonte está tocando), tipo de conteúdo (o que a fonte está tocando), sinalizadores (como a fonte deve ser reproduzida), e contextos (novo no Android 9). Sintaxe:
AudioAttributes {
    mUsage
    mContentType
    mSource
    mFlags
    mTags / mFormattedTags / mBundle    (key value pairs)
}
- Uso . Especifica por que a fonte está tocando e controla as decisões de roteamento, foco e volume.
 - Tipo de conteúdo . Especifica o que a fonte está tocando (música, filme, fala, sonificação, desconhecido).
 - Contexto . Valores de uso abstraídos para o Audio HAL.
 - Bandeiras . Especifica como a fonte deve ser reproduzida. Inclui suporte para aplicação de audibilidade (sons do obturador da câmera necessários em alguns países) e sincronização de áudio/vídeo de hardware.
 
Para processamento dinâmico, os aplicativos devem distinguir entre conteúdo de filme, música e fala. As informações sobre os dados em si também podem ser importantes, como volume e valor de amostra de pico.
Usando atributos
Uso especifica o contexto no qual o fluxo é usado, fornecendo informações sobre por que o som está sendo reproduzido e para que o som é usado. As informações de uso são mais expressivas do que um tipo de fluxo e permitem que as plataformas ou políticas de roteamento refinem as decisões de volume ou roteamento.
Forneça um dos seguintes valores de uso para qualquer instância:
- 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
 
 Os valores de uso do atributo de áudio são mutuamente exclusivos. Para obter exemplos, consulte as definições de USAGE_MEDIA e USAGE_ALARM ; para exceções, consulte a definição AudioAttributes.Builder .
Tipo de conteúdo
 O tipo de conteúdo define o que é o som e expressa a categoria geral do conteúdo, como filme, fala ou bipe/toque. A estrutura de áudio usa informações de tipo de conteúdo para configurar seletivamente os blocos de pós-processamento de áudio. Embora o fornecimento do tipo de conteúdo seja opcional, você deve incluir informações de tipo sempre que o tipo de conteúdo for conhecido, como usar CONTENT_TYPE_MOVIE para um serviço de streaming de filmes ou CONTENT_TYPE_MUSIC para um aplicativo de reprodução de música.
Forneça um dos seguintes valores de tipo de conteúdo para qualquer instância:
-  
CONTENT_TYPE_UNKNOWN(padrão) -  
CONTENT_TYPE_MOVIE -  
CONTENT_TYPE_MUSIC -  
CONTENT_TYPE_SONIFICATION -  
CONTENT_TYPE_SPEECH 
Os valores do tipo de conteúdo do atributo de áudio são mutuamente exclusivos. Para obter detalhes sobre os tipos de conteúdo, consulte a API de atributo de áudio .
Contextos
 Cada som no Android é identificado pelo aplicativo responsável e pelo motivo da geração do som; e o dispositivo Android usa essas informações para determinar como apresentar o som. No Android 8.xe inferior, os aplicativos podem relatar o motivo da geração do som usando tipos de fluxo herdados (por exemplo AudioSystem.STREAM_MUSIC ) ou AudioAttributes . No Android 9, os valores AudioAttributes.usage são abstraídos no nível HAL como Contexts .
| Contextos de áudio HAL | Uso de atributos de áudio | 
|---|---|
| MÚSICA | MEIOS DE COMUNICAÇÃO | 
| COMANDO DE VOZ | USAGE_ASSISTANT | 
| NAVEGAÇÃO | ASSISTANCE_NAVIGATION_GUIDANCE | 
| LIGAR | VOICE_COMMUNICATION | 
| TOQUE | SOM DE NOTIFICAÇÃO | 
| NOTIFICAÇÃO | NOTIFICAÇÃO | 
| ALARME | ALARME | 
| SYSTEM_SOUND | ASSISTANCE_SONIFICATION | 
| DESCONHECIDO | DESCONHECIDO | 
 Você pode fornecer um dos seguintes valores CONTEXT_NUMBER para qualquer instância:
- MUSIC_CONTEXT // Reprodução de música
 - NAVIGATION_CONTEXT // Direções de navegação
 - VOICE_COMMAND_CONTEXT // Sessão de comando de voz
 - CALL_RING_CONTEXT // Chamada de voz tocando
 - CALL_CONTEXT // Chamada de voz
 - ALARM_CONTEXT // Som de alarme do Android
 - NOTIFICATION_CONTEXT // Notificações
 - SYSTEM_SOUND_CONTEXT // Sons de interação do usuário (cliques de botão, etc)
 
Bandeiras
Os sinalizadores especificam como a estrutura de áudio aplica efeitos à reprodução de áudio. Forneça um ou mais dos seguintes sinalizadores para uma instância:
-  
FLAG_AUDIBILITY_ENFORCED. Solicita ao sistema que garanta a audibilidade do som. Use para atender às necessidades doSTREAM_SYSTEM_ENFORCEDlegado (como forçar os sons do obturador da câmera). -  
HW_AV_SYNC. Solicita que o sistema selecione um fluxo de saída que suporte a sincronização A/V de hardware. 
Os sinalizadores de atributo de áudio não são exclusivos e podem ser combinados. Para obter detalhes sobre esses sinalizadores, consulte a API de atributo de áudio .
Exemplo
 Neste exemplo, AudioAttributes.Builder define os AudioAttributes a serem usados por uma nova instância de AudioTrack :
AudioTrack myTrack = new AudioTrack(
  new AudioAttributes.Builder()
 .setUsage(AudioAttributes.USAGE_MEDIA)
    .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
    .build(),
  myFormat, myBuffSize, AudioTrack.MODE_STREAM, mySession);
Compatibilidade
Os desenvolvedores de aplicativos devem usar atributos de áudio ao criar ou atualizar aplicativos para Android 5.0 e superior. No entanto, os aplicativos não precisam tirar proveito dos atributos; eles podem lidar apenas com tipos de fluxo herdados ou permanecer inconscientes dos atributos (ou seja, um reprodutor de mídia genérico que não sabe nada sobre o conteúdo que está reproduzindo).
Nesses casos, a estrutura mantém a compatibilidade com versões anteriores com dispositivos mais antigos e versões do Android, traduzindo automaticamente os tipos de fluxo de áudio herdados em atributos de áudio. No entanto, a estrutura não impõe ou garante esse mapeamento entre dispositivos, fabricantes ou versões do Android.
Mapeamentos de compatibilidade:
| Android 5.0 e superior | Android 4.4 e anteriores | 
|---|---|
 CONTENT_TYPE_SPEECHUSAGE_VOICE_COMMUNICATION |  STREAM_VOICE_CALL | 
 CONTENT_TYPE_SONIFICATIONUSAGE_ASSISTANCE_SONIFICATION |  STREAM_SYSTEM | 
 CONTENT_TYPE_SONIFICATIONUSAGE_NOTIFICATION_RINGTONE |  STREAM_RING | 
 CONTENT_TYPE_MUSICUSAGE_UNKNOWNUSAGE_MEDIAUSAGE_GAMEUSAGE_ASSISTANCE_ACCESSIBILITYUSAGE_ASSISTANCE_NAVIGATION_GUIDANCE |  STREAM_MUSIC | 
 CONTENT_TYPE_SONIFICATIONUSAGE_ALARM |  STREAM_ALARM | 
 CONTENT_TYPE_SONIFICATIONUSAGE_NOTIFICATIONUSAGE_NOTIFICATION_COMMUNICATION_REQUESTUSAGE_NOTIFICATION_COMMUNICATION_INSTANTUSAGE_NOTIFICATION_COMMUNICATION_DELAYEDUSAGE_NOTIFICATION_EVENT |  STREAM_NOTIFICATION | 
 CONTENT_TYPE_SPEECH |  (@hide) STREAM_BLUETOOTH_SCO | 
 FLAG_AUDIBILITY_ENFORCED |  (@hide) STREAM_SYSTEM_ENFORCED | 
 CONTENT_TYPE_SONIFICATIONUSAGE_VOICE_COMMUNICATION_SIGNALLING |  (@hide) STREAM_DTMF | 
Tipos de stream obsoletos
O Android 9 descontinua os seguintes tipos de stream para uso automotivo:
- 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
 
Para obter mais detalhes, consulte Áudio automotivo .