11. SynthDef

11. Synth Def

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

Leave a Comment.

This site uses Akismet to reduce spam. Learn how your comment data is processed.