ボコーダーを作ってみる(5)


前回作成したミニマルなボコーダーをNTS-3に移植してみました。

NTS-3のGeneric FXプラグインとNTS-1 mkIIのOSCプラグインは、出力がモノラル(OSC)かステレオ(Generic FX)という違いがあるくらいで、基本的なスペックは同じです。そのため、基本的な処理はほとんど変わりません。

ただ、NTS-3のユーザインタフェースは、以下のような点がNTS-1 mkIIと異なります。

・ピッチを指定するデフォルトの手段がない
・ノブA、Bが無い
・使えるパラメータが少ない(全部で8個)

そのため、コードの書き換えは結構必要になりました。

使い方は、NTS-3のオーディオ入力に音声信号を入れてパッドで演奏してください。また、Dry/Wetミックスの設定を追加しました。これをデフォルトでDEPTHに割り当てています。

パッドX軸はデフォルトでピッチに割り当てていますが、Y軸は使っていません。下の例ではボコーダの後ろにディレイを配置し、ディレイのかかり具合をパッドのY軸に割り当てています。もちろんこれらの割り当てはあくまでデフォルト値で、ユーザが変更することが可能です。

NTS-3の開発の基本的な部分は「NTS-3 kaoss pad + logue SDKでオシレータを作ってみた 」の記事で書きましたので、ここでは割愛しますが、ピッチ(音高)の入力について少し解説を書いておきます。

ピッチのパラメータとしての値域は10ビット(0~1023)としました。このうち上位7ビットをMIDIノート番号、下位3ビットをノート間の中間のピッチに割り当てています。パラメータCHROMAがONのときは、中間のピッチは無視されます(0とみなします)。このパラメータの定義(header.cunit_header.common.params[0]は以下のようになっています。

{0, 1023, 0, 0, k_unit_param_type_none, 0, 0, 0, {"PITCH"}},

一方、このパラメータのマッピングの定義(header.cunit_header.common.default_mappings[0]は以下のようになっています。

{k_genericfx_param_assign_x, k_genericfx_curve_linear, k_genericfx_curve_unipolar, 288, 392, 328},

これは何を意味しているかというと、パッドのXの最小値では288、最大値では392がパラメータPitchに入力されることになります。デフォルトは328です。

この数字はそれぞれ

288 = 8 * 36 = C2
328 = 8 * 41 = F2
392 = 8 * 49 = C3

を表しています。つまり、パッドXはC2~C3を入力でき、デフォルトはF2になっています。

このマッピングの設定は、NTS-3のエフェクトモジュールのパラメータエディット画面から変更することができます。
たとえば、パッドXでF2~F4を鳴らすように変更するには、

Min: F2 = ノート番号41なので、41 × 8 = 328
Max: F4 = ノート番号65なので、65 × 8 = 520

に設定すれば良いわけです。

これを応用すると、一種類のユニットで和音を鳴らすことができます。

NTS-3では4つのユニットのルーティングをいろいろ設定でき、かつ同一のユニットを複数回使えます。そして、マッピングの設定は複数の同一ユニットにおいても個別に設定できますので、同じユニットを音域の設定をずらして並列に並べれば良いわけです。

例えば1つ目のユニットの音高のパラメータマッピングを「Pad X⇒C2~C3」、2つ目を「Pad X⇒E2~E3」、3つ目を「Pad X⇒G2~G3」とすれば、パッドのどこを押さえてもメジャーコードが鳴ります。

以下の例は、ユニットを「(A+B+C)×D」の形に接続するルーティングを用い、ABCにそれぞれこのボコーダーを割り当てて、デフォルト・3半音・7半音に音域をずらしたもので、マイナーコードを鳴らしています。

今回のコードは、NTS-1版と同じリポジトリの別ブランチに入れてあります。

simple_vocoder/README.md at nts-3 · boochow/simple_vocoder
An example implementation of 8-band vocoder using logue SDK - boochow/simple_vocoder

バイナリはこちらに置いておきます。

コメント