Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save buzztaiki/808f67d3963c3dad19c54a01b12fe0a1 to your computer and use it in GitHub Desktop.
Save buzztaiki/808f67d3963c3dad19c54a01b12fe0a1 to your computer and use it in GitHub Desktop.

WaylandとPipeWireとEasyEffectsでノイズ除去する

Linux のノイズ除去まわりメモ の Wayland 版。Wayland の場合画面共有とかの都合上 PipeWire を使っているだろうから、それを前提にする。試してないけど X11 + PipeWire でも同じ設定で動きそうではある。

音声フィルタには EasyEffectslibrnnoise を使う。PipeWire でも一部の PulseAudio のフィルタは使えるけど、EasyEffects の方が色々できて良さそう。また、NoiseTorch とかより素性よさそう (個人の感想)。また、普通に GUI から設定できるので、画面ポチポチしてるだけもわりと何とか使えそう。

2022-04-22 追記

原因はよく分からないけど、再起動した後とか EasyEffects の Souce と各アプリがうまく繋がってくれない事がままあって、ノイズ除去に EasyEffects を使うのはやめた。PipeWire#音声のポストプロセッシング - ArchWiki に従って、NoiseTorch か Noise suppression for voice を使うのが良いと思う。実際 Noise suppression for voice を使うようにしたらわりと安定した (気がする)。

PipeWire は ladpsa を source にも使えるから、以前書いた遅延の問題も起きない。NoiseTorch もちゃんと PipeWire 対応してる。どちらも librnnoise を使ってるから、品質に関しては殆んど同じだと思う。

仕組み

EasyEffects は専用の仮想デバイスが入出力用に一つずつ作られて、物理デバイスとアプリがその仮想デバイス経由で繋がる形になる。その間に EasyEffects のフィルタプラグインが各種 PipeWire フィルタとして配置される。つまり

物理マイク -> EasyEffects Filters -> EasyEffects Sink -> アプリ
アプリ -> EasyEffects Source -> EasyEffects Filters -> 物理スピーカー

Helvum を使うと、どう繋がってるかが視覚化されておもしろい。

自動起動

systemd で上がってくる訳じゃないので、何らかの方法で自動起動させる必要がある。 EasyEffects の設定で「ログイン時にサービスを開始」を有効にすると自動起動する。

または以下を設定を作る:

~/.config/autostart/easyeffects-service.desktop:

[Desktop Entry]
Name=EasyEffects
Comment=EasyEffects Service
Exec=easyeffects --gapplication-service
Icon=easyeffects
StartupNotify=false
Terminal=false
Type=Application

全てのアプリで有効にする

EasyEffects の設定で「すべての入力/出力を処理」を有効にする。

または以下を実行する:

$ gsettings com.github.wwmm.easyeffects process-all-inputs true
$ gsettings com.github.wwmm.easyeffects process-all-outputs true

マイクからの入力をノイズ除去する

librnnoise を使う。かなりちゃんとしたノイズ除去ができる。

[入力]>[プラグイン]>[プラグインを追加]から「ノイズリダクション」を追加する。変更は次回再起動時にもそのまま使える (gsettings に保存される)。

または以下のようにプリセットの設定を作ってから:

~/.config/easyeffects/input/noise-reduction.json:

{
    "input": {
        "blocklist": [],
        "plugins_order": [
            "rnnoise"
        ],
        "rnnoise": {
            "input-gain": 0.0,
            "model-path": "",
            "output-gain": 0.0
        }
    }
}

以下を実行してこのプリセットをロードする:

$ easyeffects -l noise-reduction

読みこんだプリセットは gsettings に永続化される。

動作確認

[入力]>[プラグイン] の右下に 🎙️ → 🔈 みたいなのがあるから、それを有効にすると入力が出力にループバックされる。

または PipeWire 同梱の pw-loopback を使う。

もっと色々やる

Community Presets というものがある。そこからリンクされている、An EasyEffects preset created for input devices (intended for Microphones) が、Tune up your sound with PulseEffects: Microphones - Fedora Magazine をベースにしていて、なかなか頑張ってる。耳は良くないので、正直効果はよくわからない。

使う場合は画面からインポートするか、こんな感じで取り込む。

$ curl "https://gist.githubusercontent.com/MateusRodCosta/a10225eb132cdcb97d7c458526f93085/raw/5219f20faeaab9ac069cfe93b1d6fbdd82301dfe/Improved%2520Microphone%2520(Male%2520voices,%2520with%2520Noise%2520Reduction).json" > ~/.config/easyeffects/input/improved-microphone.json
$ easyeffects -l improved-microphone

PipeWire だけでノイズ除去をしたい場合

RNNoise example を参考にする。 PipeWire は PulseAudio と違って ladspa を source に使えるから、遅延なしで使う事ができそう (使えた)。

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