NTS-3 kaoss pad + logue SDKでオシレータを作ってみた

NTS-3、プログラムを作れるだけでもかなり面白くて、いろいろいじってあっという間に週末が終わりそうになっていますが、SDKのほうもNTS-3のAPIを使ってみました。

以前NTS-1 mk2用に作ったシンプルなオシレータをNTS-3用に焼き直しただけで、正直NTS-1 mkIIとそれほど大きな違いはないだろうと思っていたのですが、いくつか気づきをまとめておきます。(ちなみにNTS-1 mkIIのファームウェアも、v1.2にアップデートされていろいろバグが解消されていますので、更新をお勧めします。)

NTS-1 mk2でオシレータを作ってみた(追記あり)
NTS-1 mk IIではSDKがアップデートされています。SDKの概要は前回の記事に書きましたが、今回は試しにオシレータを作ってみました。 以前、旧NTS-1とdrumlogue用に作った、以下のシンプルなオシレータを、mk2に移植してみ...

とりあえず作ってみたのが以下のコードです。オシレータそのものは上記の記事とほぼ同じですが、パッドのX軸をピッチ、Y軸をPWM、FX DEPTHを入力信号とのミックス比率にしています。また、パッドに割り当てないパラメータとして、音程を半音単位にジャンプするかスムーズに変更するかを設定するChromaというパラメータを用意しました。

header.cは全体は省きますが、パラメータの記述は以下のようになっています。

主要なコードが入っているeffect.hは以下の通りです。

コードとして意味があるのは65行目からの波形を生成している部分と、新しくAPIに加わったイベントハンドラtouchEvent()の109行目の部分です。

パラメータは、setParameter()の中で必要な計算をしておくほうが常道ですが、今回はすべてProcess()の中で計算しています。

setParameter()はパッドを触っているかどうかを知ることはできません。タッチしている間だけオシレータの音を出すように、touchEvent()でオンオフ状態を取得して、変数noteon_を設定してProcess()の中で使っています。

パッドのY軸に割り当てているPWMは、パラメータの定義上は0%~100%の範囲で設定可能ですが、マッピングのデフォルト設定で、最小値を50%に設定しています。これはデフォルトの設定ですがユーザがマッピングを変更することは可能です。このあたり、なかなか柔軟で良いなと思いました。

また、出力する信号は入力する信号とミックスし、そのミックス比率はFX DEPTHで設定できるようにしています。

気づいたことなど

前掲のコードでは、Process()はパルス波を生成します。その振幅幅ですが、NTS-1 mkII用の実装では-1.0~1.0としていました。しかし、NTS-3ではこれだとかなり大きな音になります。

そのため、上記のコードでは1/10の-0.1~0.1としています。これくらいが入力音声とのバランスではちょうどいい感じです。(デフォルトのグローバル設定の場合です。グローバル設定で入力音声のゲインは変更できます。)

入力信号とのミックスですが、パッドを(HOLDモードにせずに)タッチしていない状態では、入力信号は100%の音量で再生されるようです。上のコードでは

            out_p[0] = dry * in_p[0] + wet * sig;
            out_p[1] = dry * in_p[1] + wet * sig;

としていますが(常にdry + wet = 1.0)、実際には

・タッチしている間: 出力音声はout_p[0,1]
・タッチしない場合: 出力音声はin_p[0,1] + out_p[0,1]

となるようです。これはAPIというより、Kaoss Padという製品の仕様が以前からそうだった気がします。
ただし組み込みの特殊なエフェクト「Silence」は、タッチの有無にかかわらず入力音声をミュートします。

上のコードでは、CHROMAパラメータをONにすると、パッドの入力が一応半音ごとの音程にスナップされます。
しかし、実際には半音ごとではなくスケールを指定したいところです。また、全音階をパッドで入力するのは困難なので、下限値と上限値も音程で設定したいところです。

このような処理を実装したコードが、KORG DIY CLUBさんから提供されています。以下の「x-to-note example」ですが、NTS-3でオシレータを実装するなら必見と言えます。むしろなぜSDKに入れなかったんだろうというレベルです・・・。

KORG Examples
The logue SDK is a software development kit and API that allows to create custom oscillators, synths, and effects for th...

コメント