Transmita áudio ao vivo com filtro de ruído no Linux

3

Eu preciso remover o ruído de uma fonte de áudio, mas isso precisa acontecer ao vivo. A voz resultante não precisa soar perfeita, apenas não pode conter muito ruído.

Eu li sobre o sox, mas parece que precisa de um tipo de perfil, o que exigiria que eu passasse pelo sox duas vezes.

Então alguém sabe como passar uma fonte de áudio através de algo como sox ou ffmpeg ao vivo e fazer alguma filtragem básica de vento / ruído?

    
por skerit 28.10.2012 / 20:03

1 resposta

1

Você pode gerar um perfil de ruído para o SoX com:

sox sample-input.wav --null noiseprof ~/noise.profile

Você pode usar o perfil para filtrar sua gravação:

sox recording.wav filtered.wav noisered ~/noise.profile

Isso funciona porque o ruído estático que o microfone capta normalmente depende da sua configuração (fiação) e, portanto, é sempre o mesmo no mesmo ambiente. Observe que o SoX é consideravelmente pior do que o Audacity na remoção de ruído. : (

Além disso, você pode usar os filtros de áudio do ffmpeg, como highpass / lowpass para diminuir as frequências abaixo / acima de determinado limite ou use compand filtre para comprimir o alcance dinâmico da gravação e / ou faça um noise gate .

Depois de ter o perfil de ruído, o pipeline de processo completo pode ser:

ffmpeg -f alsa -i hw:0,0 -af 'highpass=300, lowpass=4000' -f wav - | sox -f wav -f wav - noisered ~/noise.profile | aplay

Note que você deve extrair o perfil da gravação filtrada por ffmpeg, se você usar esses filtros.

    
por 10.03.2015 / 00:25