Atributos de áudio

Os players de áudio oferecem suporte a atributos que definem como o sistema de áudio processa decisões de roteamento, volume e foco para a origem 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 de um novo e-mail) e transmitir os atributos da fonte de áudio para o framework, em que 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, o framework tomava decisões de mixagem usando apenas o tipo de stream de áudio. No entanto, basear essas decisões no tipo de transmissão era muito limitado para produzir uma saída de qualidade em vários aplicativos e dispositivos. Por exemplo, em um dispositivo móvel, alguns aplicativos (por exemplo, o Google Maps) tocavam rotas de carro no tipo de stream STREAM_MUSIC. No entanto, em dispositivos móveis no modo de projeção (por exemplo, Android Auto), os aplicativos não podem misturar rotas de carro com outros streams de mídia.

Usando a API Attribute Audio, os aplicativos fornecem ao sistema de áudio informações detalhadas sobre uma fonte de áudio específica, incluindo o uso (por que a fonte está sendo reproduzida), o tipo de conteúdo (o que a fonte está reproduzindo), as flags (como a fonte deve ser reproduzida) e os contextos (novos 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 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).
  • Context. Valores de uso abstratos para o HAL de áudio.
  • Flags. Especifica como a origem deve ser reproduzida. Inclui suporte para a aplicação de audibilidade (sons de obturador de câmera obrigatórios em alguns países) e sincronização de áudio/vídeo de hardware.

Para o processamento dinâmico, os aplicativos precisam distinguir entre conteúdo de filmes, músicas e fala. Informações sobre os dados também podem ser importantes, como volume e valor de amostra máxima.

Usar atributos

O uso especifica o contexto em que o stream é usado, fornecendo informações sobre por que o som está sendo reproduzido e para que ele é usado. As informações de uso são mais expressivas do que um tipo de transmissão 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 exemplos, consulte as definições de USAGE_MEDIA e USAGE_ALARM. Para exceções, consulte a definição de 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. O framework 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, é necessário incluir informações do tipo sempre que ele for conhecido, como o uso de CONTENT_TYPE_MOVIE para um serviço de streaming de filmes ou CONTENT_TYPE_MUSIC para um aplicativo de reprodução de músicas.

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 de tipo de conteúdo do atributo de áudio são mutuamente exclusivos. Para detalhes sobre os tipos de conteúdo, consulte a API de atributos de áudio.

Contextos

Cada som no Android é identificado pelo aplicativo responsável e pelo motivo de geração do som. O dispositivo Android usa essas informações para determinar como apresentar o som. No Android 8.x e versões anteriores, os aplicativos podem informar o motivo da geração de som usando tipos de transmissão legados (por exemplo, AudioSystem.STREAM_MUSIC) ou AudioAttributes. No Android 9, os valores AudioAttributes.usage são abstraídos no nível do HAL como Contextos.

Contextos de áudio da HAL Uso de AudioAttributes
MÚSICA MÍDIA
VOICE_COMMAND USAGE_ASSISTANT
NAVIGATION ASSISTANCE_NAVIGATION_GUIDANCE
CALL VOICE_COMMUNICATION
RINGTONE NOTIFICATION_RINGTONE
NOTIFICAÇÃO NOTIFICAÇÃO
ALARME ALARME
SYSTEM_SOUND ASSISTANCE_SONIFICATION
DESCONHECIDO DESCONHECIDO

Você pode fornecer um dos seguintes valores de CONTEXT_NUMBER para qualquer instância:

  • MUSIC_CONTEXT // Reprodução de música
  • NAVIGATION_CONTEXT // Rotas de navegação
  • VOICE_COMMAND_CONTEXT // Sessão de comando de voz
  • CALL_RING_CONTEXT // Chamada de voz tocando
  • CALL_CONTEXT // Ligação de voz
  • ALARM_CONTEXT // Som do alarme do Android
  • NOTIFICATION_CONTEXT // Notificações
  • SYSTEM_SOUND_CONTEXT // Sons de interação do usuário (cliques de botão etc.)

Flags

As flags especificam como o framework de áudio aplica efeitos à reprodução de áudio. Forneça uma ou mais das seguintes flags para uma instância:

  • FLAG_AUDIBILITY_ENFORCED. Solicita ao sistema que garanta a audibilidade do som. Use para atender às necessidades de STREAM_SYSTEM_ENFORCED legados (como forçar sons de obturador da câmera).
  • HW_AV_SYNC. Solicita que o sistema selecione um stream de saída que ofereça suporte à sincronização A/V de hardware.

As flags de atributo de áudio não são exclusivas e podem ser combinadas. Para detalhes sobre essas flags, consulte a API de atributos de áudio.

Exemplo

Neste exemplo, AudioAttributes.Builder define o AudioAttributes a ser usado 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 precisam usar atributos de áudio ao criar ou atualizar aplicativos para o Android 5.0 e versões mais recentes. No entanto, os aplicativos não precisam aproveitar os atributos. Eles podem processar apenas tipos de transmissão legados ou permanecer sem saber dos atributos (por exemplo, um player de mídia genérico que não sabe nada sobre o conteúdo que está sendo reproduzido).

Nesses casos, o framework mantém a compatibilidade com versões mais antigas de dispositivos e do Android, traduzindo automaticamente os tipos de transmissão de áudio legados para atributos de áudio. No entanto, o framework não aplica nem garante esse mapeamento em todos os dispositivos, fabricantes ou versões do Android.

Mapeamentos de compatibilidade:

Android 5.0 e superior Android 4.4 e versões 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 transmissão descontinuados

O Android 9 descontinua os seguintes tipos de transmissão 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, consulte Áudio automotivo.