kitKorgが発売している1ボイスのハードウェアシンセサイザーです。組み立て式のキットとして販売され、1ボイスのオシレータ、それにつながるフィルタとエンベロープ、さらにモジュレーション、ディレイ、リバーブといったエフェクトをかけることができます。エレクトロニクスこの商品を含むブログを見る外部からのオーディオ入力もサポートしており、外部音源に対するエフェクタとしても利用することができます。テンポシンクのための入出力、MIDI入力、USB(MIDI)とインターフェースも豊富です。極めつけはカスタムのオシレータ、モジュレーションが作成・利用できるという機能まであります。RakuChordなどで音を生成するプログラムをちょっと書いたことがある私にとっては、「プロ」の作ったシンセサイザーのハードウェアからソフトウェアまでを触ることができるこの製品は非常に魅力的でした。組み立てまずは組み立てです。いってもはんだ付けなどは必要ありません。基板兼ケースとなっているパネルを折り曲げて分離します。(辺に折り曲げてしまうと取り返しがつかないのでここが一番緊張しました。)それからそれらをねじで止めて、鍵盤となるリボン抵抗をコネクタで接続し完成です。USBコネクタに電源をつなげると起動し、鍵盤をタッチすることで音が鳴ることが確認できました。音を出して遊ぶ鍵盤を押すと、当然それに対応した音が鳴ります。このリボン抵抗は細かい操作ができず、音出しのテストくらいしか使用に耐えません。USB/MIDI接続を使いMIDIホストと接続することで、この問題は解消できそうです(まだ試していない)しかしアルペジエータの機能を使うことで、それっぽいメロディをNTS-1だけでも演奏することができます。プリセットのオシレータを使い、フィルタ、エンベロープをぐりぐり動かすだけでもかなり面白いです。2019エフェクタとして遊ぶオーディオ入力端子に自作電子楽器のRakuChordをつなげて、エフェクタとして利用してみました。モジュレーションのコーラスエフェクトやリバーブは音に深みが出て非常に面白いです。ディレイはテンポと同期する機能がないため、うまく速度を調整するといい感じに動きますが、合わせるのが非常に難しいです。テンポと同期できるディレイを実装してほしいと思いました。2019オシレータを自作して遊ぶプログラマとして見逃せないのがカスタムオシレータの自作です。調べるとNTS-1で利用できるSDKが公開されており、これを使うことでC/C++でオシレータやモジュレータが作れるようです。github.comしかし、このSDK、ドキュメントが非常に少なく、また海外・国内ともにあまりチュートリアルのようなものがありません。↓に用意されているスクリプトを使うことでLinux,Windows,macOSそれぞれの環境でNTS-1で利用されているSTM32用のgccをセットアップすることができます。GitHubしかし、これらをちゃんとセットアップするのは依存関係も含めて結構手間です。いうことで、まずはこのlogue-sdkの環境をまるっと閉じ込めたコンテナイメージを作成しました。inajob/logue-sdk-dockerこのコンテナイメージを使うことで、Dockerをインストールするだけでlogue-sdkの開発を始めることができます。セットアップは簡単にできるようになったので、いよいよプログラミングです。GitHubこのプログラムはよくできていてwaves.hppというファイルにC++のオブジェクトとして、オシレータが実装されており、waves.cppでlogue-sdkから呼び出されるフックの関数を実装しています。できているのですが、SDKの利用方法を学ぶ際にはもう少し簡単な例が欲しいところです。そこで、とりあえず簡単に「ラ」を鳴らすだけのオシレータを実装してみることにしました。waves.hpp:これは削除simple.cpp:新しく作成。実際にはsimple.cppを作るところ以外はほとんど機械的な変更だけです。}}<<これが今回の”「ラ」が鳴るだけオシレータ”です。見るととても簡単です。要はOSC_CYCLEでどんどんメモリに次の波形を書き込んでいけばよいわけです。ビルドは先ほど紹介したlogue-sdk-dockerを使えば簡単にできます。ビルドができると拡張子ntkdigunitのファイルができるので、Librarianという専用ツールでNTS-1に書き込みます。これでOSCに新しいオシレータが追加されます。まじで「ラ」しか鳴らない様子です。エフェクトやアルペジエータは使えます。2019ついでに、このプログラムを改造して押された音階に対応する音が鳴るようにしてみます。}}<<こんな感じです。osc_w0f_for_noteとかosc_wave_scanfとか、wavesBとかはほかのソースコードを見ながら勘で書いています。この辺もう少しドキュメントが欲しいところです。(そもそもプリセットのwaves[A-D][0-15]にはどんな波形が入っているか書いてあるドキュメントが見当たらない・・)と、こんな具合でC言語と勘があれば自分でオシレータを作ることができることがわかりました。(ここまでのソースコードはhttps://github.com/inajob/simple-oscで公開しています。https://korginc.github.io/logue-sdk/ja/感想このガジェットはDTMをたしなむ人はもちろんですが、「サウンドプログラミングを学びたい人」にとっても非常に便利なものであると感じました。音をソースコードで記述する「サウンドプログラミング」ですが、リアルタイムに鳴らそうとすると、たくさんのタスクが並列に処理されるOSの上では案外書きにくいものです。そこで役に立つのがマイコン上でのサウンドプログラミングです。これまではArduinoやmbedでも似たようなことができましたが、これらはオーディオに特化していないため、パソコンからのMIDI信号受信や、外部音源の取り込み、ディレイを扱うための大きなメモリなど、かなりの周辺機器を自作しないとまともなオーディオプログラミング環境になりません。これにはかなり高度な電子工作、マイコンプログラミングの知識が必要です。このNTS-1はこれらの面倒な部分をすべて受け持ってくれて「サウンドプログラミング」の「おいしいところ」だけを扱うことができます。いった感じで、本当にこれは「サウンドプログラミング界のArduino」というべき開発環境であると感じました。単純にハードウェアMIDI音源、オーディオエフェクタとしても非常に使いやすいし、品質も良いためプログラミングとは無縁のDTMユーザにもおすすめできます。(まぁ私はDTMユーザではないのでこの部分の評価はほかの人の記事を見ていただくほうが良いです)私は自作電子楽器RakuChordの後段のエフェクタとして、また自作電子楽器の音源の研究という2つの目的でこれからもこのNTS-1を活用していきたいと考えています。記事の中にも書いた通りプログラミング周りはドキュメントなどが少なく、これからの盛り上がりが非常に大事であると考えています。NTS-1を買った人は得られた知見を公開してもらえると助かります!またTwitterで情報を記載する際にはハッシュタグ#NTS1を使うことをお勧めします(製品名であるNTS-1はハイフンが含まれておりハッシュタグにできないため。)私も自分が発見したことをブログや下記Scrapboxのページにまとめていこうと思うので、NTS-1ユーザの方は見てみてください。月別アーカイブはてなブログをはじめよう!inajobさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。