Áudio

Ícone do HAL de áudio do Android

A camada de abstração de hardware (HAL) de áudio do Android conecta as APIs de framework de nível superior e específicas de áudio em android.media ao driver de áudio e hardware subjacentes. Esta seção inclui instruções de implementação e dicas para melhorar a performance.

A arquitetura de áudio do Android define como a funcionalidade de áudio é implementada e aponta para o código-fonte relevante envolvido na implementação.

Arquitetura de áudio

Figura 1. Arquitetura de áudio do Android

Framework do aplicativo
O framework do aplicativo inclui o código do app, que usa as APIs android.media para interagir com o hardware de áudio. Internamente, esse código chama as classes de união JNI correspondentes para acessar o código nativo que interage com o hardware de áudio.
JNI
O código JNI associado a android.media chama o código nativo de nível inferior para acessar o hardware de áudio. O JNI está localizado em frameworks/base/core/jni/ e frameworks/base/media/jni.
Framework nativo
O framework nativo oferece um equivalente nativo ao pacote android.media, chamando proxies IPC do Binder para acessar os serviços específicos de áudio do servidor de mídia. O código do framework nativo está localizado em frameworks/av/media/libmedia.
IPC de vinculação
Os proxies de IPC do Binder facilitam a comunicação entre os limites do processo. Os proxies estão localizados em frameworks/av/media/libmedia e começam com a letra "I".
Servidor de mídia
O servidor de mídia contém serviços de áudio, que são o código real que interage com as implementações do HAL. O servidor de mídia está localizado em frameworks/av/services/audioflinger.
HAL
A HAL define a interface padrão que os serviços de áudio chamam e que precisa ser implementada para que o hardware de áudio funcione corretamente. Para mais detalhes, consulte a interface HAL de áudio e os comentários nos arquivos *.hal do diretório de versão HAL correspondente.
Driver do kernel
O driver de áudio interage com o hardware e a implementação da HAL. É possível usar a Advanced Linux Sound Architecture (ALSA), o Open Sound System (OSS) ou um driver personalizado (o HAL não depende do driver).

Observação: se você usar o ALSA, recomendamos external/tinyalsa para a parte do usuário do driver devido à licença compatível (a biblioteca padrão do modo de usuário tem licença GPL).

Áudio nativo do Android baseado no OpenSL ES (não mostrado)
Essa API é exposta como parte do Android NDK e está no mesmo nível de arquitetura que android.media.