DrumlogueでDelayプラグインを開発したときに遭遇した問題

先日Drumlogue用にDelayプラグインをリリースしました。その開発の過程で遭遇した問題点をメモしておきます。

(1)プリセットが使えない

DrumlogueのSDKでは、シンセ、ディレイ、リバーブ、マスターFXをほぼ同じAPIで開発することができます。シンセユニットでは、プリセットをユニット側で用意することができますが、これは現在のところシンセ以外のユニットでは有効ではないようです。

ディレイユニットでも、ユーザインタフェースを規定しているファイル(header.c)でプリセットを有効にすると、画面上ではプリセット選択が表示されるのですが、操作しても実際にはプリセットを選択することはできません。

プリセットに関するAPIはシンセ固有のAPIではなく、Essential functionに含められていますし、エフェクトをプリセットから選択するというのはけしてレアケースではないので、プリセット選択は何とか有効化してほしいところです。

(2)テンポ情報が揺らぐ

APIにはテンポが変化したときに呼び出されるコールバック関数が用意されており、この関数を通じて現在のテンポを取得することができます。Drumlogueには標準でテンポディレイがインストールされていますが、これらのディレイもこのAPIを使って実装されていると思われます。

__unit_callback void unit_set_tempo(uint32_t tempo) : テンポが変更された時に呼ばれます. テンポは固定小数点で, 上位16ビットがBPMの整数部分, 下位16ビットが小数部分(ローエンディアン)です. このハンドラは特に外部機器と同期している場合に頻繁に呼ばれる可能性があるため, テンポ変更を処理するときはCPU負荷をできるだけ下げないよう注意してください.

Drumlogueのテンポを外部MIDI同期にすると、このAPIで渡されるテンポ情報は、常に揺らいでいます。
テンポ同期のディレイがこの影響を受けると、ディレイタイムのつまみをいじったときと同様に音高が変化してしまいます。
こんな感じです。(NanoとStereo BPMディレイで実験)

MIDIのテンポ信号は、タイミング・クロックメッセージを4文音符あたり24回送受信することで伝達されるのですが、そのメッセージの受信タイムスタンプが正しく処理されていないのではないかと思います。

ちなみにPrologueなどKORG製品との同期については、SYNC IN/OUT経由で同期することで回避できます。

(3)Dry信号の量を単独でコントロールができない

前回の記事でもちょっと書きましたが、これはバグではないのですが、実用上どうなんだろうと思った点です。
Drumlogueでは、楽器の音信号がディレイ/リバーブ/マスターFXに送られる経路は下図のようになっています。

Dry信号は一番上の経路を通り、Master FXの前または後に送られます。
Wet信号はディレイとリバーブを通り、やはり、Master FXの前または後に送られます。
そして、両社は最後にミックスされます。

そうすると、まずディレイ/リバーブは自分でDryとWetをミックスせず、Wet信号だけを出力しなければなりません。
(ちなみに以前のlogue SDKでは、逆にDryとWetを必ず自分でミックスする必要がありました。)

ここで、ディレイ/リバーブについては、センドレベルとリターンレベルを設定できます。
しかし、Dry信号についてはレベルの設定がありません。

そうすると、Dry信号は元の音量から小さくできないので、Dry/Wetは1:1までは設定できますが、1:2というようにDryよりWetを大きくすることはできないんですね。無理やりやるとすると、Dry信号をPre Masterに入れて、MasterFxをローパスフィルタとかにして思い切りカットすることで、Wet信号の比率を高めるくらいしか手が無いです。
これは単純に不便だなあと思います。
Dry信号についても、音量のパラメータを追加すればいいと思うのですが。

なお上記3点は、GitHubのlogue SDKリポジトリにIssueとしてポストしておきました。

コメント