昨年drumlogueに移植したBraidsを、NTS-1 mkIIへ移植しました。
Braidsそのものについては以前の記事で触れていますので、詳しくは書きませんが、Mutable Instrumentsのユーロラックモジュールで、全47種のオシレータを搭載しています。ハードウェアはSTM32F103で、波形合成はすべてソフトウェアで行われています。GitHubで全ソースコードが公開されています。

drumlogueに移植した際にlogue SDK v2のAPIで動くようにはなっていますが、NTS-1 mkIIは1ユニット48KBのサイズ制限がありますので、そのままではロードできません。(drumlogue版は128KBほどあります。)そのため、いろいろ試行錯誤して、オシレータの順序を変更しないようにしつつオシレータのカテゴリの違いもある程度意識して、最終的に以下の5つのオシレータに分割しました。
・バーチャルアナログ系オシレータ
・デジタル系オシレータ
・レゾネータ系およびパーカッションオシレータ
・ウエーブテーブルオシレータ
・ノイズジェネレータ
分割の際のネックになったのは、ウエーブテーブルオシレータが使用しているサイズが大きなテーブル、およびレゾネータ用のディレイラインバッファでした。これらのオシレータは相対的にコードに割けるスペースが小さくなったため、利用できるオシレータの数が少なくなっています。
テーブルには、フィルタのパラメータやサイン波の波形など、複数のオシレータで利用されるものと、特定のオシレータでのみ利用されるものがあり、#if
で細かく場合分けしました。また、コードや構造体定義についても上記の分割に沿って#if
で場合分けしています。文字列定数などもすぐスペースを取ってしまうため、できるだけ不要なものは取り除くようにしました。
drumlogue版では2つのエンベロープジェネレータを内蔵させて、単体で音色変化・音量変化が行えるようにしましたが、NTS-1版では外部にVCF/VCAがありますので、内蔵エンベロープは削除しました。
一方NTS-1 mkII版の新機能としては、外部の音声信号でFM変調できるようにしました。FM変調自体はBraidsにもともとある機能です。もちろんNTS-1の内蔵LFOからのピッチモジュレーションも使えます。
また、LFOによるShapeモジュレーションについては、主要な2つの音色パラメータおよびFM変調のレベルのいずれかをモジュレーションできるようにしました。さらに、NoteONからモジュレーションが始まるまでの遅延時間を設定できるようにしています。
移植に際しては、他にこちらで書いたバグに悩まされたりしましたが、オシレータを分割することができたあとは割とスムーズに進みました。元のBraidsのコードが大変綺麗なのと、APIが(細かな差分があるとはいえ)drumlogueと共通性があるのが大きかったと思います。
****
ちなみに私はBraidsのノイズジェネレータが結構好きです。単にノイズを生成するのではなく、ノイズをちょっと料理したオシレータで、なかなか普通のシンセでは作りにくい音だったりします。
最後、ノイズ系オシレータ。ファイルサイズは20Kb強くらい。これで一通りBraidsのオシレータは動きそうなことが確認できたので、あらためて開発着手しようと思います。 pic.twitter.com/qQse50iWMh
— boochowp (@boochowp) April 21, 2024
上の動画は試作版で、ネーミングがdrumlogue版と同じLILLIANのままですが、正式なネーミングはLILLIANのサブセット版ということでLilyにしました。バイナリはGumroadで無料配布しています。カバー画像は、NTS-1 mkIIの黒・白・金の配色をイメージしています。なおソースコードはそのうちGitHubで公開予定です。
【2024/5/8追記】ソースコードは下記で公開しています。
コメント