ALSAでLADSPAプラグインを使用する
ALSAのPCMプラグインの中に、LADSPAプラグインを扱う「ladspa」という種類がある。これを使用することで、ALSA経由で音を出す際にフィルタがかけられる*1。
(2007/6/29)alsa-libのバージョン1.0.14_rc4を含む、それ以降のバージョンにおいて、LADSPAプラグインの使用に不具合が出るようになっていて、再生ができない。1.0.14_rc3を使用すれば問題ないが、今後、注意が必要。
(2007/9/30)上記不具合は、alsa-lib 1.0.15_rc2の時点では解消された。
設定例(仮)
ファイル名: ~/.asoundrc
pcm.test { type softvol # softvolを使用 slave.pcm "plug:ladspa-test" control { name "PCM Playback Volume" card 0 } } pcm.ladspa-test { # CAPS-plugins (caps.so) type ladspa slave.pcm "plug:dmix:0" # plugでdmixにつなげる(別のladspaを経由してもOK) playback_plugins [ { id 1773 # ラベルで指定するのであれば「label Eq」と記述 input { # 31 Hz | 63 | 125 | 250 | 500 | 1k | 2k | 4k | 8k | 16k # controls [0 0 0 0 0 0 0 0 0 0] # -48 ... 0(default) ... 30 controls [8.5 8.5 7.5 5 -2 -4 -2 7 9 10] # 好みに応じて設定 } } ] }
この設定では、デフォルトのPCMデバイスを上書きしているわけではないので、実験するためには、ALSAのPCMデバイス名を明示的に指定する必要がある。
$ mplayer -ao alsa:device=test /path/to/audiofile
複数のプラグインを組み合わせる
1つの「ladspa」なPCM定義の中に複数のプラグインの記述をすることは可能だが、個人的にはPCMデバイス当たり1プラグインにして、次々とつなげてゆく形にしたほうが便利と思い、以下のような設定を作成した。
ファイル名: ~/.asoundrc
pladspa.slave.pcm "plug:ladspa-1773-Eq:ladspa-1950-G2reverb:plug:dmix:0" #pladspa.slave.pcm "plug:ladspa-1773-Eq:plug:dmix:0" pcm.pladspa { type softvol # softvolを使用 slave.pcm { @func refer name pladspa.slave.pcm # pladspa.slave.pcmの値をslave.pcmに指定 } control { name "PCM Playback Volume" card 0 } } pcm.ladspa-1773-Eq { # CAPS-plugins (caps.so) @args [ SLAVE ] # 引数SLAVEを取る @args.SLAVE.type string type ladspa slave.pcm $SLAVE # 引数名が次のPCM名になる playback_plugins [ { id 1773 input { # 31 Hz | 63 | 125 | 250 | 500 | 1k | 2k | 4k | 8k | 16k # controls [0 0 0 0 0 0 0 0 0 0] # -48 ... 0(default) ... 30 controls [8.5 8.5 7.5 5 -2 -4 -2 7 9 10] } } ] } pcm.ladspa-1950-G2reverb { # REV-plugins (g2reverb.so) @args [ SLAVE ] @args.SLAVE.type string type ladspa slave.pcm $SLAVE playback_plugins [ { id 1950 input { # Room size | Reverb time | Input BW | Damping # | Dry sound | Reflections | Reverb tail # controls [80 10.5 0 0 0 0 0] controls [150 1 0 0 0 -15 0] } } ] }
(2007/11/23)「ladspa.slave.pcm」が定義されているとAudacity 1.3.4が
$ audacity audacity: pcm_params.c:187: snd_pcm_hw_param_get_min: Assertion `!snd_interval_empty(i)' が失敗しました.
となってアボートするため、「ladspa」の部分を「pladspa」に変更したところがある
下は、MPlayerを用いた実験例。
$ mplayer -ao alsa:device=pladspa (ここに適当な音声ファイルの場所を指定)
このような形で書いておくと、使用するプラグイン構成を変更したいときにslave.pcmをいちいち書き換えないで、簡単に管理できる。