SwingOSC + SynthDef

Cottle氏はComputer Music with examples in SuperCollider 3内でGUIはあまり重要じゃないから最後に考慮すれば良いよ、と記述されておられました
僕もスパコを活用するための意見として順番を除いてほぼ同意です
ただ、僕としてはスパコを使用する上では始めのうちにGUI関連は知っておいた方が良いという位置づけであると考えています
SynthDefを書く時に音の確認に非常に役に立つためです


というわけで、SwingOSCを用いてどのようにGUIを補助として使うかについて簡単に記述したいと思います


まずは以下のコードをご覧下さい

g = SwingOSC.default.boot;
g.quit;

(
SynthDef("SwingTest",
{
arg freq = 440, amp = 0.8, pan = 0, outBus = 0;
var signal;

signal = SinOsc.ar(freq, mul: amp);
Out.ar(outBus,
Pan2.ar(signal,pan)
);
}).store;
)


(
var w,ssButton,ampSlider,freqSlider,panKnob,syn,sp;
w = JSCWindow("SwingTest",Rect(0,0,400,150));
w.front;
w.view.decorator = FlowLayout(w.view.bounds);


ssButton = JSCButton(w,200 @ 20);
ssButton.states = [["Start"],["Stop"]];
ssButton.action = {arg state;
if(state.value == 0, {syn.free});
if(state.value == 1, {syn = Synth("SwingTest")});
};

w.view.decorator.nextLine;

ampSlider = JEZSlider(w, 300 @ 20, "amp",
ControlSpec(0.ampdb,1.ampdb,\db),
{arg ampSend; syn.set(\amp, ampSend.value.dbamp)}, //action
-5
);


w.view.decorator.nextLine;

freqSlider = JEZSlider(w, 300 @ 20, "freq",
ControlSpec(440/2,440*5,\exp),
{arg freqSend; syn.set(\freq, freqSend.value)}, //action
100
);

w.view.decorator.nextLine;

sp = ControlSpec(-1,1,default: 0);
panKnob = JKnob(w,50 @ 50).centered_(true);
panKnob.value = sp.unmap(0);
panKnob.action = {
arg panSend;
sp.map(panSend.value).postln;
syn.set(\pan, sp.map(panSend.value))
};
)

Helpに記載されているコードと変わりありませんが
まずSwingOSCを立ち上げた後にSynthDefを定義していることが分かると思います
その中で"freq amp pan"
の3つの変数に注目してください、こいつらをGUIから更新してしまおうというわけです
言うなれば、音を作る上でパラメータを更新して音を確認しつつSynthを作っていこう、というわけです


画像にある通りに、あらかじめこのようなテンプレを用意しておき、更新したいパタメータにGUIからアクセス出来るようにしておけば、後々役に立ちます!