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_ENFORCED
legado (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_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 |
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 .