logue SDKで20年前のパブリックドメインのリバーブ「Freeverb」を動かしてみる


一か月ほど前に、シュレーダーのアルゴリズムを使ったリバーブを作りましたが、あまり品質は良くありませんでした。今回は、20年ほど前に作られた「Freeverb」と言う public domain のリバーブをlogue SDKで動かしてみました。


Freeverbも、基本はシュレーダーのアルゴリズムを使っています。 ただし、コムフィルタは8個、オールパスフィルタは4個使われており、入出力もステレオになっています。またコムフィルタにダンピングファクターが追加されており、この値が大きくなると音の減衰が早まります。

右のチャンネルは、すべてのフィルタで遅延が左チャンネルよりわずかに(23サンプル分)加算されており、そのため出力信号は左右のブロックで異なります。それらを異なる重みづけでミックスして、左右の出力を生成しています。

上の図の下半分がコムフィルタの中身です。\(Z^{-M}\)は長さが\(M\)のディレイバッファを表します。ディレイバッファの出力と、\(Z^{-1}\)の出力を加算していますが、この\(Z^{-1}\)は長さ1のディレイです。これと\(Z^{-M}\)の値を加算しているので、連続した2つのサンプルの平均を取っていることになります。その結果、値を急激に変化させにくくなる、つまり高周波成分が抑制されます。この抑制の度合いはダンピングファクターで制御できます。

Freeverbの詳細はこちらのページが詳しいです。

Freeverb
Freeverb
Freeverb | Physical Audio Signal Processing

また、Freeverbのソースコードはこちらのサイトからダウンロードさせていただきました。

Freeverb3 - Original Freeverb / Similar Projects
Freeverb3 Freeverb Reverb Impulse Response Processor and XMMS audacious plugins

logue SDKへの移植ですが、最初は、フィルタのパラメータを貰ってきて、前回作ったシュレーダーのリバーブを拡張して作ろうかと思っていたのですが、ソースコードを見ると、そのままlogue SDKで動かせそうでしたので、logue SDKの APIを使う部分だけを新たに作成しました。元のソースコードがリバーブ本体とVSTプラグインの部分に分かれていたので、VSTプラグインの部分をlogue SDKに置き換えるような形です。

操作ノブとパラメーターの対応は、Timeノブがルームサイズ、Depthノブがタンピングファクタ、Shift-Depthがドライ/ウエットの調整になっています。
ソースコードはこちらに置いてあります。

GitHub - boochow/freeverb-logue: Korg logue SDK port of Freeverb
Korg logue SDK port of Freeverb. Contribute to boochow/freeverb-logue development by creating an account on GitHub.

基本的にはほとんど何も苦労せずに動作しましたが、残念ながら処理負荷が大きすぎるため、他のエフェクトと同時に動作させられません。prologueではmod fx、minilogue xdとNTS-1ではディレイをオフにする必要があります。

なお、こちらのページにはFreeverbのオールパスフィルタの実装には、誤りがあると指摘されています。オールパスフィルタがコムフィルタのような動作をしており、金属的な響きを付加するようです。確かにそのような響きが感じられますが、Freeverbはある意味歴史的なコードでもあるので、上述のリポジトリではオリジナルのコードをそのまま残してあります。

コメント