Orbit, GrobalEffect, Synth Group
SuperDirt を立ち上げると以下のようなNodeツリーが作られます。それぞれの役割がなんなのか気になって調べて見ました。
NODE TREE Group 0
1 group
3 group
1005 dirt_delay2
1004 dirt_reverb2
1003 dirt_monitor2
2 group
1002 dirt_delay2
1001 dirt_reverb2
1000 dirt_monitor2
ツリーをダンプして見て見ます。
処理はツリーのノードの枝の先頭から下へと処理が流れていきます(ノードID順ではない)
これをみるとSuperDirtの処理の流れが大体想像がつきそうです。
Orbit
group1 以下にgroup2, group3 の二つのグループが追加されています、これがそれぞれOrbitのグループになっています。
コンソールの表示では group3 が上に見えていますが、おそらく追加を先頭指定にしてあるのでしょう。手元の環境ではOrbit 0 が group2 Orbit 1 が group3に対応しているようでした。Tidal側でorbitを指定して見てどちらに追加されるか確かめて見るとわかります。
Global Effects
Orbitのグループにはそれぞれ3つのSynth Nodeが追加されます。
dirt_delay2 , dirt_reverb2, dirt_monitor2が追加されています。名前からそれぞれの役割が推測出来ますね。
末尾2というのはチャンネル数でSuperDirt初期化の時に挿入されます。
monitor というのは音量の調整とOutBusの管理を行うそうです。
Sample プレイバック の Node
さてそれではTidal側でコードを書いてシンセが鳴ったとしてどういうツリー構造になっているのか見てみます。
d1 $ s "bd"
NODE TREE Group 0
1 group
3 group
1005 dirt_delay2
1004 dirt_reverb2
1003 dirt_monitor2
2 group
1089 group
-1344 dirt_sample_2_2
-1352 dirt_gate2
1002 dirt_delay2
1001 dirt_reverb2
1000 dirt_monitor2
図にすると、
新しくOrbitのグループの下にdirt_sample_2_2 と dirt_gate2というSynth Nodeが追加された groupが追加されています。このグループはsynthGroup と言ってパターン内に登場するSynthごとに逐一生成されます。dirt_sampleというのがサンプルのプレイバックを行うSynth Nodeですね。dirt_gate というのはエンベロープや cutパターンの影響を管理するSynth Nodeです。
まず最初のgroup2の枝を辿って synthGroup のgroup、その枝の dirt_sample そして dirt_gate2、
その後で三つの Global Effect という順に通っていきます。
モジュールを加える
エフェクトのモジュールを加えるとどうなるでしょうか。試しにvowelを追加して見ます。
d1 $ s "bd" |+| vowel "a"
NODE TREE Group 0
1 group
3 group
1005 dirt_delay2
1004 dirt_reverb2
1003 dirt_monitor2
2 group
4679 group
-58800 dirt_sample_2_2
-58808 dirt_vowel2
-58816 dirt_gate2
1002 dirt_delay2
1001 dirt_reverb2
1000 dirt_monitor2
エフェクトモジュールvowelが追加された状態。

dirt_sample_2_2と dirt_gate2の間に dirt_vowel2 というNodeが追加されました。
複数のストリームの場合
別のストリームで同時にシンセがなっている場合どのようになるでしょうか。
do
d1 $ s "hh"
d2 $ s "bd"
NODE TREE Group 0
1 group
3 group
1005 dirt_delay2
1004 dirt_reverb2
1003 dirt_monitor2
2 group
1022 group
-272 dirt_sample_2_2
-280 dirt_gate2
1023 group
-288 dirt_sample_1_2
-296 dirt_gate2
1002 dirt_delay2
1001 dirt_reverb2
1000 dirt_monitor2
同じOrbit 0 で鳴らしている分には同じgroup2に追加されます。
stackの場合
d1 $ stack [
(s "hh"),
(s "bd")
]
NODE TREE Group 0
1 group
3 group
1005 dirt_delay2
1004 dirt_reverb2
1003 dirt_monitor2
2 group
1355 group
-5600 dirt_sample_2_2
-5608 dirt_gate2
1356 group
-5616 dirt_sample_1_2
-5624 dirt_gate2
1002 dirt_delay2
1001 dirt_reverb2
1000 dirt_monitor2
こちらも同じように、パターンに orbit が指定されていない限り同じような追加のされ方です(図的には上のものと同じなので割愛)
まとめ
-
SuperDirt では Orbit ごとに Group が作られ, それぞれに 3つの Global Effects が追加されます。
-
パターンに登場するSynthごとに synthGroup が作られ Global Effects の手前に挿入されていきます。
-
エフェクトを加えると synthGroup の中の
dirt_sampledirt_gateの間に挿入されていきます。
処理の順序を理解していると、適切なエフェクトのかけ方など音づくりにも役に立つかもしれません。


