Skip to content

Instantly share code, notes, and snippets.

@buzztaiki
Last active June 9, 2023 16:25
Show Gist options
  • Save buzztaiki/c7c7426ca662cd2a2356a3de3cedc7f7 to your computer and use it in GitHub Desktop.
Save buzztaiki/c7c7426ca662cd2a2356a3de3cedc7f7 to your computer and use it in GitHub Desktop.
Linux のノイズ除去まわりメモ

Linux のノイズ除去まわりメモ

基本的に PulseAudio のフィルタとして使うことになる。 アプリ側にノイズ除去があると二重にかかって酷い事になりがちなので、アプリか PulseAudio のどちらかをオフにする。

Wayland を使う場合は WaylandとPipeWireとEasyEffectsでノイズ除去する を参照。

設定は ~/.config/pulse/default.pa に以下のように書く。

.include /etc/pulse/default.pa

# your configurations here

エコーバックさせる

検証等でエコーバックさせるには module-loopback を有効にすればいい

% pactl load-module module-loopback

無効にするには

% pactl unload-module module-loopback

module-echo-cancel

PulseAudio 標準添付。バックエンドとして WebRTC, Speex 等が選べるけど WebRTC を選んでおけば問題なさそう。 標準のマイクよりも音が大きめになるっぽい感じ。ボリュームは控えたほうがよさげ。

load-module module-echo-cancel use_master_format=1 aec_method=webrtc aec_args="analog_gain_control=0\ digital_gain_control=1" source_name=nc_source sink_name=nc_sink
update-source-proplist nc_source device.description="Microphone (NC)"
update-sink-proplist nc_sink device.description="Headphones (NC)"

set-default-source nc_source

もし speex を使う場合は channels=1 を指定する必要がある。

Real-time Noise Suppression Plugin (VST2, LV2, LADSPA)

回帰型ニューラルネットワークを使ったノイズ除去。タイプ音も消してくれる。すごい。でも普通の声もたまに消える気もする。

% yay -S noise-suppression-for-voice
load-module module-null-sink sink_name=mic_denoised_out rate=48000
load-module module-ladspa-sink sink_name=mic_raw_in sink_master=mic_denoised_out label=noise_suppressor_mono channels=1 plugin=/usr/lib/ladspa/librnnoise_ladspa.so control=50
load-module module-loopback source=alsa_input.pci-0000_00_1f.3.analog-stereo sink=mic_raw_in channels=1 source_dont_move=true sink_dont_move=true
load-module module-remap-source source_name=denoised master=mic_denoised_out.monitor channels=1
update-source-proplist denoised device.description="Microphone (RNNoise)"

set-default-source denoised

設定の複雑さについて

この設定はとても複雑。loopback を利用するから遅延も起きる。

https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/issues/843 RNNoise Module が欲しいって言われてるけど 3rd party に依存できないって話とかで難しそう。そのかわり https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/issues/120module-ladspa-source upvote したらって言われてる。すごく欲しい。

トレーニング

ニューラルネットワークだから本来ならトレーニングがいる。rnnoise は学習済みデータとして https://github.com/xiph/rnnoise/blob/master/src/rnn_data.c を持っている。おそらく、英語話者の音声を使ってトレーニングしたのではと想像する。

トレーニングさせる方法は https://github.com/xiph/rnnoise/blob/master/TRAINING-README に記述がある。

日本語での精度を上げるには日本語音声を使って再トレーニングをした方がよいのだろうなとか思う。

NoiseTorch

noise-suppression-for-voice を簡単に設定できるようにしたやつ。https://github.com/lawl/NoiseTorch/blob/master/module.go を見た感じ README にある手順を中で実行してるだけぽい。だから loopback を使う事による遅延もおきる。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment