TidalCyclesからSuperColliderで定義した自作のシンセサイザーを鳴らす方法
ナカジ(@cp_nakajun)です。
先日、SuperColliderの強力シンセサイザーを利用する為に「sc3-plugins」のインストール方法を紹介しました。
そうすると次の興味はSuperColliderで「自作のシンセ」を作って鳴らすこと!!
その方法はというとSuperDirtのGithubリポジトリ内にチュートリアルがあります。
このファイルはSuperDirtがインストールされていれば
/Users/username/Library/Application Support/SuperCollider/downloaded-quarks/SuperDirt/synths/tutorial-synths.scd /Users/username/Library/Application Support/SuperCollider/downloaded-quarks/SuperDirt/synths/default-synths.scd
にもあります。
で、実際の方法ですが…
田所淳さんのyappa.orgにきっちり解説されてます。
▶︎TidalCyclesとSuperColliderの連携 – 改訂版
でもそれじゃあわざわざ書いた意味もないので、僕もチュートリアルとyappa.orgを読んだ上で自分なりのまとめを残しておきます。
TidalCyclesで使うSuperColliderのシンセを作る
まずは先の2つのチュートリアルの冒頭にある説明を訳すと
list of new SynthDefs, and in parentheses the special parameters they accept
(“!” means it’s not a standard Tidal param and needs to be defined)
most of these SynthDefs use sustain to scale the overall envelope, and many use accelerate to provide a pitch glide新しいSynthDefsのリストを返します。
“!”は標準的なTidalパラメータではなく、定義する必要があることを意味します)
これらのSynthDefのほとんどはサステインを使用して全体のエンベロープをスケールし、多くはピッチの滑りを提供するために加速します[tutorial-synths.scdより]
Add your own instruments here.
They can be used in Tidal just as samples (ignoring the sample number, so instead of “bd:2” write “inr”)
supported parameters are e.g.
sustain, speed, endSpeed, begin, end, pan, accelerate, offset, cps
all instruments ought to use: outここに独自の楽器を追加してください。
タイダルだけでサンプルとして使用することができます(サンプル番号を無視するので、 “bd:2″の代わりに “inr”と書く)
サポートされているパラメータは、
サスティーン、スピード、エンドスピード、開始、終了、パン、加速、オフセット、cps
すべての楽器は使用すべきです:out[default-synths.scdより]
という感じです。
見てみるとTidalCyclesからコントロールできるパラメーターは
「サスティーン、スピード、エンドスピード、開始、終了、パン、加速、オフセット、cps」というあたりのようですね。
次に田所さんの解説を読むと
Tidal向けに定義されたSynthdefの特徴として、最終出力で、Out.ar(…) ではなく OffsetOut.ar(…) を使用していることに気付きます。
(中略…)
また、最終出力で、DirtPan.ar(…) を使用しています。
とあります。
default-synths.scdから1つのサンプルをみてみると
// modulated phase mod sines ( SynthDef(\psin, { |out, sustain = 1, freq = 440, speed = 1, begin=0, end=1, pan, accelerate, offset, modfreq = 40| var env, sound, rate, phase, amp; amp = AmpCompA.kr(freq); env = EnvGen.ar(Env.perc(0.002, sustain, 1, -1), doneAction:2); phase = Line.ar(begin, end, sustain); rate = speed + Sweep.kr(1, accelerate); sound = SinOsc.ar(freq, SinOsc.ar(modfreq * (1..5), 0, 1 - phase * 10 * env / (1..5), 0.5pi)).sum; OffsetOut.ar(out, DirtPan.ar(sound, ~dirt.numChannels, pan, env) ) }).add );
たしかに「OffsetOut.ar(…)」「DirtPan.ar(…) 」がありますね。
TidalCyclesからSuperColliderのシンセを鳴らす
では、どうやってTidalCyclesからSuperColliderのシンセを鳴らすのか?
ですが
まずはSuperColliderのシンセの定義方法です。
- 通常通りSCに記述し「command+enter」で定義
- 「default-synths.scd」か「tutorial-synths.scd」に記述
2のdefault-synths.scdには「Add your own instruments here.(ここに独自の楽器を追加してください。)」とそもそも記述があるので、そこに書き足せばOKです。
で、TidalCyclesから鳴らす(使う)には、SuperDirtを起動した状態で
d1 $ sound "シンセの名前"
です。
例えば、上記のシンセを鳴らすには
d1 $ sound "psin"
ですね。
あとはチュートリアルのシンセを改造しながら、もしくはSuperColliderを学習しながらお互いに頑張りましょう!!