2016年7月1日金曜日

Ubuntu+PulseAudioで音量にリミッターを掛ける

背景
日頃音量が小さいアプリに合わせてマスターボリュームも大きくなりがちになります。そこに音量が大きいアプリが最大音量で鳴れば耳を痛めてしまいます。そこで出力されるマスターボリュームにリミッターを掛けることにします。

方針
PulseAudioにリミッターのプラグインを読み込ませます。リミッターにはswh-plugins内のfastLookaheadLimiterを使用します。プラグインの規格はLADSPAです。

まずはswhプラグインを導入し
sudo apt install swh-plugins

ファイル ~/.pulse/default.pa を作成し以下のような内容にします。
.include /etc/pulse/default.pa

load-module module-ladspa-sink sink_name=limiter label=fastLookaheadLimiter  plugin=fast_lookahead_limiter_1913 control=0,-15,0.5
set-default-sink limiter

pluginはインストールされたsoファイルの名前です。
labelはそのファイル内で読み込むプラグインの名前です。
sink_nameは好きな名前をつけましょう。
controlの最初の引数は事前に音量を上げ下げするパラメータらしいですが0でいいでしょう。
次の引数がリミッターです。-15dBを設定してみました。
3番めの引数が音量を元に戻すまでの時間sです。長めでも大丈夫でしょう。0.01~2s

結果
きちんと動作しました。しかし音量変更時にノイズが乗ってしまいます。
このプラグインは5msの遅延が入るらしいですが体感できませんでした。

その他
default.paに記述しなくてもpacmdで直接試すことができます。
パラメータの範囲は直接ソースを見たほうが早いです リミッターは 0 ~ -20dBの範囲です。

https://gist.github.com/ion1/5890413
https://github.com/LMMS/lmms/blob/master/plugins/LadspaEffect/swh/fast_lookahead_limiter_1913.c
http://plugin.org.uk/ladspa-swh/docs/ladspa-swh.html#tth_sEc2.39

2020/10月頃から起動時にリミッターが読み込まれなくなりました。今は手動で pulseaudio -kD して読み込んでいる状態です。 

2022年 現在はxubuntuのSettings Session and Startup に pulseaudio -kD を登録してリセットしています。