(


var g5, fs5, e5, d5, c5, b4, a4, g4;

var mel1Data, now;

var e, x;

var noteObject, score, myFunc;


/* begin add */

var d4, e4, fs4, a5, b5, c6, d6, e6;

var q;

var mel2Data, mel3Data;

var curtime;

/* end add */


noteObject = CtkSynthDef(\test, {arg freq, amp, dur, out;

Out.ar(out, SinOsc.ar(freq, 0, Line.kr(amp, 0, dur)))

});

score = CtkScore.new;


/* set up basic pitch vars */

g5 = PC(\g, 5);

fs5 = PC(\fs, 5);

e5 = PC(\e, 5);

d5 = PC(\d, 5);

c5 = PC(\c, 5);

b4 = PC(\b, 4);

a4 = PC(\a, 4);

g4 = PC(\g, 4);


/* begin add */

d4 = PC(\d, 4);

e4 = PC(\e, 4);

fs4 = PC(\fs, 4);

a5 = PC(\a, 5);

b5 = PC(\b, 5);

c6 = PC(\c, 6);

d6 = PC(\d, 6);

e6 = PC(\e, 6);

q = 1.0;

/* end add */


/* set up durations */

e = 0.5;

x = 0.25;


mel1Data = [

/* m1 */ [g5, e], [g5, e], [fs5, e], [fs5, e],

/* m2 */ [e5, e], [e5, e], [d5, e], [d5, e],

/* m3 */ [c5, x], [b4, x], [c5, x], [d5, x], [b4, x], [c5, x], [d5, x], [e5, x],

/* m4 */ [d5, x], [c5, x], [b4, x], [a4, x], [g4, e], [b4, e]

/* eod */ ];


/* begin add */

mel2Data = [

/* m1 */ [g4, x], [a4, x], [b4, x], [c5, x], [d5, e], [b4, e],

/* m2 */ [c5, e], [a4, e], [fs4, e], [g4, e],

/* m3 */ [a4, x], [d4, x], [e4, x], [fs4, x], [g4, x], [a4, x], [b4, x], [c5, x],

/* m4 */ [d5, e], [d6, e], [b5, e], [g5, x], [a5, x]

/* eod */ ];


mel3Data = [

/* m1 */ [b5, x], [c6, x], [d6, x], [e6, x], [a5, e], [d6, e],

/* m2 */ [g5, e], [c6, q], [b5, e],

/* m3 */ [e5, e], [a5, q], [g5, q], // ties over to measure 4!

/* m4 */ [fs5, e], [g5, e], [d5, e]];


// add a way to pass in amp and speaker assignment

myFunc = {arg starttime, mel, amp = 0.25, out = 0;

var now;

now = 0.0;

mel.do({arg data;

var pc, dur;

#pc, dur = data;

score.add(noteObject.new(now + starttime, dur).freq_(pc.freq).amp_(amp)

.dur_(dur).out_(out));

now = now + dur;

});

/* begin add */

now + starttime;

/* end add */

};


/* begin add */

curtime = 1.0;


curtime = myFunc.value(curtime, mel1Data, -12.dbamp);

curtime = myFunc.value(curtime, mel2Data, -12.dbamp);

curtime = myFunc.value(curtime, mel3Data, -12.dbamp);

/* end add */


score.play;

)




(

var g5, fs5, e5, d5, c5, b4, a4, g4;

var mel1Data, now;

var e, x;

var noteObject, score, myFunc;


/* begin add */

var d4, e4, fs4, a5, b5, c6, d6, e6;

var q;

var mel2Data, mel3Data;

var curtime;

var myMelody;

/* end add */


noteObject = CtkSynthDef(\test, {arg freq, amp, dur, out;

Out.ar(out, SinOsc.ar(freq, 0, Line.kr(amp, 0, dur)))

});

score = CtkScore.new;


/* set up basic pitch vars */

g5 = PC(\g, 5);

fs5 = PC(\fs, 5);

e5 = PC(\e, 5);

d5 = PC(\d, 5);

c5 = PC(\c, 5);

b4 = PC(\b, 4);

a4 = PC(\a, 4);

g4 = PC(\g, 4);


/* begin add */

d4 = PC(\d, 4);

e4 = PC(\e, 4);

fs4 = PC(\fs, 4);

a5 = PC(\a, 5);

b5 = PC(\b, 5);

c6 = PC(\c, 6);

d6 = PC(\d, 6);

e6 = PC(\e, 6);

q = 1.0;

/* end add */


/* set up durations */

e = 0.5;

x = 0.25;


mel1Data = [

/* m1 */ [g5, e], [g5, e], [fs5, e], [fs5, e],

/* m2 */ [e5, e], [e5, e], [d5, e], [d5, e],

/* m3 */ [c5, x], [b4, x], [c5, x], [d5, x], [b4, x], [c5, x], [d5, x], [e5, x],

/* m4 */ [d5, x], [c5, x], [b4, x], [a4, x], [g4, e], [b4, e]

/* eod */ ];


/* begin add */

mel2Data = [

/* m1 */ [g4, x], [a4, x], [b4, x], [c5, x], [d5, e], [b4, e],

/* m2 */ [c5, e], [a4, e], [fs4, e], [g4, e],

/* m3 */ [a4, x], [d4, x], [e4, x], [fs4, x], [g4, x], [a4, x], [b4, x], [c5, x],

/* m4 */ [d5, e], [d6, e], [b5, e], [g5, x], [a5, x]

/* eod */ ];


mel3Data = [

/* m1 */ [b5, x], [c6, x], [d6, x], [e6, x], [a5, e], [d6, e],

/* m2 */ [g5, e], [c6, q], [b5, e],

/* m3 */ [e5, e], [a5, q], [g5, q], // ties over to measure 4!

/* m4 */ [fs5, e], [g5, e], [d5, e]];


// add a way to pass in amp and speaker assignment

myFunc = {arg starttime, mel, amp = 0.25, out = 0;

var now;

now = 0.0;

mel.do({arg data;

var pc, dur;

#pc, dur = data;

score.add(noteObject.new(now + starttime, dur).freq_(pc.freq).amp_(amp)

.dur_(dur).out_(out));

now = now + dur;

});

/* begin add */

now + starttime;

/* end add */

};


myMelody = {arg starttime;

var curStart;

curStart = starttime;

curStart = myFunc.value(curStart, mel1Data, -12.dbamp);

curStart = myFunc.value(curStart, mel2Data, -12.dbamp);

curStart = myFunc.value(curStart, mel3Data, -12.dbamp);

};

myMelody.value(1.0);

myMelody.value(9.0);

myMelody.value(17.0);


/* end add */


score.play;

)