TidalCyclesからSuperColliderで定義した自作のシンセサイザーを鳴らす方法

投稿日:2018-01-13



ナカジ(@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のシンセの定義方法です。

  1. 通常通りSCに記述し「command+enter」で定義
  2. 「default-synths.scd」か「tutorial-synths.scd」に記述

2のdefault-synths.scdには「Add your own instruments here.(ここに独自の楽器を追加してください。)」とそもそも記述があるので、そこに書き足せばOKです。

で、TidalCyclesから鳴らす(使う)には、SuperDirtを起動した状態で

d1 $ sound "シンセの名前"

です。

例えば、上記のシンセを鳴らすには

d1 $ sound "psin"

ですね。

あとはチュートリアルのシンセを改造しながら、もしくはSuperColliderを学習しながらお互いに頑張りましょう!!

サポート募集中

この記事はお役に立てましたか。
よかったら、コーヒー ☕ をご馳走いただけたら励みになります。



ライブコーディング書籍がついにでました!

おすすめのクリエイティブ・コーディング関連カテゴリー

クリエイティブコーディング系 講座


ウェブツール

機能はシンプルなものですが、p5.jsやTone.jsで描画したり音が出たりするので遊んでみてください。
・【Midi Number Tools】:MIDIナンバーから音名と周波数を判定します
・【Delay Time Calculator】:テンポに応じた音符の長さを判定します