Pular para o conteúdo principal

Desenvolvimento de Áudio

Esta página descreve as interfaces de áudio de aplicação e a configuração do dispositivo no firmware atual do produto. Para builds de aplicações C/C++ comuns, use recamera_pro_toolchain. Você só precisa do código-fonte completo do BSP para modificar ALSA, áudio do kernel ou roteamento de áudio do produto.

Suporte de Hardware e Kernel​

As opções de kernel relacionadas a áudio estão em sysdrv/source/kernel/arch/arm64/configs/rv1126b-recamera2.config:

ConfiguraçãoSignificado
CONFIG_SND_SOC_ES7202=yADC multicanal Everest ES7202 para captura da matriz de microfones
CONFIG_SND_SOC_ROCKCHIP_PDM_V2=yInterface de microfone digital PDM v2
CONFIG_SND_SOC_RK817=yCodec RK817 (áudio no PMIC; caminho de saída para o alto-falante)
CONFIG_SND_SOC_RK_DSM=yProcessamento digital de alto-falante Rockchip
CONFIG_SND_SOC_ROCKCHIP_ASRC=yConversão assíncrona de taxa de amostragem
CONFIG_SND_SOC_ROCKCHIP_MULTI_DAIS=yVários links DAI; captura e reprodução usam DAIs separados
CONFIG_SND_SOC_DUMMY_CODEC=yCodec fictício
CONFIG_SND_HRTIMER=y, CONFIG_SND_PCM_TIMER=yDrivers de temporizador

Os nós de áudio são definidos em rv1126b-recamera2-v1.dts e nos arquivos DTSI que ele inclui. O código-fonte da biblioteca em espaço de usuário é media/alsa-lib/. Ela é compilada por ./build.sh media; as saídas ficam em output/out/media_out/lib/.

Caminho de Captura: Seis Canais de Hardware → Quatro Canais Virtuais​

Este elemento-chave do design de áudio da reCamera Pro é definido em /etc/asound.conf em um overlay. Fonte: project/cfg/BoardConfig_Recamera2/overlay/overlay-buildroot-asound/etc/asound.conf.

Três Camadas​

Camada 1 · Hardware compartilhado (dsnoop) — permite que vários processos leiam o mesmo dispositivo de hardware:

pcm.mic_hw_shared
type dsnoop
ipc_key 2026
ipc_perm 0666
slave.pcm "hw:0,0"
channels 6
rate 16000
format S16_LE
period_size 1024
buffer_size 4096

Camada 2 · Mapeamento de canais (route) — mapeia seis canais físicos para quatro canais virtuais [Mic1, Mic2, Ref, Ref]:

pcm.ai_2mic_2ref
type route
slave.pcm "mic_hw_shared"
slave.channels 6
ttable {
0.0 1 # Canal de hardware Ch0 → canal de saída Ch0 (Mic 1)
1.2 1 # Canal de hardware Ch2 → canal de saída Ch1 (Mic 2)
2.4 1 # Canal de hardware Ch4 → canal de saída Ch2 (Referência)
3.4 1 # Canal de hardware Ch4 → canal de saída Ch3 (Cópia da referência)
}

Camada 3 · Dispositivos virtuais de aplicação (plug) — fornecem dispositivos nomeados com conversão automática de formato para diferentes módulos:

Dispositivo PCMFinalidade
ai_mainEntrada de áudio principal
ai_kwsDetecção de palavra-chave
ai_asrReconhecimento de fala (ASR)
ai_debugDepuração / gravação bruta

Todos os quatro usam type plug com slave.pcm "ai_2mic_2ref". Seus dispositivos de controle são:

ctl.ai_main / ctl.ai_kws / ctl.ai_asr / ctl.ai_debug  →  type hw; card 0

Por Que Este Design é Usado​

  • dsnoop evita acesso exclusivo: dispositivos de hardware ALSA são exclusivos por padrão, mas KWS, ASR, áudio de gravação de vídeo e gravação de depuração podem precisar capturar ao mesmo tempo. ipc_key 2026 + ipc_perm 0666 permitem que vários processos compartilhem o fluxo de captura.
  • route fornece o sinal de referência de AEC: o Cancelamento de Eco Acústico (AEC) precisa de uma referência do que está sendo reproduzido no alto-falante. O canal de hardware 4 carrega essa referência e é copiado para os canais de saída 2 e 3.
  • plug resolve incompatibilidades de formato: módulos podem exigir taxas ou formatos diferentes; plug converte automaticamente.

