//////////////////////////////////////////////////////////////////

// SuperCollider - Einführung, Oberseminar 12.2.2009

// Renate Wieser, Julian Rohrhuber, Till Bovermann




// unäre operatoren //////////////////////////////////////////////

3.squared;

squared(2);

1000.rand; 

1000.0.rand;

2pi;

2pi.rand;

inf.rand;


// binäre operatoren //////////////////////////////////////////////

3 * 3;

5 + 7;

1 / 0; 

inf + inf;

inf - inf;

2 ** 7;

2 ** -7;  

1 / (2 ** 7); 


// variablen und funktionen //////////////////////////////////////////////


a = 2; 

b = 5;

1 / (a + b);


// runde klammern

(

f = { |alpha| 

var beta = 500.rand; 

1 / (alpha + beta);

}

)


f.value(0); 

f.value(-100);

f.(10); 




// arrays, strings //////////////////////////////////////////////


a = "hallo world";

a.scramble;

a[0] 

a[0..3]; 


a = [0, 1, 2, 100]; 

a.scramble;

a[0] 

a[0..3]; 

a.sum;

sum(a);

a + 100; 


f.(a);



// sound funktionen //////////


{ SinOsc.ar(440) * 0.1 }.play; 

a = { |freq=440| SinOsc.ar(freq) * 0.1 }.play;

a.set(\freq, 440 * 6/5); 


{ SinOsc.ar(440 * [1, 6/5, 3/2]).sum * 0.1 }.play; 

{ SinOsc.ar(440 ** [1, 6/5, 3/2]).sum * 0.1 }.play;




(

{ 

var a = SinOsc.ar(440 * [1, 6/5, 3/2]);

var b = SinOsc.ar(0.3) ** a;

(b.sum * 0.1).clip2 * 0.1;

}.play;

)


(

{ 

var a = SinOsc.ar(440 * [1, 6/5, 3/2]);

var b = a ** SinOsc.ar(0.3);

(b.sum * 0.1).clip2 * 0.1;

}.play;

)


(

{ 

var a = SinOsc.ar(440 * [1, 6/5, 3/2]);

var b = SinOsc.ar(0.3 * [1, 1.1, 1.23]) ** a;

(b.sum * 0.1).clip2 * 0.1; 

}.play;

)




// mehreren unit generatoren

(

{ 

var a = SinOsc.ar(440 * [1, 6/5, 3/2]);

var b = a * LFPulse.kr([1, 1.3, 1.56], 0, 0.1);

b.sum * 0.1 

}.play;

)


UGen.dumpClassSubtree;


// mehrere synth gleichzeitig: /////////////////////////////////


(

{ 

var a = SinOsc.ar(440 * [1, 6/5, 3/2]);

var b = a ** SinOsc.ar(0.3);

(b.sum * 0.1).clip2 * 0.1;

}.play;

)


//////// Synth Definition


(

SynthDef(\expsin, { |freq = 440, fmod = 0.3, pan, out, amp = 0.1, sustain=1.0|

var a = SinOsc.ar(freq * [1, 6/5, 3/2]);

var b = a ** SinOsc.ar(fmod);

var c = b.sum.clip2 * Line.kr(amp, 0, sustain, doneAction:2);

Out.ar(out, Pan2.ar(c, pan))

}).store; 


)


(instrument: \expsin, fmod: 0.3, freq:330, sustain: 4).play;

(instrument: \expsin, fmod: 0.3, freq:220, sustain: 4).play;


(instrument: \expsin, fmod: 20.0.rand, freq:120 + 100.0.rand, sustain: 2).play;




(

SynthDef(\expsin, { |freq = 440, fmod = 0.3, ffreq = 600, pan, out, amp = 0.1, sustain=1.0|

var a = SinOsc.ar(freq * [1, 6/5, 3/2]);

var b = a ** SinOsc.ar(fmod);

var c = b.sum.clip2 * Line.kr(amp, 0, sustain, doneAction:2);

c = BPF.ar(c, ffreq, 0.3);

Out.ar(out, Pan2.ar(c, pan))

}).store;

)


(instrument: \expsin, fmod: 20.0.rand, freq:120 + 100.0.rand, sustain: 2, ffreq: 100 + 1500.0.rand).play;