Atributos de áudio

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 legado STREAM_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 .