FreeverbをdrumlogueとNTS-3に移植しました(そしてSDKのバグ発見)


以前、パブリックドメインのリバーブであるFreeverbをlogue SDKを使って移植しましたが、先日、ドイツの方から「drumlogueに移植できますか?」というお問い合わせがあったので、やってみました。また、NTS-3にも移植していなかったのでついでに移植しました。

こちらがFreeverbをlogue SDKに最初に移植したときの記事です。NTS-1では動作しましたが、minilogue xdやprologueでは若干プロセッシングパワーが不足しており、他のエフェクタと共存させないほうがいい感じでした。その後、NTS-1 mkIIにも移植しましたが、こちらは処理能力は問題ありませんでした。

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

drumlogueへの移植では、

・RAMの心配をしなくていい(最大32MBも使える)
・CPUがパワフルなので演算量の心配をしなくていい
・パラメータが24個使える

といった利点があり、オリジナルのVST用のFreeverbのコードをほぼそのまま(UI部分の修正だけで)動かすことができます。ちなみに、logue SDKのAPIはVST SDK2のAPIと非常に似せて作られていますので、drumlogueは全logueシリーズの中で最もVSTからの移植がしやすい機種だと思います。

オリジナルのFreeverbには、以下の6つのパラメータがありました。

・Roomsize(遅延時間)
・Damp(減衰)
・Width(広がり感)
・Freeze(残響音の変化を止める)
・Wet(残響音)
・Dry(入力音)

最初のlogue SDK版では利用できるパラメータ数の制約から、このうちRoomsize、Damp、Wet/Dryの3つのパラメータに絞っていましたが、drumlogueでは、WetとDryを除いた(リバーブはセンド・リターン型のエフェクトとなっているため)4つのパラメータを実装しています。

drumlogue版のコードは、専用のブランチを作ってあります。バイナリはリリースページにあります。

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

次にNTS-3 kaoss pad版ですが、こちらは

・NTS-1 mkIIと同様、メモリ確保の問題があるので、NTS-1 mkII版をベースにする
・パラメータを8個利用でき、かつインサート型のエフェクトとなるため、6つのパラメータ全てを実装する

という方針で移植しています。NTS-3とほぼ同じSDKを使うNTS-1 mkIIで動作済みなので、こちらもあまり手間はかかりませんでした。

コードは同じリポジトリの別ブランチに置いてあります。バイナリは同じくリリースページにあります。

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

なお、この移植の過程で、バグを2件見つけました。

1つ目はNTS-1 mkIIおよびNTS-3におけるパラメータの小数表示に関するもので、二進モード、十進モードともに表示がおかしいです。本来は、パラメータの実際の値を\(n\)、ヘッダファイルにおけるfracパラメータの数値を\(k\)とすると、ディスプレイの表示は

二進モード: \(n / 2^k \)
十進モード: \(n / 10k \)

となるはずなのですが、そうなっていません。二進モードの表示は\(k>3\)のときおかしいのですが、ちょっとロジックがよく分かりませんし、十進モードは\(n / 10^k \)が表示されます。

2つ目は、NTS-1 mkIIに関するものです。NTS-1 mkIIへの移植版は、NTS-1版をベースにしていたため、パラメータが3つになっていたのですが、これをNTS-3と同様に6つに拡大しようとしたところ、4番目以降のパラメータの変更がAPI側に通知されないことが分かりました。

以前、mod fxとrev fxについて、追加パラメータ(メニューから設定する、4番目以降のパラメータ)が表示されないというバグがあり、これはFirmware V1.2で修正されたのですが、今度はこのパラメータの変更がAPIから通知されないという問題が(mod fxは問題なく、rev fxのみ)起きていると思われます。【2024/9/12追記:Firmware v1.3で修正済みです。また、NTS-1 mkII版Freeverbに、上記NTS-3版と同じパラメータを持たせました。コードとバイナリは同じGitHubリポジトリに置いてあります。】

以上の2件はlogue SDKのIssuesにポストしてあります。

[NTS-1 mkII / NTS-3] The behavior of the frac parameter in header.c is incorrect · Issue #118 · korginc/logue-sdk
Describe the bug The number shown on display differs from what the API documents say. Therefore, the behavior is also di...
NTS-1 mkII: changing the revfx additional parameters won't cause unit_set_param_value() call · Issue #119 · korginc/logue-sdk
Describe the bug Additional parameters of revfx are shown and can be changed on display, but unit_set_param_value() is n...

コメント