Como Usar​

# Grave quatro canais (2 microfones + 2 referências), 16 kHz S16_LE
# arecord -D ai_debug -c 4 -r 16000 -f S16_LE -d 10 /userdata/test.wav

# Gravação para ASR
# arecord -D ai_asr -c 4 -r 16000 -f S16_LE -d 5 /userdata/asr.wav

Ao usar a API ALSA, passe "ai_main", "ai_kws", "ai_asr" ou "ai_debug" como o nome do dispositivo. Não use "hw:0,0"; ele é exclusivo e não aplica o mapeamento de canais.

Abrir hw:0,0 diretamente fornece dados brutos de seis canais. Para o layout de dois microfones + duas referências, use ai_2mic_2ref ou um de seus wrappers plug.

Caminho de Reprodução​

O alto-falante usa o codec RK817 / RK_DSM. O dispositivo de reprodução ALSA padrão é default (hw:0,x; verifique o número exato do dispositivo no hardware com aplay -l).

# aplay -l                              # Listar dispositivos de reprodução
# aplay -D default /oem/usr/share/xxx.wav

recamera_ipc inclui um arquivo de áudio de teste em project/app/recamera_ipc/common/speaker_test.wav para verificação do alto-falante.

Código de Áudio em Nível de Aplicação​

CaminhoConteúdo
project/app/recamera_ipc/common/audio/audio.c / audio.hLógica principal de áudio do rkipc: captura, codificação e multiplexação com vídeo
project/app/recamera_ipc/common/audio/rkaudio_mp3.c / .hDecodificação e reprodução de MP3 (para prompts, etc.)
project/app/ao_record_demo/ao_record_demo.cDemo de gravação; seu Makefile é um modelo para linkar o rockit
project/app/aov_sample/sample_aov_audio.cCaptura de áudio em modo de baixo consumo
project/app/component/ao_record_service/Componente de serviço de gravação, coletado explicitamente por project/app/Makefile
media/samples/simple_test/simple_ai_get_frame.cExemplo mínimo de captura
media/samples/simple_test/simple_ai_bind_aenc.cVincular captura à codificação
media/samples/simple_test/simple_ai_bind_aenc_external_encoder.cUsar um codificador externo
media/samples/simple_test/simple_adec_bind_ao.cVincular decodificação à reprodução
media/samples/simple_test/simple_adec_bind_ao_external_decoder.cUsar um decodificador externo
media/samples/simple_test/simple_ao_send_frame.cEnviar frames diretamente para reprodução
media/samples/example/audio/sample_ai.c, sample_ai_aenc.cExemplos completos
media/samples/example/test/sample_ai_aenc_adec_ao_stresstest.cTeste de estresse de áudio

Módulos de Áudio do rockit​

Ao usar MPI, o áudio usa o mesmo modelo de módulo que o vídeo:

MóduloHeaderFinalidade
AIrk_mpi_ai.hCaptura de áudio
AOrk_mpi_ao.hReprodução de áudio
AENCrk_mpi_aenc.hCodificação de áudio (G.711/AAC, etc.)
ADECrk_mpi_adec.hDecodificação de áudio

Caminho típico: AI → AENC → (multiplexar com VENC em um stream); a reprodução usa ADEC → AO. Conecte os módulos com RK_MPI_SYS_Bind().

Ao definir os atributos do canal de AI, faça a contagem de canais corresponder ao asound.conf (quatro canais = dois microfones + duas referências); use taxa de amostragem de 16.000 Hz e formato S16_LE.

Algoritmos de Áudio (VQE / RockAA)​

