SuperDirtを使ってOSCだけで音を出す
OSC(Open Sound Control)はさまざまなインタラクティブなアプリケーションやインスタレーションでよく使われているプロトコルですが、意外と音を出すのには使われていません。ほとんどの場合MIDIのみの対応になっています。おそらくOSCの自由度が高すぎるためだと思われます。従って殆どのDAWなどにはDAWの機能をOSCで直接制御するための機能を持たないものが多く、自前でDAW側でOSCの細かな仕様を決めて、パーサを自作する必要があります。
Super ColliderとSuper Dirt
Tidal CyclesやSardineなど、オーディオライブコーディング界隈で使われているSuper ColliderのSuper DirtはそれぞれのエンジンとOSCで通信することでサウンドを生成し、鳴らしています。
つまりSuper DirtはOSCの受け口があるシンセサイザーと捉えることができ、Super Dirtno
OSCのプロトコルさえ分かればTouchDesigner, vvvv, openFrameworks, Unity, Unreal EngineなどあらゆるアプリケーションからOSCを使って音を鳴らすことができます。
Super DirtのOSC仕様
Tidalから叩いてるパラメータの一覧はソースコードのused-parameters.scd
に記述されています。
SuperDirtは基本的には/dirt/play
というOSCアドレスで来たデータを、デフォルトではポート番号57120
で受信し、動作します。
全てはトリガータイプの通信となり、プッシュとリリース、みたいな「押しっぱなし」の制御はないようです。
送信データの中身は順不同の連想配列になっていて、殆どのパラメータは初期値が割り当てられており、送る必要がありません。
以下、基本的なパラメータになります。Super DirtのOSC仕様なのですが、ドキュメントがなく、ソースコードとテストから読み解いたので間違いや不明なパラメータも数多くあります(分かる方いらっしゃればぜひ教えてください)。
名称 | 必須か否か | 型 | 説明 |
---|---|---|---|
s | 必須 | string | 使う楽器の名称 |
n | 任意 | int | 楽器のバリエーション指定 |
sound | 任意 | ? | ? |
begin | 任意 | float | 楽器のバリエーション指定 |
end | 任意 | float | 楽器のバリエーション指定 |
length | 任意 | ? | ? |
accelerate | 任意 | ? | ? |
cps | 任意 | ? | ? |
unit | 任意 | ? | ? |
loop | 任意 | ? | ? |
delta | 任意 | ? | ? |
legato | 任意 | ? | ? |
sustain | 任意 | float | 押してる時間を指定 |
amp | 任意 | float | 音量の増減 |
gain | 任意 | float | 音量の増減 |
channel | 任意 | ? | ? |
pan | 任意 | ? | ? |
note | 任意 | int | ピッチを指定 |
freq | 任意 | ? | ? |
midinote | 任意 | ? | ? |
octave | 任意 | int | オクターブを指定 |
latency | 任意 | float | 再生開始までの遅延時間を指定 |
lag | 任意 | ? | ? |
offset | 任意 | ? | ? |
cut | 任意 | ? | ? |
orbit | 任意 | ? | ? |
cycle | 任意 | ? | ? |
sには初期状態で217個のサンプラー音源と45個のシンセサイザーが入っています(デバッグ用のモジュールもあるので全部が楽器として使える訳ではないようです)。
実際に音を鳴らすための環境構築
SuperDirt環境を構築してない人のために一応情報を書いておきます。
SuperColliderは以下からDL可能です。
DLして起動したらエディタ画面が出ると思うのでそこで
Quarks.checkForUpdates({Quarks.install("SuperDirt", "v1.1.3"); thisProcess.recompile()})
を入力し、その行でctrl+enterでインストール開始、完了します。
以下のあたりに書いてあるので詳しくはそちらを参照してください。
TouchDesingerを使ってSuperDirtを鳴らす
Super DirtをTouchDesignerを使ってOSCで鳴らすサンプルを作りました。
SuperDirt側は動作環境によっては調整する必要があるようです。
Discussion