Pure Dataからlogue SDK用コードを生成するhvcc用ジェネレータを公開しました

Pure Data→logue SDK変換がある程度安定してきましたので、hvccをlogue SDK(prologue/minilogue xd/NTS-1)で使うためのexternal generatorを以下のリポジトリで公開しました。

GitHub - boochow/hvcc_loguesdk_v1
Contribute to boochow/hvcc_loguesdk_v1 development by creating an account on GitHub.

また、これを使って作成したオシレータのバイナリを何個か、記事末尾のURLで無料公開中ですので、ちょっと試してみたいという方はそちらもご覧ください。

使い方

(1)logue SDKのインストールは必須で、hvccはpip3でインストールが必要です。
(2)このリポジトリをクローンしてloguesdk_v1.pyのあるディレクトリを以下のような感じで環境変数PYTHONPATHに加えます。

export PYTHONPATH=$PYTHONPATH:/home/username/hvcc_loguesdk_v1

(3)変換するPure Dataパッチを用意します。dac~はモノラルにする([dac~ 1])ことに注意してください。ステレオだとエラーになります。
(4)以下のようにして変換します。output_dirには出力先のディレクトリ、nameはオシレータの名前(任意)を指定してください。-vはverboseオプションで、つけなくても良いです。

hvcc mypatch.pd -G loguesdk_v1 -o output_dir -n name -v

(5)変換に成功すると、output_dir/logue_unit/にlogue SDK用のプロジェクトができますので、そこにcdします。

cd output_dir/logue_unit

(6)このlogue_unitをlogue SDKの特定の機種用ディレクトリの中(logue-sdk/platform/nutekt-digital/など)にコピーしてmake installするか、以下のように利用するプラットフォームをオプションで指定してmakeします。

make PLATFORMDIR=~/logue-sdk/platform/nutekt-digital/ install

(7)これでlogue_unit/name.ntkdigunitというファイルができるはずですので、ライブラリアンでシンセに転送します。

変換するPure Dataパッチですが、hvccでは利用できるオブジェクトに制限があります。利用可能なオブジェクトのリストは以下にあります。

Supported vanilla objects
The heavy hvcc compiler for Pure Data patches. Updated to python3 and additional generators

また、利用可能であっても、[noise~]のように、logue SDKのメモリサイズの制約から利用が難しいものもあります。(ノイズの生成については後述します。)

logue SDKからパラメータを受け取る

シンセ側からピッチ情報などのパラメータを受け取るのは[receive]オブジェクトを使いますが、その場合は[r variableName @hv_param]というように修飾子@hv_paramを付与します。

また、以下の変数名は予約済みです。これらを[receive]オブジェクトで読み取ることで、シンセ側の情報を受け取ることができます。

・pitch  ピッチ情報(単位:Hz)
・pitch_note  ピッチ情報(単位:MIDIノート番号)
・shape  Shapeノブの値(0~1023)
・shape_f  Shapeノブの値(0.0~1.0、追加でmin、max、defaultを指定可)
・alt  Shift+Shapeノブの値(0~1023)
・alt_f  Shift+Shapeノブの値(0.0~1.0、追加でmin、max、defaultを指定可)
・slfo Shape  LFOの値(-1.0~1.0 ただしNTS-1では0.0~1.0)
・noteon_trig  MIDI NoteOn時にbangを受け取ります。
・noteoff_trig  MIDI NoteOff時にbangを受け取ります。

以上に挙げた以外の変数名が修飾子@hv_paramを持つ場合、それらはlogue SDKのパラメータとして認識されます。ただしlogue SDKの制約上、使えるパラメータは6つまでで、それを超えるとエラーになります。

パラメータには、追加で以下のような設定を行うことができます。

[r varName @hv_param min max default]
パラメータの最小値、最大値、デフォルト値を指定します。
最小値は-100~100の範囲、最大値は0~100の範囲での指定が可能です。
なお、デフォルト値はオシレータ初期化時に利用されますが、logue SDKとしてはデフォルト値をサポートしていないのでシンセ側から設定する際にはデフォルト値は反映されず、ゼロがデフォルト値になります。

[r varName_f @hv_param]
変数名の末尾が”_f”の場合、パラメータの値として整数の代わりに浮動小数点数を受け取ります。
min、max、defaultを指定することができます。指定が無ければmin=0.0、max=1.0です。
シンセサイザのEditメニューの表示には、”_f”は表示されません。

[r _N_varName @hv_param]
シンセサイザのEditメニューでのパラメータの並び順はデフォルトではアルファベット順ですが、変数名の先頭に”_N_“を付与することで、並び順を制御できます。Nは1から6までで、指定した番号にそのパラメータが割り当てられます。
シンセサイザのEditメニューの表示には、”_N_“は表示されません。

ノイズ生成

名称の末尾が”_r”となっているテーブルに@hv_table修飾子を付与すると、そのテーブルは常時ホワイトノイズで上書きされます。
例えば[table noise_r 16 @hv_table]はサイズ16のテーブルですが、noise_rはどの値も-1.0~1.0のランダムな値になります。

これは[noise~]を使ってメモリを食われてしまうのを回避するための苦肉の策です。テーブルをノイズで埋めるのはlogue SDKのosc_white()を使っていますが、この処理は軽くないので、テーブルサイズは必要最小限(prologue/minilogue xdでは16、NTS-1では64で足りるはずです)にしてください。

サンプル

サンプルとして、logue SDKでビルドできることを確認したPure Dataパッチと、prologue/minilogue xd/NTS-1用にビルドしたバイナリを以下で配布しています。

Pure Data Oscillators for prologue, minilogue xd, NTS-1
This is a collection of user oscillator units for the KORG prologue, minilogue xd, and NTS-1.Each ocillator is written i...

同じPure Dataパッチは以下のリポジトリにも置いてあります。

GitHub - boochow/loguesdk_hvcc_examples
Contribute to boochow/loguesdk_hvcc_examples development by creating an account on GitHub.

また、前回紹介した、Pure Dataからオシレータユニットを直接生成するWebアプリですが、VPSをレンタルして公開準備中です。この週末は無理でしたが、近々公開できると思います。

コメント