É possível remover o ruído em tempo real com o PulseAudio, para que a saída de som seja mais suave?
É possível remover o ruído em tempo real com o PulseAudio, para que a saída de som seja mais suave?
Respostas:
module-echo-cancel
Comecei a ler muito sobre o PulseAudio e as opções "ocultas" que tinha para encontrar uma que fosse semelhante a essa pergunta. O que encontrei foi o módulo de cancelamento de ruído, que reduz drasticamente qualquer ruído estático no microfone e até MUITO ruído de fundo, basicamente oferecendo o benefício de gravar apenas sua própria voz com excelente qualidade (para gravação de áudio por exemplo). Para fazer isso, siga estas etapas:
sudo nano /etc/pulse/default.pa
Adicione a seguinte linha em qualquer lugar do arquivo, mas eu recomendo quase no final, onde você encontrará um comentário sobre o material de cancelamento de eco (~ linha 140):
load-module module-echo-cancel
Recarregue o PulseAudio ( pulseaudio -k
) ou simplesmente reinicie o computador. Você deve poder selecionar a nova opção Cancelamento de ruído na seção Dispositivo de entrada:
Você pode encontrar mais informações sobre isso na página Módulo de cancelamento de eco
Se você deseja definir como padrão o dispositivo de cancelamento de eco, basta transformar a linha acima em:
load-module module-echo-cancel source_name=logitechsource
e depois na parte inferior do arquivo, adicione
set-default-source logitechsource
Nesse caso, nomeei a fonte logitechsource
, mas você pode nomear o que quiser e simplesmente reiniciar o pulseaudio.
Por fim, se você não quiser um nome super longo nas Configurações de som (quando desejar selecionar um dispositivo de entrada / saída). Minha sugestão é renomear o dispositivo de entrada assim:
load-module module-echo-cancel source_name=logitechsource source_properties=device.description=LogitechHD
E, novamente, reiniciando o pulseaudio. O resultado final é assim:
load-module module-echo-cancel aec_method=webrtc aec_args="analog_gain_control=0 digital_gain_control=1"
como por gitlab.freedesktop.org/pulseaudio/pulseaudio/issues/224
Essa é uma pergunta antiga, mas eu tive o mesmo problema e, depois de pesquisar no Google (onde encontrei pessoas que concordaram que isso não era possível) e ler algumas páginas de manual, desenvolvi uma solução baseada na idéia de user2330377.
Primeiro, você precisa criar um perfil de ruído para o SoX. Basta usar qualquer programa de gravação de áudio para gravar alguns segundos de ruído e depois cd
no diretório em que você o salvou e faz sox noise.wav -n noiseprof noise.prof
.
Então você precisa criar um dispositivo de loopback ALSA:
sudo modprobe snd_aloop
Isso é necessário porque o pulseaudio, ao contrário de Jack, não pode conectar diretamente o software de áudio; portanto, usaremos o dispositivo de loopback como proxy.
Agora você precisa iniciar paman
e encontrar os nomes do microfone (ou de outro dispositivo de gravação) e do dispositivo de loopback que acabamos de criar. Uma vez encontrados, você pode executar o seguinte comando para começar a gravar o som do seu microfone, transmitindo-o pelo SoX e reproduzindo-o no dispositivo de loopback:
pacat -r -d alsa_input.pci-0000_00_14.2.analog-stereo --latency=1msec|sox -b 16 -e signed -c 2 -r 44100 -t raw - -b 16 -e signed -c 2 -r 44100 -t raw - noisered noise.prof 0.2|pacat -p -d alsa_output.2.analog-stereo --latency=1msec
(Onde você precisa substituir os nomes de dispositivos corretos pelos parâmetros -d - o dispositivo de entrada para a primeira chamada do pacat e a saída do dispositivo de loopback para a segunda).
Lá vai você, quase pronto! Como último passo, comece a gravar o som com o aplicativo de sua escolha e, em seguida, inicie pavucontrol
, vá para a guia "Gravação" e defina o dispositivo de áudio usado para a gravação (exibido como o botão cinza à direita) como "Monitor de áudio de loopback" Dispositivo". Agora você deve ter uma gravação clara e sem ruídos!
A investigação mostra que não há maneira conhecida de fazer filtragem de redução de ruído em tempo real com qualquer subsistema Linux. Alguns sites apontam para o hardware que você pode comprar, o que deve fazer o truque muito melhor do que fazer um filtro de software.
Como alternativa, se for para uma gravação, você pode passar o som pelo Audacity e usar o filtro de ruído.
module-echo-cancel
, que possui várias implementações, como webrtc | speex.
Aqui está, pelo menos de uma maneira, implemente o webrtc-aec no
http://wiki.gentoo.org/wiki/PulseAudio
webrtc-aec Sim Usa a biblioteca de áudioProcessing webrtc.org para aprimorar bastante as chamadas VoIP em aplicativos que a suportam, executando cancelamento de eco acústico, controle de ganho analógico, supressão de ruído e outros processamentos.
Aqui está um artigo datado de 2013 sobre o assunto (remoção de ruído com o pulseaudio, não especificamente o webrtc-aec) http://lac.linuxaudio.org/2013/papers/37.pdf
"Apresentamos os primeiros resultados de uma solução de redução de ruído / eco multicanal construída sobre o PulseAudio e motivamos as decisões de projeto. O trabalho resultou em várias melhorias na estrutura de cancelamento de eco e processamento de sinais do PulseAudio, que foram contribuiu durante o ciclo de desenvolvimento da versão 3.0 / 4.0 e deve facilitar futuras soluções de áudio Linux embarcadas. O trabalho adicional inclui a otimização de código para mixagem de fluxo de áudio, métodos de reamostragem mais eficientes e a implementação de um AEC eficiente no pipeline de processamento multicanal ".
Não há informações na página de documentação do módulo sobre cancelamento de ruído. Existe apenas o algoritmo AEC (Acoustic Echo Cancellation) dentro do module-echo-cancel, que possui várias implementações, como webrtc | speex.
Portanto, você deve comprar microfones de fone de ouvido com recurso de cancelamento de ruído integrado o máximo possível.
Ao testar a gravação de voz no ubuntu, encontrei algumas qualidades específicas:
O Skype, Telegram usa a entrada bruta do dispositivo padrão (no meu caso, as tomadas front-in-mic | backward-mic). Se você precisar cancelar um ruído nesses aplicativos, compre fones de ouvido | microfones apenas com o recurso integrado de cancelamento de ruído
Se você precisar usar chamadas de voz no navegador, lembre-se de que os navegadores possuem suas próprias implementações de algoritmos de processamento de voz, por exemplo, WebRTC.
Também aplicativos da Web (sites como talky, hangouts, appear.in etc.) podem ter suas próprias implementações de algoritmos de processamento de voz, apesar de poderem ser baseadas na análise de hangouts da webrtc