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.
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/eframeworks/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/libmediae 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
*.haldo 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/tinyalsapara 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.