Fazer um registro ignorar aplay

0

Estou tentando criar um tipo de robô no meu pi de framboesa para responder minhas perguntas.

No começo eu fiz isso de forma que só respondesse quando ouviu seu nome, e funcionou bem. Mas agora estou adicionando conversas mais naturais e me deparei com um problema.

Sempre que o bot fala com o comando aplay, o comando arecord captura sua própria voz e envia para o bot para processar. O bot não consegue distinguir entre a minha voz e a sua própria voz, por isso começa a falar sozinho (muito engraçado, devo acrescentar).

Eu verifiquei meu código bot para verificar se o que foi ouvido era exatamente o mesmo que o que foi dito (depois que eu o converti em texto), mas isso não funciona muito bem (às vezes ele se entende com pequenas variações ), e leva algum tempo extra de processamento apenas para descobrir isso, tempo em que meus próprios comandos não são processados, porque está tentando descobrir se a voz que ouve era sua.

Eu estou querendo saber se existe uma maneira de fazer uma instância de arecord ignorar o que uma instância de aplay disse na mesma máquina. Acredito que uma solução de mais baixo nível é definitivamente possível (estou pensando em como posso usar o skype sem fones de ouvido, por exemplo; não é necessário usar o reconhecimento de voz para não saber o loop infinito da voz do meu amigo).

Estou procurando uma solução há algum tempo, mas não consigo encontrar nenhuma menção a esse problema (que parece ser muito comum). Talvez eu não saiba o nome do fenômeno. Pensamentos?

    
por Luan Nico 20.05.2018 / 15:29

1 resposta

2

Se o problema é que arecord captura via mic o som dos alto-falantes que você controla com aplay , possivelmente com um atraso:

A palavra-chave que você está procurando é cancelamento de eco . Existe um software existente para tanto para o ALSA como para o Pulseaudio, utilizado, e. em Smartphones baseados no Linux.

Basicamente, o algoritmo tem que correlacionar a entrada recebida com a saída enviada para medir o atraso e determinar o volume, e então subtrair a saída da entrada com o atraso e a escala corretos para cancelá-la.

    
por 20.05.2018 / 18:01

Tags