Atributos de áudio

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