以前から、Windowsではなく、音がよいとされているLinuxにて録音システムを作りたいと思っていて、先ごろよいシステムができたので、記事にします。
LinuxOSには、デスクトップ環境が軽快で、シンプルなLXQTを使ったLubuntu(ルブンツ)とUbuntuStudio インストーラー、そして noise-suppression-for-voice を使います。Lubuntuのインストール方法や日本語化については公式サイト等をご覧ください。
・Lubuntuのインストール
公式サイトからイメージをダウンロードし、USBメモリー等に、起動メディアとして書き込み、
PCにインストールしてください。
Lubuntu 24.04はWaylandには対応していませんが、次のバージョンで対応するそうです。
・UnubtuStudio Installer をインストール
端末ターミナルを起動して、UbuntuStudio installer をインストールします。
sudo apt update
sudo apt install ubuntustudio-installer
デスクトップかスタートメニュー等からUbuntuStudio installer アイコンを探し起動します。
グラフィック関連のソフトやオーディオ関連のソフトなど、選んでインストールできるようになっていますが、ここでは録音システムに特化した環境にしたいので、
- linux-lowlatency
- ubuntustudio-lowlatency-settings
- ubuntustudio-audio
を最低限、選んでおきます。
Modify Installed Package Selection をクリックしてインストールします。
・noise-suppression-for-voiceをビルドする
ビルドに必要なツールをインストールしておきます。
sudo apt install git
sudo apt install cmake
sudo apt install ninja-build
sudo apt install g++
sudo apt install pkg-config
sudo apt install juce-tools
公式Githubサイトへアクセスしソースコードをダウンロードします。
グリーンの「CODE」と書かれたところをクリックし、httpsの項目を確認し文字列をコピー。
任意の場所でターミナルを開いて(ここではホームディレクトリー)に以下のコマンドでgitファイルをダウンロードします。
git clone https://github.com/werman/noise-suppression-for-voice.git
sudo cmake -Bbuild-x64 -H. -GNinja -DCMAKE_BUILD_TYPE=Release
ビルドファイルができたら、ビルド実行。
sudo ninja -C build-x64
注意 システムが32ビットの場合は、ビルドのコマンドが変わります。公式ページをご覧ください。
生成されたプラグインファイルをシステムにディレクトリーを作ってからコピーします。
ディレクトリーを作成
sudo mkdir /usr/local/bin/linux-rnnoise
コピー実行 build-x64にあるbinの中身を作成したディレクトリーにコピーする
sudo cp -a /home/[ユーザー名]/noise-suppression-for-voice/build-x64/bin/* /usr/local/bin/linux-rnnoise
・Pipewire用のコンフィグファイルを作る
mkdir /home/[ユーザー名]/.config/pipewire/pipewire.conf.d
プラグイン用の設定をエディタで作成し設定を貼り付けます。
(エディタは好みのものを使ってください。例では vim を使っています)
vim /home/[ユーザ名]/.config/pipewire/pipewire.conf.d/99-input-denoising.conf
貼り付ける設定
context.modules = [
{ name = libpipewire-module-filter-chain
args = {
node.description = "Noise Canceling source"
media.name = "Noise Canceling source"
filter.graph = {
nodes = [
{
type = ladspa
name = rnnoise
plugin = /path/to/librnnoise_ladspa.so
label = noise_suppressor_mono
control = {
"VAD Threshold (%)" = 50.0
"VAD Grace Period (ms)" = 200
"Retroactive VAD Grace (ms)" = 0
}
}
]
}
capture.props = {
node.name = "capture.rnnoise_source"
node.passive = true
audio.rate = 48000
}
playback.props = {
node.name = "rnnoise_source"
media.class = Audio/Source
audio.rate = 48000
}
}
}
]
注意
pipewireがバージョン0.3.45未満の場合
以下の場所に設定を貼り付けます。
/usr/share/pipewire/pipewire.confを
/home/[ユーザー名]/.config/pipewire/pipewire.confにコピーし、以下の設定を既に存在する
context.modulesの場所に貼り付けます。
・設定の編集と確認
貼り付け後、/path/to/librnnoise_ladspa.so の部分をシステムにコピーしたプラグインの場所に書き換えます。
/path/to/librnnoise_ladspa.so → /usr/local/bin/linux-rnnoise/ladspa/librnnoise_ladspa.so
ステレオ出力が必要な場合は noise_suppressor_mono の部分を noise_suppressor_stereo に書き換えます。
実際には、声の収録はモノラルで問題ないのでそのままにします。ステレオにすると2倍のリソースを消費するので、たとえマイクがステレオを収音し出力するとしても意味がないということが公式に書かれていました。
・プラグインの初期パラメーターを設定します。
"VAD Threshold (%)"= 50.0, しきい値
RNNOISEでは、入力された音が、音声か雑音かを確率で数値化します。しきい値を設定することで、出力するかしないかを設定します。公式では85%~95%で問題ないそうですが、演技や表現を伴った音声の場合、あまり数値が高すぎると、息遣いや呼吸音は聞こえなくなるかもしれません。僕はとりあえず初期値の50.0で使っています。
"VAD Grace Period (ms)" = 200
最後の音声検出後、出力を消さない期間を設定します。公式では単語や文の終わりが切り取られる場合に役立つとあります。実際のこの初期値200で運用すると、「○○だった。」と発話するとき、最後の「た」が消えることが頻繁にあります。しっかり発音すれば消えにくいですが、まぁ、よく消えますねぇ。400ぐらいでもいいかもしれません。
"Retroactive VAD Grace (ms)" = 0
VAD Grace Periodに似ていて、言葉の終わりでなく始まりに利いてくるようです。設定すると、遅延が発生するそうです。しゃべりはじめが聞こえなくなるんでしょうか。ここは初期値の0で問題ないでしょう。
設定が終わったら、保存してエディタを終了します。