Os reprodutores 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 versões anteriores, a estrutura tomava decisões de mixagem usando apenas o tipo de fluxo de áudio. No entanto, basear tais decisões no tipo de fluxo era muito limitante para produzir resultados de qualidade em vários aplicativos e dispositivos. Por exemplo, em um dispositivo móvel, alguns aplicativos (por exemplo, Google Maps) reproduziam instruções de direção no tipo de fluxo STREAM_MUSIC; entretanto, em dispositivos móveis no modo de projeção (ou seja, Android Auto), os aplicativos não podem misturar instruções de direção com outros fluxos de mídia.
Usando a API Audio Attribute , os aplicativos fornecem ao sistema de áudio informações detalhadas sobre uma fonte de áudio específica, incluindo uso (por que a fonte está sendo reproduzida), tipo de conteúdo (o que a fonte está reproduzindo), 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á sendo reproduzida e controla as decisões de roteamento, foco e volume.
- Tipo de conteúdo . Especifica qual fonte está sendo reproduzida (música, filme, fala, sonificação, desconhecido).
- Contexto . Valores de uso abstraídos para o HAL de áudio.
- Bandeiras . Especifica como a fonte deve ser reproduzida. Inclui suporte para aplicação de audibilidade (sons do obturador da câmera exigidos em alguns países) e sincronização de áudio/vídeo por 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 pico da amostra.
Usar atributos
O uso especifica o contexto no qual o fluxo é usado, fornecendo informações sobre por que o som está sendo reproduzido e para que serve o som. As informações de uso são mais expressivas do que um tipo de fluxo e permitem que plataformas ou políticas de roteamento refinem 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 USAGE_MEDIA
e USAGE_ALARM
; para exceções, consulte a definição AudioAttributes.Builder
.
Tipo de conteúdo
O tipo de conteúdo define qual é 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 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 do 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.x e versões anteriores, os aplicativos podem relatar o motivo da geração de som usando tipos de stream 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 |
CHAMAR | VOICE_COMMUNICATION |
TOQUE | SOM DE NOTIFICAÇÃO |
NOTIFICAÇÃO | NOTIFICAÇÃO |
ALARME | ALARME |
SISTEMA_SOM | ASSISTANCE_SONIFICAÇÃO |
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 em botões, 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 do legadoSTREAM_SYSTEM_ENFORCED
(como forçar sons do obturador da câmera). -
HW_AV_SYNC
. Solicita que o sistema selecione um fluxo de saída que suporte sincronização A/V de hardware.
Os sinalizadores de atributos de áudio não são exclusivos e podem ser combinados. Para obter detalhes sobre esses sinalizadores, consulte a API do atributo de áudio .
Exemplo
Neste exemplo, AudioAttributes.Builder
define os AudioAttributes
a serem usados por uma nova instância 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 versões posteriores. Entretanto, os aplicativos não são obrigados a aproveitar os 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 compatibilidade retroativa com dispositivos mais antigos e versões do Android, traduzindo automaticamente tipos de fluxo de áudio legados em atributos de áudio. No entanto, a estrutura não impõe nem 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 fluxo 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 mais detalhes, veja Áudio Automotivo .