(

Server.default = s = Server.internal.boot;

s.waitForBoot({

s.scope;

});

)



(

var noteObject, score;

score = CtkScore.new;


// this noteObject takes parameter for attackdur, releasedur and dur

// this makes the note more flexible, allowing for different note shapes


noteObject = CtkSynthDef(\oscili_2b, {arg freq = 440, dur = 2, 

attackdur = 0.5, releasedur = 1, amp = 0.5;

var osc, env, envgen;

osc = SinOsc.ar(freq, 0, 1);

// use the argument values to calculate the sustain time!

env = Env.linen(attackdur, 

dur - (attackdur + releasedur), 

releasedur, 0.5, 0);

envgen = EnvGen.kr(env) * amp;

Out.ar(0, osc * envgen)

});


// you can add a single note to the score ...

score.add(noteObject.new(1.0, 3.5).dur_(3.5));


// ... or, a list of comma seperated notes

score.add(

noteObject.new(3.5, 3.5).dur_(3.5)

.freq_(261.625).attackdur_(0.05).releasedur_(0.5).amp_(0.25),

noteObject.new(3.75, 3.5).dur_(3.5)

.freq_(277.182).attackdur_(0.05).releasedur_(0.5).amp_(0.5),

noteObject.new(4, 3.5).dur_(3.5)

.freq_(493.883).attackdur_(0.05).releasedur_(0.5).amp_(0.125),

noteObject.new(5, 3.5).dur_(3.5)

.freq_(233.081).attackdur_(0.05).releasedur_(0.5).amp_(0.125),

noteObject.new(5.25, 3.5).dur_(3.5)

.freq_(369.941).attackdur_(0.05).releasedur_(0.5).amp_(0.125),

noteObject.new(5.5, 3.5).dur_(3.5)

.freq_(246.941).attackdur_(0.05).releasedur_(0.5).amp_(0.125)

);

score.play;

)


// create the impression of a single note (clarinet like)

(

var noteObject, score, fundamental, baseamp;

score = CtkScore.new;


noteObject = CtkSynthDef(\oscili_2b, {arg freq = 440, dur = 2, 

attackdur = 0.5, releasedur = 1, amp = 0.5;

var osc, env, envgen;

osc = SinOsc.ar(freq, 0, 1);

env = Env.linen(attackdur, 

dur - (attackdur + releasedur), 

releasedur, 0.5, 0);

envgen = EnvGen.kr(env) * amp;

Out.ar(0, osc * envgen)

});


fundamental = 220;

baseamp = 0.25;


// uses the default values for attackdur and releasedur

score.add(

noteObject.new(1.0, 5.0).dur_(5.0).freq_(fundamental).amp_(baseamp),

noteObject.new(1.0, 5.0).dur_(5.0)

.freq_(fundamental * 2).amp_(baseamp * 0.2),

noteObject.new(1.0, 5.0).dur_(5.0)

.freq_(fundamental * 3).amp_(baseamp * 0.5),

noteObject.new(1.0, 5.0).dur_(5.0)

.freq_(fundamental * 5).amp_(baseamp * 0.4),

noteObject.new(1.0, 5.0).dur_(5.0)

.freq_(fundamental * 7).amp_(baseamp * 0.1),

noteObject.new(1.0, 5.0).dur_(5.0)

.freq_(fundamental * 9).amp_(baseamp * 0.05)

);

score.play;

)


// same clarinet like tone, but sharper attack, and the higher partials

// decay faster

(

var noteObject, score, fundamental, baseamp;

score = CtkScore.new;


noteObject = CtkSynthDef(\oscili_2b, {arg freq = 440, dur = 2, 

attackdur = 0.5, releasedur = 1, amp = 0.5;

var osc, env, envgen;

osc = SinOsc.ar(freq, 0, 1);

env = Env.linen(attackdur, 

dur - (attackdur + releasedur), 

releasedur, 0.5, 0);

envgen = EnvGen.kr(env) * amp;

Out.ar(0, osc * envgen)

});


fundamental = 220;

baseamp = 0.25;


// uses the default values for attackdur and releasedur

score.add(

noteObject.new(1.0, 5.0).dur_(5.0).attackdur_(0.05).releasedur_(0.5)

.freq_(fundamental).amp_(baseamp),

noteObject.new(1.0, 5.0).dur_(5.0).attackdur_(0.05).releasedur_(0.5)

.freq_(fundamental * 2).amp_(baseamp * 0.2),

noteObject.new(1.0, 5.0).dur_(5.0).attackdur_(0.05).releasedur_(1.1)

.freq_(fundamental * 3).amp_(baseamp * 0.5),

noteObject.new(1.0, 5.0).dur_(5.0).attackdur_(0.05).releasedur_(0.75)

.freq_(fundamental * 5).amp_(baseamp * 0.4),

noteObject.new(1.0, 5.0).dur_(5.0).attackdur_(0.05).releasedur_(1.5)

.freq_(fundamental * 7).amp_(baseamp * 0.1),

noteObject.new(1.0, 5.0).dur_(5.0).attackdur_(0.05).releasedur_(2.5)

.freq_(fundamental * 9).amp_(baseamp * 0.05)

);

score.play;

)


// same clarinet like tone, but now attacks, starttimes, durations and 

// releases are de-correlated. There is a moment that will still sound

// like a clarinet, but this is no longer something a clarinet can do!

(

var noteObject, score, fundamental, baseamp;

score = CtkScore.new;


noteObject = CtkSynthDef(\oscili_2b, {arg freq = 440, dur = 2, 

attackdur = 0.5, releasedur = 1, amp = 0.5;

var osc, env, envgen;

osc = SinOsc.ar(freq, 0, 1);

env = Env.linen(attackdur, 

dur - (attackdur + releasedur), 

releasedur, 0.5, 0);

envgen = EnvGen.kr(env, doneAction: 0) * amp;

Out.ar(0, osc * envgen)

});


fundamental = 220;

baseamp = 0.25;


// uses the default values for attackdur and releasedur

score.add(

noteObject.new(1.0, 5.0).dur_(5.0).attackdur_(1.5).releasedur_(2.5)

.freq_(fundamental).amp_(baseamp),

noteObject.new(3.0, 5.5).dur_(5.5).attackdur_(0.05).releasedur_(1.0)

.freq_(fundamental * 2).amp_(baseamp * 0.2),

noteObject.new(1.5, 7.0).dur_(7.0).attackdur_(2.0).releasedur_(4.0)

.freq_(fundamental * 3).amp_(baseamp * 0.5),

noteObject.new(1.0, 4.0).dur_(4.0).attackdur_(0.707).releasedur_(0.5)

.freq_(fundamental * 5).amp_(baseamp * 0.4),

noteObject.new(2.5, 9.0).dur_(9.0).attackdur_(4.5).releasedur_(4.5)

.freq_(fundamental * 7).amp_(baseamp * 0.1),

noteObject.new(1.3, 4.0).dur_(4.0).attackdur_(0.5).releasedur_(2.5)

.freq_(fundamental * 9).amp_(baseamp * 0.05)

);

score.play;

)