(
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;
)