2017/08/10

LADSPA Compressor

2年振りぐらいだろうか、超久々にプログラムしてみた。C言語の仕様も忘れかけている・・・・ 今回はAudacityで使う目的で、7年以上前にJavaで作ったコンプの移植。LADSPA仕様を十分に理解せず作っているので、怪しい部分もあるが、とりあえず動くようになった。

わざわざ移植した理由としては、通常のコンプ(Audacity付属やVSTなど)は馴染めないから。 コンプによって掛かり方がずいぶん違うし、パラメーターの名称や数字と結果の関係が不明なものが多い。あと、波形がかなり崩れるという問題が大きい。それがコンプらしい音ということなのだが、歪むのはいただけない。そこで、レイテンシーはあるが歪まないコンプを作ってみた。Audacityで使うなら、リアルタイム処理する必要はないので問題ない。アタックタイムはなく、常時0という状態。実際には0よりも手前から効きはじめる。先読みなので、こういう技が使える。リリースは直線ではなく、タンジェントカーブになっている。

プログラムは以前のようなやる気はないので、いろいろ手抜きしている。パラメーターはアタックとゲインを廃止した。レシオは1~20までとした。改良点としては、スレッショルドをdBではなくリニアにした。これはAudacityでは波形を見て設定するので、リニアの方が視覚的にわかりやすいから。インターフェイスは以下のように簡素。そのうちアタックタイムの調整が欲しくなったら追加するかもしれない。

下は上段が元波形で、下段がスレッショルド0.6、レシオ20、リリース100msecぐらいで適用した波形。波形が崩れていないのが確認できると思う。

通常コンプとの違い

同じような設定で試してみた。上段が今回作ったもので、下段が標準的なもの。通常のコンプは、未来予測はできないのでアタックを鋭くすると、最初の波形が崩れて尖ってしまう。これが歪に感じられる。

ソースコードは、かなりごちゃごちゃしてしまったので、整理してから公開しようと思う。

sound programming 目次