📚

SuperDirtを使ってOSCだけで音を出す

2023/09/15に公開

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に記述されています。
https://github.com/musikinformatik/SuperDirt/blob/develop/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可能です。
https://supercollider.github.io/sc3-plugins/
DLして起動したらエディタ画面が出ると思うのでそこで
Quarks.checkForUpdates({Quarks.install("SuperDirt", "v1.1.3"); thisProcess.recompile()})
を入力し、その行でctrl+enterでインストール開始、完了します。
以下のあたりに書いてあるので詳しくはそちらを参照してください。
https://zenn.dev/k_neko3/articles/e18097212b3358
https://yoppa.org/mit_sound19/10575.html

TouchDesingerを使ってSuperDirtを鳴らす

Super DirtをTouchDesignerを使ってOSCで鳴らすサンプルを作りました。
SuperDirt側は動作環境によっては調整する必要があるようです。
https://drive.google.com/drive/u/0/folders/1VGyhLPcncHxgsQgyGPxuLqCNM8UcumTz

Discussion