Áudio

Ícone da HAL de áudio do Android

A camada de abstração de hardware (HAL, na sigla em inglês) de áudio do Android conecta as APIs de framework de áudio de nível mais alto, específicas de áudio em android.media ao driver e hardware de áudio 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 de aplicativos
O framework de aplicativos 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 glue JNI correspondentes para acessar o código nativo que interage com o hardware de áudio.
JNI
O código JNI associado ao android.media chama o código nativo de nível mais baixo 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 fornece 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.
Binder IPC
Os proxies IPC do Binder facilitam a comunicação em limites de processos. 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 de 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 você precisa implementar 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 da versão HAL correspondente.
Driver do kernel
O driver de áudio interage com o hardware e a implementação de HAL. Você pode usar a Advanced Linux Sound Architecture (ALSA), o Open Sound System (OSS) ou um driver personalizado (a HAL é independente do driver).

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

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