試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

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をいちいち書き換えないで、簡単に管理できる。

*1:プラグインの種類や数によっては、多少の遅延とCPU負荷がかかる