O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Efeitos de áudio

A partir do Android 11, os fabricantes de dispositivos têm a capacidade de conectar e ativar automaticamente efeitos de áudio específicos quando um determinado dispositivo de áudio é selecionado para captura ou reprodução de áudio. Uma grande melhoria é que os efeitos de áudio inseridos em um caminho de áudio inteiramente implementado abaixo do HAL de áudio (conexão direta entre um dispositivo de entrada e um dispositivo de saída) podem ser controlados pela estrutura de efeitos de áudio.

Esse recurso é voltado principalmente para OEMs automotivos, mas também pode ser usado em outros formatos do Android. Um exemplo de aplicativo é inserir um efeito de aprimoramento de voz na saída do sintonizador FM quando conectado diretamente ao alto-falante por meio do DSP de áudio.

Pré-requisitos

  • Como para qualquer outro efeito de áudio, o efeito deve ser implementado por uma biblioteca de fornecedor e listada na audio_effects.xml arquivo de configuração.
  • O efeito deve ser do tipo de pré-processamento ou de pós-processamento (bandeira TYPE_PRE_PROC ou TYPE_POST_PROC conjunto em EffectDescriptor.flags ).
  • Se a implementação efeito é HW acelerado (bandeira HW_ACC_TUNNEL set em EffectDescriptor.flags ), ele pode ser anexado a um caminho de áudio totalmente conectado abaixo do HAL (sem fluxo de reprodução ou de captura de áudio abriu no HAL áudio).

Criação e ativação de um efeito de dispositivo

Os efeitos de áudio específicos do dispositivo podem ser instanciados usando um dos dois métodos abaixo.

Usando um arquivo de configuração de efeitos de áudio

Este método permite a criação estática de um efeito de áudio que é sistematicamente anexado e habilitado para qualquer caminho de áudio, selecionando um dispositivo especificado como coletor ou fonte.

Isto é feito através da adição de uma seção específica na audio_effects.xml arquivo da seguinte forma:

<deviceEffects>
<devicePort type="AUDIO_DEVICE_IN_BUILTIN_MIC" address="bottom">
      	<apply effect="agc"/>
      </devicePort>
  </deviceEffects>
  

Usando uma API do sistema

Um novo construtor @SystemApi foi adicionado ao android.media.audiofx.AudioEffect classe para criar e ativar um efeito de dispositivo:

AudioEffect(@NonNull UUID uuid, @NonNull AudioDeviceAttributes device);

Depois que o efeito é criado especificando o ID do efeito de áudio exclusivo e o descritor do dispositivo de áudio, ele pode ser habilitado ou desabilitado com as APIs AudioEffect existentes.

Uma API também está disponível para consultar se uma implementação oferece suporte a uma determinada combinação de dispositivo / efeito.

static boolean isEffectSupportedForDevice(
            @NonNull UUID uuid, @NonNull AudioDeviceAttributes device);

Novas APIs HAL

Efeito de áudio HAL

O efeito de áudio HAL V6.0 tem uma nova assinatura para o createEffect() método que permita a criação de um efeito ligado a um dispositivo:

IEffectFactory::createEffect(Uuid uid, AudioSession session,
AudioIoHandle ioHandle, AudioPortHandle device)
  • O AudioSession especificado deve ser AudioSessionConsts.DEVICE .
  • AudioIoHandle é ignorada se a session é AudioSessionConsts.DEVICE .
  • O device é identificado por sua única AudioPortHandle atribuído pela estrutura de áudio quando o dispositivo é selecionado no HAL de áudio com IDevice::createAudioPatch() método.

Áudio HAL

Para apoiar o recurso de efeito de aparelho, o HAL áudio deve implementar o controle de roteamento de áudio usando o IDevice::createAudioPatch() API. Isto é indicado pelos IDevice::supportsAudioPatches() método do relatório true .

Dois novos métodos API, IDevice::addDeviceEffect(AudioPortHandle device, uint64_t effectId) e IDevice::removeDeviceEffect(AudioPortHandle device, uint64_t effectId) dizer a implementação HAL que um efeito dispositivo foi ativado ou desativado em um determinado dispositivo.

O dispositivo é identificado pelo seu AudioPortHandle ID, que é utilizada quando um remendo de áudio é criado com o IDevice::createAudioPatch() método.

As APIs HAL de áudio podem ser usadas por uma implementação se a coordenação for necessária entre os HALs de áudio e efeito quando um efeito for habilitado ou desabilitado.