Os algoritmos de front-end da Rockchip — AEC, Supressão de Ruído Acústico (ANS) e Controle Automático de Ganho (AGC) — são fornecidos por meio do RockAA / VQE:

  • docs/zh/audio/Rockchip_Developer_Guide_Audio_Algorithm_VQE_Introduction_CN.pdf (guia do algoritmo VQE)
  • docs/zh/audio/Rockchip_Developer_Guide_RockAA_Utils_CN.pdf (ferramentas RockAA)
  • docs/zh/audio/Rockchip_Developer_Guide_Sound_Event_Detection.pdf (detecção de eventos sonoros)
  • media/common_algorithm/ (bibliotecas de algoritmos comuns)

O canal de referência de eco em asound.conf é reservado para o AEC do VQE. Para habilitar o VQE, ative as opções de algoritmo relevantes nos atributos do canal de AI e certifique-se de que os dados do canal de referência estejam roteados corretamente.

Teste da Matriz de Microfones​

docs/zh/audio/Rockchip_Developer_Guide_Microphone_Array_TEST_CN.pdf descreve o teste de consistência da matriz. Para produção, use scripts em project/app/recamera_utils/hw_test/, ou grave a entrada bruta de seis canais por meio de ai_debug e inspecione cada canal.

Para diagnosticar problemas de ordem de canais, grave um WAV de quatro canais e inspecione suas faixas no Audacity. Toque ou fale em cada microfone e confirme que Mic1, Mic2, Ref, Ref correspondem ao mapeamento ttable.

Problemas Comuns​

SintomaCausaSolução
arecord: main:831: audio open error: Device or resource busyhw:0,0 foi aberto diretamente, ignorando o dsnoopUse um dispositivo virtual como ai_debug
Abrir ai_* informa Unknown PCM/etc/asound.conf não foi aplicadoConfirme que o overlay foi empacotado (RK_POST_OVERLAY inclui overlay-buildroot-asound) e inspecione cat /etc/asound.conf no dispositivo
Contagem de canais incorreta (esperado 4, obtido 6)hw:0,0 foi usado em vez de ai_2mic_2refUse a camada de roteamento
AEC ruim / eco permaneceCanal de referência ausente ou mapeado incorretamenteVerifique as entradas ttable 2.4 / 3.4; confirme que o canal de hardware Ch4 é a referência de eco (verificação de hardware necessária)
Gravação está silenciosaCanais errados selecionados (por exemplo, apenas Ch1 / Ch3 / Ch5)Grave primeiro todos os seis canais brutos para identificar quais canais carregam sinal
Sem som durante a reproduçãoCaminho RK817 / DSM desativado ou volume mudoVerifique com amixer -c 0 scontrols; ative o som em alsamixer
Tom de reprodução incorreto devido a incompatibilidade de taxa de amostragemplug está inativo ou ASRC está desativadoConfirme CONFIG_SND_SOC_ROCKCHIP_ASRC=y no kernel e defina explicitamente -r 16000
Falhas intermitentes quando vários processos gravamConflito de ipc_keyMantenha a chave 2026 exclusiva entre as aplicações ou altere asound.conf e reconstrua

Documentos Relacionados​

DocumentoCaminho
Guia do Desenvolvedor ACodec da Série RVdocs/zh/audio/Rockchip_Developer_Guide_Linux_RV_Series_ACodec_CN.pdf
Introdução ao Algoritmo VQEdocs/zh/audio/Rockchip_Developer_Guide_Audio_Algorithm_VQE_Introduction_CN.pdf
Ferramentas RockAAdocs/zh/audio/Rockchip_Developer_Guide_RockAA_Utils_CN.pdf
Teste de Matriz de Microfonesdocs/zh/audio/Rockchip_Developer_Guide_Microphone_Array_TEST_CN.pdf
Detecção de Eventos Sonorosdocs/zh/audio/Rockchip_Developer_Guide_Sound_Event_Detection.pdf
Solução de Problemas de Áudiodocs/zh/audio/Rockchip_Trouble_Shooting_Linux_Audio_CN.pdf

As versões em inglês estão em docs/en/audio/ com nomes semelhantes; Sound_Event_Detection está disponível apenas em chinês.

Suporte Técnico e Discussão de Produto​

Obrigado por escolher nossos produtos! Estamos aqui para fornecer diferentes tipos de suporte para garantir que sua experiência com nossos produtos seja a mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.

Loading Comments...