NTS-1 mkII/NTS-3のPure Data対応の進捗状況など

気がつけば、1カ月ほどブログの更新が空いてしまいました。この間に取り組んでいた内容を、少し日記風にまとめておきたいと思います。

まずは、AIのDevinについてです。
以前作成した、prologue用のプログラムをminilogue XD向けに変換するPythonスクリプトがあるのですが、これをもとにしてWebサービスを作る、という作業をDevinにお願いしてみました。

少し時間はかかったものの、想定よりも完成度の高いものが出てきました。細かいところをこのまま直すか、このまま公開してしまうか、迷っているところです。技術的には、Flaskを使うよう指示しており、元のスクリプトも、ファイルを読み込んで変換し、書き出すという比較的単純な処理のため、難易度は高くありません。それでも、きちんと動作するものをAIが自動で組み上げたことには、正直少し驚きました。

続いて、以前から取り組んでいる「Pure Dataからlogue SDK用のオシレータ生成」についてです。

NTS-1 mkII向けのオシレータの生成については、HVCCのexternal generatorが、NTS-1 mkII向けにも動作するようになりました。現在は、logue SDK版のために用意したPure Dataのサンプルから、NTS-1 mkII用のオシレーターをビルドできるようになっています。

この移植はそれほど難しくはありませんでした。旧logue SDK用のオシレータのコードは生成できており、NTS-1 mkIIはその直系のAPIを使っています。しかもハードウェア的なリソースが強化されているので、最適化は必要ありません。ただ、NTS-1 mkIIでは「オーディオ入力をオシレーター内部で扱う」機能が新しく追加されているため、そのあたりのコードは追加しました。

ちょっと悩んでいるのが、NTS-1 mkIIにおけるユーザーインターフェースの拡張への対応です。NTS-1 mkIIでは、パラメーターの表示形式として、整数だけでなく、小数、文字列、ON/OFFといった多様な形式が選べるようになっています。できればこれに対応したいですが、それに必要な指示をどう与えるかが課題です。hvccそのものを拡張して、external generatorに対する追加の指示が入ったメタファイルを渡せるようにするという方法が1つ。Pure Dataの変数名などに簡易なメタデータを埋め込むということも考えられます。

現状、「Pure Dataにおけるパラメーターは基本的に数値(bangやシンボルも使うことはできますが)なので、HVCCでの変換処理としては数値に限定すべき」と考えています。たとえば「0を”OFF”、1を”ON”と表示させる」というような指示をNTS-1 mkIIで行えますが、これはPure Dataではなくユーザーインターフェース側の話なので、hvccの責務としてそこまで踏み込むのは適切ではないかもしれません。実際、logue SDKの設計もそういった分離をしているようにも思われます。

とはいえ、将来的に「Pure DataからNTS-1 mkII用のユニットを自動生成する」というゴールを見据えると、どこかでユーザーインターフェースに関する設定を反映させる必要があります。そのため、いずれにせよWebアプリとしてはhvccとユーザーインタフェースは両方扱わなければなりません。どのような構成にするか、もうちょっと考えたいと思っています。

また、NTS-1 mkII向けのディレイ、モジュレーション、リバーブといったエフェクトにもexternal generatorを拡張して対応させていく予定です。NTS-3向けのgeneric FXユニットにも対応していく予定ですが、NTS-3はNTS-1 mkIIとはSDKのファイル構成が若干異なるため、別のexternal generatorを作ることになりそうです。

コメント