( // basic synth SynthDef
SynthDef(\blipo, { | out, freq = 440, amp = 0.1, nharms = 10, pan = 0, gate = 1, sustain, attack=0.1 |
    var audio = Blip.ar(freq * (SinOsc.kr(3).range(1,1.01)), nharms, amp);
    var env = Linen.kr(gate, attackTime: attack, releaseTime: sustain, doneAction: Done.freeSelf); 
    OffsetOut.ar(out, Pan2.ar(audio, pan, env) );
}).add;

// reverb effect SynthDef
SynthDef("reverbo", { arg outBus = 0, inBus, wet = 0.1;
	var input = In.ar(inBus,2);
	var rev = JPverb.ar(input * wet, t60:6, damp:0.5);
    Out.ar(outBus, input + (rev));
}).add;
)

// create a 'private' 2-chan audio bus
~revbus = Bus.audio(s,2);

(
// start reverb effect on the private bus
~fxRev = Synth("reverbo", [\inBus, ~revbus, \wet, 0.9]);

~dotsP = Pbind(
	\dur, Pflatten(1, Plorenz() * 1),
	\attack, 0.01,
	\octave, 3,
	\nharms, Prand((2..7),500) );

~linesP = Pbind(
	\dur, Pflatten(1, Plorenz() * 5),
	\attack, 3,
	\octave, Prand([2,3,4],inf),
	\nharms, Prand((1..4),80),
	\amp, 0.075 );

~highP = Pbind(
	\dur, Pflatten(1, Plorenz() * 5),
	\attack, 3,
	\octave, 5,
	\nharms, Prand((1..3),50),
	\amp, 0.008 );

Pbindf(
	Ptpar([ 0, ~dotsP, 60, ~linesP, 160, ~highP]),
	\instrument, \blipo,
	\degree, (Pflatten(1, Plorenz()) * 18).asInteger,
	\mtranspose, Prand([Pn(0,24),Pn(2,24),Pn(4,24)], inf),
	\detune, Prand([0,1,0.5,1.5], inf),
	\scale, Scale.minor(\just),
	\legato, Prand((4..7),inf) * 0.2,
	\pan, Prand((-10..10),inf) * 0.1,
	\out, ~revbus
).play;
)




