Pure Data→logue SDK変換がある程度安定してきましたので、hvccをlogue SDK(prologue/minilogue xd/NTS-1)で使うためのexternal generatorを以下のリポジトリで公開しました。
また、これを使って作成したオシレータのバイナリを何個か、記事末尾の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では利用できるオブジェクトに制限があります。利用可能なオブジェクトのリストは以下にあります。
また、利用可能であっても、[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パッチは以下のリポジトリにも置いてあります。
また、前回紹介した、Pure Dataからオシレータユニットを直接生成するWebアプリですが、VPSをレンタルして公開準備中です。この週末は無理でしたが、近々公開できると思います。
コメント