SynthDef는 patch에 이름을 만들어 다른곳에서 불릴수 있도록 한다. 서버로 불려지면 SynthDef 는 메세지를 받아 값을 변경시킬수 있다.
-Basic Format:
SynthDef(“name”, {Out.ar(busNumber,Ugen});
“name”은 /name이렇게 쓰여질수도 있다.
(
SynthDef(“onesine”,{|freq = 440, bus = 0|
Out.ar(bus, SinOsc.ar(freq,0,0.1));
}).load(s);//file을 저장하고 서버로 보낸다.
)
-SynthDef은 또한 파일로 저장되어 다음에 다시 사용될 수 있다.
Default directory는 synthdefs/이다.
다음은 명령메세지들이다.
writeDefFile (dir) : file로 쓰기
load(server) : defFile을 쓰고 서버로 보내기 위한 메세지를 보낸다.
send(server) : def를 compile 하고 파일로 쓰지않고 서버로 보낸다.
play(server) : def를 compile 하고 서버로 보내고 하나의 synth를 만든다.
Raw messages는 SynthDef의 새로운 instance를 만들거나 이미 존재하는것의argment값을 바꾸기 위해서 서버로 보내질수 있다.
메세지 정의는 다름을 참고:
[Server-Command-Reference]
// To create a new instance of a synth
s.sendMsg(“/s_new”, “onesine”, 1000,1,0);
//1000이 ID
//1은 action (0: head로 더해지고 1은 꼬리에 더해지고)
//0은 target ID (group)
To free node 1000:
s.sendMsg(“/n_free”, 1000);
To change the frequency in node 1000 (which must be active):
s.sendMsg(“/n_set”, 1000,freq,200);
s.sendMsg(“/n_set”, 1000,”freq”,500);
//*Note : freq와 “freq” 둘다 위 메세지에 사용되었다.
여러개의 nodes만들기
s.sendMsg(“/s_new”, “onesine”, 1000,1,0,freq,100);
s.sendMsg(“/s_new”, “onesine”, 1001,1,0,freq,230);
s.sendMsg(“/s_new”, “onesine”, 1002,1,0,freq,470);
s.sendMsg(“/s_new”, “onesine”, 1003,1,0,freq,1000);
To free these nodes:
s.sendMsg(“/n_free”, 1000);
s.sendMsg(“/n_free”, 1001);
s.sendMsg(“/n_free”, 1002);
s.sendMsg(“/n_free”, 1003);
-또다른 SynthDef:
(
SynthDef(“filteredNoise”, {|center = 2000|
Out.ar(0,Resonz.ar(WhiteNoise.ar(0.5), center, 0.1));
}).load(s);
)
a = Synth(“filteredNoise”,[center,500]);
b = Synth(“filteredNoise”,[center,1000]);
a.free;
b.free;
To browse available SynthDefs:
(
SynthDescLib.global.read;
SynthDescLib.global.browse;
)
-Karplus-Strong as SynthDef
(
SynthDef(“Karplus”,
{
arg midiPitch = 69, decayTime = 2.0;
var burstEnv, att = 0, dec = 0.001, signalOut, delayTime;
delayTime = midiPitch.midicps.reciprocal;
burstEnv = EnvGen.kr(Env.perc(att, dec));
signalOut = CombL.ar(WhiteNoise.ar(burstEnv), delayTime, delayTime, decayTime);
DetectSilence.ar(signalOut, doneAction: 2);
Out.ar(0,signalOut);
}).load(s)
)
// note :arg syntax (arg .. ; instead of |arg, arg|
// note :the way that Out is used
// DetectSilence – evaluates doneAction when input falls below a certain threshold
Synth(“Karplus”)
Synth(“Karplus”, [midiPitch, 60]) // uses a new node each time
a = Synth(“Karplus”);
a.set(midiPitch, 60); // synth is turned off before this happens
Synth(“Karplus”, [midiPitch, rrand(50,80), decayTime, 3.0]);
//——————————————
http://csound.x-y.net
Ji Youn Kang,
Csound Max Community