MM – Giant Steps with Visuals

I spent some time building these visuals for the Giant Steps generative song.

Turns out SC can be really efficient CPU wise.

You’ll need the “ChordSymbol” extension for it to work.

v1.31:
– Added some extra scenes.
– Polished the music a bit more.
– Scene 1c initial translation numbers set.
– Better colors on scene 7c

/////////////////////////////////////////////////////////////////////////////////////
// Generative project based on Coltrane's Giant Steps.
// 2020 - Matias Monteagudo. (Sacco Belmonte)
/////////////////////////////////////////////////////////////////////////////////////
/*

This project consists of synths, sequences, visual scenes and visual sequences.

The code is pretty long so the best way to navigate is to use CTR+F and write where do you wanna go.

As in "Start", it will bring you to this very spot. It will prove useful to navigate through the comments through this document.

*/
/////////////////////////////////////////////////////////////////////////////////////
//Interface settings. Change / Comment out at will. You need to run the memory line, see below.
/////////////////////////////////////////////////////////////////////////////////////
(
// Server.supernova; (In development)
Server.local.options.device = "ASIO : ASIO PreSonus FireStudio";
Server.local.options.sampleRate=48000;
Server.local.options.hardwareBufferSize=128;
Server.local.options.memSize=256000‬‬; //We're gonna need more memory for this one. Evaluate this before booting. If not, you'll get a memory warning and a squeak sound.
s.waitForBoot;
)

/////////////////////////////////////////////////////////////////////////////////////
// Run each section separately.
/////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////
// Reverb.
// Keep an eye on the Nodetree. A "verb" node should appear.
/////////////////////////////////////////////////////////////////////////////////////
(
(
SynthDef(\verb, {
	|in, predelay=0.01, revtime=0.0001, lpf=7000,mix=0.5,amp=1,out=0|
	var dry,wet,temp,sig;
	dry = In.ar(in, 2);
	temp = In.ar(in, 2);
	wet=0;
	temp=DelayN.ar(temp, 0.2, predelay);
	32.do {temp=AllpassN.ar(temp, 0.05, {Rand(0.001,0.05)}!2,revtime);
		temp=LPF.ar(temp,lpf);
		wet=wet+temp;
	};
	sig=XFade2.ar(dry,wet,mix*2-1,amp);
	sig=CompanderD.ar(sig,0.2,1.0,1/12,0.05,0.1,2);
	sig=Limiter.ar(sig,0.9);
	Out.ar(out,sig);
}).add;
);

(
ServerTree.removeAll;
~revBus = Bus.audio(s,2);
~createReverb={~reverbSynth=Synth(\verb, [\mix,0.007, \in, ~revBus])};
ServerTree.add(~createReverb);
s.freeAll;
);
);

//////////////////////////////////////////////////////////////////////////////////////////
// A borderless 1080p window.
// Use ALT+F4 to close it.
//////////////////////////////////////////////////////////////////////////////////////////
(
(
if (w.isNil, {nil}, {w.close});
~width = 1920;
~height = 1080;
~xspeed = 1.5;
~yspeed = 1;
~x = ~width*0.5;
~y = ~height*0.5;
w = Window("Graphs", Rect(0, 0, ~width, ~height), border:false);
w.front;
);

/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
// Synths / Patterns / Scenes / Main Audio and Visual sequence.
/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////
// Synths.
/////////////////////////////////////////////////////////////////////////////////////
(
(
SynthDef(\keys, {
	|gate=1,freq=200,vel=1,atk=0.01,dec=10,sus=0,rel=0.6,cur= -30, op1mul=0.1,op2mul=0.1,op3mul=0.1,op4mul=0.1|
	var env,op1,op2,op3,op4,sig;
	env=EnvGen.kr(Env.adsr(atk,dec,sus,rel,curve:cur),gate,doneAction:3);
	op1=SinOsc.ar(freq*4,mul:vel/2+op1mul);
	op2=SinOsc.ar(freq*3,op1,vel/2+op2mul);
	op3=SinOsc.ar(freq*2,op2,vel/2+op3mul);
	op4=SinOsc.ar(freq+NRand(-2,2,3),op3,vel);
	sig={DelayN.ar(op4,0.2,Rand(0.03,0.06))}!8;
	sig=RHPF.ar(sig,350,1,0.8);
	sig=LeakDC.ar(sig,mul:0.4);
	sig=Splay.ar(sig,0.5,1.3,-0.4);
	Out.ar(~revBus, sig*env);
}).add;
);

(
SynthDef(\melody, {
	|gate=1,freq=200,vel=1,atk=0.01,dec=10,sus=0,rel=1,cur= -30, op1mul=0.1,op2mul=0.1,op3mul=0.1,op4mul=0.1|
	var env,op1,op2,op3,op4,sig;
	env=EnvGen.kr(Env.adsr(atk,dec,sus,rel,curve:cur),gate,doneAction:3);
	op1=SinOsc.ar(freq*6,mul:vel/2+op1mul);
	op2=SinOsc.ar(freq*3,op1,vel/2+op2mul);
	op3=SinOsc.ar(freq*2,op2,vel/2+op3mul);
	op4=WhiteNoise.ar(env*0.1)+SinOsc.ar(freq.lag(0.05)+SinOsc.ar(5,mul:Line.ar(0,60,1,1))*Line.ar(Rand(0.6,1),2,Rand(0.01,0.05),0.5),op3,vel);
	sig=LeakDC.ar(op4,mul:0.3);
	sig=Splay.ar(sig,0.4,0.7,-0.4);
	sig=RLPF.ar(sig,4000,0.2);
	sig=RHPF.ar(sig,300,0.2);
	sig=BPeakEQ.ar(sig,700,0.2,15,0.8);
	sig=sig;
	Out.ar(~revBus, sig*env);
}).add;
);

(
SynthDef(\melodyB, {
	|gate=1,freq=200,vel=1,atk=0.01,dec=10,sus=0,rel=1,cur= -30, op1mul=0.1,op2mul=0.1,op3mul=0.1,op4mul=0.1|
	var env,op1,op2,op3,op4,sig;
	env=EnvGen.kr(Env.adsr(atk,dec,sus,rel,curve:cur),gate,doneAction:3);
	op1=SinOsc.ar(freq*6,mul:vel/2+op1mul);
	op2=SinOsc.ar(freq*3,op1,vel/2+op2mul);
	op3=SinOsc.ar(freq*2,op2,vel/2+op3mul);
	op4=WhiteNoise.ar(env*0.08)+SinOsc.ar(freq.lag(0.2)+SinOsc.ar(5,mul:Line.ar(0,60,1,1))*Line.ar(Rand(0.0006,1),2,Rand(0.0001,0.005),0.5),op3,vel);
	sig=LeakDC.ar(op4,mul:0.3);
	sig=Splay.ar(sig,0.4,0.7,-0.4);
	sig=RLPF.ar(sig,4000,0.2);
	sig=RHPF.ar(sig,300,0.2);
	sig=BPeakEQ.ar(sig,700,0.2,15,0.8);
	sig=sig;
	Out.ar(~revBus, sig*env);
}).add;
);

(
SynthDef(\bass, {
	|gate=1,freq=200,vel=1,atk=0.01,dec=10,sus=0,rel=1,cur= -30, op1mul=0.1,op2mul=0.1,op3mul=0.1,op4mul=0.1|
	var env,op1,op2,op3,op4,sig;
	env=EnvGen.kr(Env.adsr(atk,dec,sus,rel,curve:cur),gate,doneAction:3);
	op1=SinOsc.ar(freq*4,mul:vel/2+op1mul);
	op2=SinOsc.ar(freq*3,op1,vel/2+op2mul);
	op3=SinOsc.ar(freq*2,op2,vel/2+op3mul);
	op4=SinOsc.ar(freq+NRand(-2,2,3),op3,vel);
	sig={DelayN.ar(op4,0.2,Rand(0.03,0.06))}!8;
	sig=LeakDC.ar(sig,mul:0.5);
	sig=Splay.ar(sig,0.5,1.2,0.3);
	Out.ar(~revBus, sig*env);
}).add;
);

(
SynthDef(\ride, {
	|gate=1, vel=0.3|
	var env, sig;
	env=EnvGen.kr(Env.adsr(0.001,0.005,0.03,0.2,vel,-40),gate,doneAction:3);
	sig=WhiteNoise.ar();
	sig=BPF.ar(sig,{Rand(100,37000)}!64,0.016,3.5);
	sig=Splay.ar(sig,1,1,0.4);
	sig=BPeakEQ.ar(sig,4000,0.7,20,0.5);
	sig=LeakDC.ar(sig);
	Out.ar(~revBus, sig*env);
}).add;
);

(
SynthDef(\hat, {
	|gate=1, vel=0.3|
	var env, sig;
	env=EnvGen.kr(Env.adsr(0.03,0.4,0,1,vel,-8),gate,doneAction:3);
	sig=WhiteNoise.ar();
	sig=BPF.ar(sig,{Rand(100,37000)}!64,0.016,3.5);
	sig=Splay.ar(sig,1,0.5,0.4);
	sig=BPeakEQ.ar(sig,4000,0.3,20,0.5);
	sig=LeakDC.ar(sig);
	Out.ar(~revBus, sig*env);
}).add;
);

(
SynthDef(\crash, {
	|gate=1, vel=0.3|
	var env, sig;
	env=EnvGen.kr(Env.adsr(0.01,10,0.3,10,vel,-20),gate,doneAction:3);
	sig=WhiteNoise.ar();
	sig=BPF.ar(sig,{Rand(500,37000)}!16,0.5,1.5);
	sig=Splay.ar(sig,1,1,0.1);
	sig=BPeakEQ.ar(sig,600,0.8,20,0.2);
	sig=LeakDC.ar(sig);
	Out.ar(~revBus, sig*env);
}).add;
);

(
SynthDef(\snare, {
	|gate=1, vel=0.3|
	var env, sig;
	env=EnvGen.kr(Env.adsr(0.001,0.005,1,0.6,vel,-10),gate,doneAction:3);
	sig=WhiteNoise.ar();
	sig=BPF.ar(sig,{Rand(200,1200)}!8,0.2,3.5);
	sig=Splay.ar(sig,1,1,0.3);
	sig=BPeakEQ.ar(sig,150,0.15,32,1);
	sig=BPeakEQ.ar(sig,200,0.15,22,1);
	sig=LeakDC.ar(sig);
	Out.ar(~revBus, sig*env);
}).add;
);

(
SynthDef(\kick, {
	|gate=1, vel=0.3|
	var env, sig;
	env=EnvGen.kr(Env.adsr(0.0001,0.005,1,0.5,vel,-8),gate,doneAction:3);
	sig=WhiteNoise.ar();
	sig=BPF.ar(sig,{Rand(20,40)}!42,0.1,6);
	sig=Splay.ar(sig,1,1,0.1);
	sig=BPeakEQ.ar(sig,70,0.15,32,1);
	sig=BPeakEQ.ar(sig,150,0.15,22,4);
	sig=RLPF.ar(sig,2000);
	sig=RHPF.ar(sig,50,1);
	sig=LeakDC.ar(sig);
	Out.ar(~revBus, sig*env);
}).add;
);
);

/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
// Song
/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////

(
/////////////////////////////////////////////////////////////////////////////////////
TempoClock.tempo= 143 / 120;
/////////////////////////////////////////////////////////////////////////////////////
//Swing
/////////////////////////////////////////////////////////////////////////////////////
(
~swingify = Prout({ |ev|
	var now, nextTime = 0, thisShouldSwing, nextShouldSwing = false, adjust;
	while { ev.notNil } {
		// current time is what was "next" last time
		now = nextTime;
		nextTime = now + ev.delta;
		thisShouldSwing = nextShouldSwing;
		nextShouldSwing = ((nextTime absdif: nextTime.round(ev[\swingBase])) <= (ev[\swingThreshold] ? 0)) and: {
			(nextTime / ev[\swingBase]).round.asInteger.odd
		};
		adjust = ev[\swingBase] * ev[\swingAmount];
		// an odd number here means we're on an off-beat
		if(thisShouldSwing) {
			ev[\timingOffset] = (ev[\timingOffset] ? 0) + adjust;
			// if next note will not swing, this note needs to be shortened
			if(nextShouldSwing.not) {
				ev[\sustain] = ev.use { ~sustain.value } - adjust;
			};
		} {
			// if next note will swing, this note needs to be lengthened
			if(nextShouldSwing) {
				ev[\sustain] = ev.use { ~sustain.value } + adjust;
			};
		};
		ev = ev.yield;
	};
});
);

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

// Patterns

/////////////////////////////////////////////////////////////////////////////////////
// Chords
/////////////////////////////////////////////////////////////////////////////////////
x=Array.fill(4, {rrand(0.1, 1.0)}).normalizeSum; //Creates an array of 4 floats and the total sum is always 1. Used as weights on the chords and solos. (Thank you Codefinger)

//First variation

(
~keys1.stop;
~keys1=Ppar([
	Pseq([
		Pchain(
			~swingify,
			Pbind(\instrument, \keys, \scale, Scale.chromatic, \octave,4,
				\dur, Pseq([1/2,1/2,1/2,1/4,5/4,1/2,1/2,1/2,1/2,1/2,1/4,5/4,1/2,1/4,5/4,1/2,1/4,5/4,1/2,1/4,5/4,1/2,1/4,5/4,1/4,3/4],inf),
				\legato, Prand([1/1,1/2,1/4],inf),
				\degree, Pseq(ChordSymbol.degreeProgression([

					Pwrand([\Bmajor7_B,\Bmajor7_Ds,\Bmajor7_Fs,\Bmajor7_As],x,1),
					Pwrand([\Ddom7_D,\Ddom7_Fs,\Ddom7_A,\Ddom7_C],x,1),
					Pwrand([\Gmajor7_G,\Gmajor7_As,\Gmajor7_B,\Gmajor7_E],x, 1),
					Pwrand([\Bbdom7_Bb,\Bbdom7_D,\Bbdom7_F,\Bbdom7_A],x, 1),
					Pwrand([\Ebmajor7_Eb,\Ebmajor7_G,\Ebmajor7_Bb,\Ebmajor7_D],x, 1),
					Pwrand([\Aminor7_A,\Aminor7_C,\Aminor7_E,\Aminor7_G],x, 1),
					Pwrand([\Ddom7_D,\Ddom7_Fs,\Ddom7_A,\Ddom7_C],x, 1),

					Pwrand([\Gmajor7_G,\Gmajor7_As,\Gmajor7_B,\Gmajor7_E],x, 1),
					Pwrand([\Bbdom7_Bb,\Bbdom7_D,\Bbdom7_F,\Bbdom7_A],x, 1),
					Pwrand([\Ebmajor7_Eb,\Ebmajor7_G,\Ebmajor7_Bb,\Ebmajor7_D],x, 1),
					Pwrand([\Gbdom7_Gb,\Gbdom7_Bb,\Gbdom7_Db,\Gbdom7_Fb],x,1),
					Pwrand([\Bmajor7_B,\Bmajor7_Ds,\Bmajor7_Fs,\Bmajor7_As],x,1),
					Pwrand([\Fminor7_F,\Fminor7_Ab,\Fminor7_C,\Fminor7_E],x,1),
					Pwrand([\Bbdom7_Bb,\Bbdom7_D,\Bbdom7_F,\Bbdom7_A],x, 1),

					Pwrand([\Ebmajor7_Eb,\Ebmajor7_G,\Ebmajor7_Bb,\Ebmajor7_D],x, 1),
					Pwrand([\Aminor7_A,\Aminor7_C,\Aminor7_E,\Aminor7_G],x, 1),
					Pwrand([\Ddom7_D,\Ddom7_Fs,\Ddom7_A,\Ddom7_C],x, 1),
					Pwrand([\Gmajor7_G,\Gmajor7_As,\Gmajor7_B,\Gmajor7_E],x, 1),
					Pwrand([\Csminor7_Cs,\Csminor7_E,\Csminor7_Gs,\Csminor7_B],x,1),
					Pwrand([\Fsdom7_F,\Fsdom7_As,\Fsdom7_Cs,\Fsdom7_E],x,1),
					Pwrand([\Bmajor7_B,\Bmajor7_Ds,\Bmajor7_Fs,\Bmajor7_As],x,1),

					Pwrand([\Fminor7_F,\Fminor7_Ab,\Fminor7_C,\Fminor7_E],x,1),
					Pwrand([\Bbdom7_Bb,\Bbdom7_D,\Bbdom7_F,\Bbdom7_A],x, 1),
					Pwrand([\Ebmajor7_Eb,\Ebmajor7_G,\Ebmajor7_Bb,\Ebmajor7_D],x, 1),
					Pwrand([\Csminor7_Cs,\Csminor7_E,\Csminor7_Gs,\Csminor7_B],x,1),
					Pwrand([\Fsdom7_F,\Fsdom7_As,\Fsdom7_Cs,\Fsdom7_E],x,1),

				]),1),

				\vel, Pwhite(0.3,0.5,inf),
				\op1mul, Prand([0.1,0.5],inf),
				\op2mul, Prand([0.1,0.5],inf),
				\op3mul, Prand([0.1,0.5],inf),
			),
			(swingBase: 0.25, swingAmount: 0.7)
		),
		Pfuncn({ q.stop; Event.silent(0) }, 1)
	])
]);
);

//Second variation

(
~keys2.stop;
~keys2=Ppar([
	Pseq([
		Pchain(
			~swingify,
			Pbind(\instrument, \keys, \scale, Scale.chromatic, \octave,4,
				\dur, Pseq([1/2,1/2,1/2,1/4,7/16,13/16,1/2,1/2,1/2,1/2,1/2,1/4,7/16,13/16,1/2,1/4,5/4,1/2,1/4,7/16,13/16,1/2,1/4,5/4,1/2,1/4,7/16,13/16,1/4,3/4],inf),
				\legato, Prand([1/8,1/8],inf),
				\degree, Pseq(ChordSymbol.degreeProgression([

					Pwrand([\Bmajor7_B,\Bmajor7_Ds,\Bmajor7_Fs,\Bmajor7_As],x,1),
					Pwrand([\Ddom7_D,\Ddom7_Fs,\Ddom7_A,\Ddom7_C],x,1),
					Pwrand([\Gmajor7_G,\Gmajor7_As,\Gmajor7_B,\Gmajor7_E],x, 1),
					Pwrand([\Bbdom7_Bb,\Bbdom7_D,\Bbdom7_F,\Bbdom7_A],x, 1),
					\Ebmajor7_G.asNotes,
					\Ebmajor7_G.asNotes,
					Pwrand([\Aminor7_A,\Aminor7_C,\Aminor7_E,\Aminor7_G],x, 1),
					Pwrand([\Ddom7_D,\Ddom7_Fs,\Ddom7_A,\Ddom7_C],x, 1),

					Pwrand([\Gmajor7_G,\Gmajor7_As,\Gmajor7_B,\Gmajor7_E],x, 1),
					Pwrand([\Bbdom7_Bb,\Bbdom7_D,\Bbdom7_F,\Bbdom7_A],x, 1),
					Pwrand([\Ebmajor7_Eb,\Ebmajor7_G,\Ebmajor7_Bb,\Ebmajor7_D],x, 1),
					Pwrand([\Gbdom7_Gb,\Gbdom7_Bb,\Gbdom7_Db,\Gbdom7_Fb],x,1),
					\Bmajor7_Ds.asNotes,
					\Bmajor7_Ds.asNotes,
					Pwrand([\Fminor7_F,\Fminor7_Ab,\Fminor7_C,\Fminor7_E],x,1),
					Pwrand([\Bbdom7_Bb,\Bbdom7_D,\Bbdom7_F,\Bbdom7_A],x, 1),

					Pwrand([\Ebmajor7_Eb,\Ebmajor7_G,\Ebmajor7_Bb,\Ebmajor7_D],x, 1),
					Pwrand([\Aminor7_A,\Aminor7_C,\Aminor7_E,\Aminor7_G],x, 1),
					Pwrand([\Ddom7_D,\Ddom7_Fs,\Ddom7_A,\Ddom7_C],x, 1),
					\Gmajor7_As.asNotes,
					\Gmajor7_As.asNotes,
					Pwrand([\Csminor7_Cs,\Csminor7_E,\Csminor7_Gs,\Csminor7_B],x,1),
					Pwrand([\Fsdom7_F,\Fsdom7_As,\Fsdom7_Cs,\Fsdom7_E],x,1),
					Pwrand([\Bmajor7_B,\Bmajor7_Ds,\Bmajor7_Fs,\Bmajor7_As],x,1),

					Pwrand([\Fminor7_F,\Fminor7_Ab,\Fminor7_C,\Fminor7_E],x,1),
					Pwrand([\Bbdom7_Bb,\Bbdom7_D,\Bbdom7_F,\Bbdom7_A],x, 1),
					\Ebmajor7_G.asNotes,
					\Ebmajor7_G.asNotes,
					Pwrand([\Csminor7_Cs,\Csminor7_E,\Csminor7_Gs,\Csminor7_B],x,1),
					Pwrand([\Fsdom7_F,\Fsdom7_As,\Fsdom7_Cs,\Fsdom7_E],x,1),

				]),1),

				\vel, Pwhite(0.3,0.5,inf),
				\op1mul, Prand([0.1,0.5],inf),
				\op2mul, Prand([0.1,0.5],inf),
				\op3mul, Prand([0.1,0.5],inf),
			),
			(swingBase: 0.25, swingAmount: 0.7)
		),
		Pfuncn({ q.stop; Event.silent(0) }, 1)
	])
]);
);

/////////////////////////////////////////////////////////////////////////////////////
// Main theme
/////////////////////////////////////////////////////////////////////////////////////
(
~melody1.stop;
~melody1=Ppar([
	Pseq([
		Pchain(
			~swingify,
			PmonoArtic(\melody, \scale, Scale.chromatic, \octave,5,
				\dur, Pseq([
1/2,1/2,1/2,1/4,5/4,1/2,1/2,
1/2,1/2,1/2,1/4,5/4,1/2,1/4,
5/4,1/2,1/4,5/4,1/2,1/4,5/4,1/2,1/4,5/4,1/4,3/4],2),
				\legato, Prand([1/1.2,1/1.5],inf),
				\degree, Pseq([6,2,-1,-5,-2,-1,-3,2,-2,-5,-9,-6,-5,-7,-2,-1,-3,2,3,1,6,7,7,10,6,6],2),
				\vel, Pseq([0.3,0.35,0.3,0.35],inf),
				\op1mul, Pwhite(1,2,inf),
				\op2mul, Pwhite(1,2,inf),
				\op3mul, Pexprand(0.8,1,inf),
				\atk, Pexprand(0.07, 1,inf),
				\dec, 0.2,
				\sus, 0.2
			),
			(swingBase: 0.25, swingAmount: 0.7)
		),
		Pfuncn({ q.stop; Event.silent(0) }, 1)
	])
])
);

/////////////////////////////////////////////////////////////////////////////////////
// Improv Sax solo
/////////////////////////////////////////////////////////////////////////////////////

//First variation

(
~melody2a.stop;
~melody2a=Ppar([
	Pseq([
		Pchain(
			~swingify,
			PmonoArtic(\melodyB, \scale, Scale.chromatic, \octave,5,
				\dur, Pwrand([
					Pseq([1/8,1/8,1/8,1/8,1/8,1/8,1/8,1/8,1/8,1/8,1/8,1/8,1/8,1/8,1/8,1/8],1),
					Pseq([1/4,1/16,1/16,1/8],1),
					Pseq([1/8,1/16,1/16,1/4],1)
				],
				[0.6,0.2,0.2],inf),

				\legato, Prand([1/1.2,1/1.3,1/1.5,1],inf),
				\degree, Pseq(ChordSymbol.degreeProgression([

					Pwrand([Pseq(\Bmajor7_B.asNotes,1),Pseq(\Bmajor7_Ds.asNotes,1),Pseq(\Bmajor7_Fs.asNotes,1),Pseq(\Bmajor7_As.asNotes,1)],x,1),
					Pwrand([Pseq(\Ddom7_D.asNotes,1),Pseq(\Ddom7_Fs.asNotes,1),Pseq(\Ddom7_A.asNotes,1),Pseq(\Ddom7_C.asNotes,1)],x,1),
					Pwrand([Pseq(\Gmajor7_G.asNotes.reverse,1),Pseq(\Gmajor7_As.asNotes.reverse,1),Pseq(\Gmajor7_B.asNotes.reverse,1),Pseq(\Gmajor7_E.asNotes.reverse,1)],x, 1),
					Pwrand([Pseq(\Bbdom7_Bb.asNotes,1),Pseq(\Bbdom7_D.asNotes,1),Pseq(\Bbdom7_F.asNotes,1),Pseq(\Bbdom7_A.asNotes,1)],x, 1),
					Pwrand([Pseq(\Ebmajor7_Eb.asNotes.reverse,1),Pseq(\Ebmajor7_G.asNotes.reverse,1),Pseq(\Ebmajor7_Bb.asNotes.reverse,1),Pseq(\Ebmajor7_D.asNotes.reverse,1)],x, 1),
					Pwrand([Pseq(\Ebmajor7_Eb.asNotes,1),Pseq(\Ebmajor7_G.asNotes,1),Pseq(\Ebmajor7_Bb.asNotes,1),Pseq(\Ebmajor7_D.asNotes,1)],x, 1),
					Pwrand([Pseq(\Aminor7_A.asNotes,1),Pseq(\Aminor7_C.asNotes,1),Pseq(\Aminor7_E.asNotes,1),Pseq(\Aminor7_G.asNotes,1)],x, 1),
					Pwrand([Pseq(\Ddom7_D.asNotes,1),Pseq(\Ddom7_Fs.asNotes,1),Pseq(\Ddom7_A.asNotes,1),Pseq(\Ddom7_C.asNotes,1)],x, 1),

					Pwrand([Pseq(\Gmajor7_G.asNotes,1),Pseq(\Gmajor7_As.asNotes,1),Pseq(\Gmajor7_B.asNotes,1),Pseq(\Gmajor7_E.asNotes,1)],x, 1),
					Pwrand([Pseq(\Bbdom7_Bb.asNotes,1),Pseq(\Bbdom7_D.asNotes,1),Pseq(\Bbdom7_F.asNotes,1),Pseq(\Bbdom7_A.asNotes,1)],x, 1),
					Pwrand([Pseq(\Ebmajor7_Eb.asNotes.reverse,1),Pseq(\Ebmajor7_G.asNotes.reverse,1),Pseq(\Ebmajor7_Bb.asNotes.reverse,1),Pseq(\Ebmajor7_D.asNotes.reverse,1)],x, 1),
					Pwrand([Pseq(\Gbdom7_Gb.asNotes.reverse,1),Pseq(\Gbdom7_Bb.asNotes.reverse,1),Pseq(\Gbdom7_Db.asNotes.reverse,1),Pseq(\Gbdom7_Fb.asNotes.reverse,1)],x,1),
					Pwrand([Pseq(\Bmajor7_B.asNotes,1),Pseq(\Bmajor7_Ds.asNotes,1),Pseq(\Bmajor7_Fs.asNotes,1),Pseq(\Bmajor7_As.asNotes,1)],x,1),
					Pwrand([Pseq(\Bmajor7_B.asNotes.reverse,1),Pseq(\Bmajor7_Ds.asNotes.reverse,1),Pseq(\Bmajor7_Fs.asNotes.reverse,1),Pseq(\Bmajor7_As.asNotes.reverse,1)],x,1),
					Pwrand([Pseq(\Fminor7_F.asNotes,1),Pseq(\Fminor7_Ab.asNotes,1),Pseq(\Fminor7_C.asNotes,1),Pseq(\Fminor7_E.asNotes,1)],x,1),
					Pwrand([Pseq(\Bbdom7_Bb.asNotes,1),Pseq(\Bbdom7_D.asNotes,1),Pseq(\Bbdom7_F.asNotes,1),Pseq(\Bbdom7_A.asNotes,1)],x, 1),

					Pwrand([Pseq(\Ebmajor7_Eb.asNotes,1),Pseq(\Ebmajor7_G.asNotes,1),Pseq(\Ebmajor7_Bb.asNotes,1),Pseq(\Ebmajor7_D.asNotes,1)],x, 1),
					Pwrand([Pseq(\Ebmajor7_Eb.asNotes,1),Pseq(\Ebmajor7_G.asNotes,1),Pseq(\Ebmajor7_Bb.asNotes,1),Pseq(\Ebmajor7_D.asNotes,1)],x, 1),
					Pwrand([Pseq(\Aminor7_A.asNotes,1),Pseq(\Aminor7_C.asNotes,1),Pseq(\Aminor7_E.asNotes,1),Pseq(\Aminor7_G.asNotes,1)],x, 1),
					Pwrand([Pseq(\Ddom7_D.asNotes,1),Pseq(\Ddom7_Fs.asNotes,1),Pseq(\Ddom7_A.asNotes,1),Pseq(\Ddom7_C.asNotes,1)],x, 1),
					Pwrand([Pseq(\Gmajor7_G.asNotes.reverse,1),Pseq(\Gmajor7_As.asNotes.reverse,1),Pseq(\Gmajor7_B.asNotes.reverse,1),Pseq(\Gmajor7_E.asNotes.reverse,1)],x, 1),
					Pwrand([Pseq(\Gmajor7_G.asNotes.reverse,1),Pseq(\Gmajor7_As.asNotes.reverse,1),Pseq(\Gmajor7_B.asNotes.reverse,1),Pseq(\Gmajor7_E.asNotes.reverse,1)],x, 1),
					Pwrand([Pseq(\Csminor7_Cs.asNotes,1),Pseq(\Csminor7_E.asNotes,1),Pseq(\Csminor7_Gs.asNotes,1),Pseq(\Csminor7_B.asNotes,1)],x,1),
					Pwrand([Pseq(\Fsdom7_F.asNotes.reverse,1),Pseq(\Fsdom7_As.asNotes.reverse,1),Pseq(\Fsdom7_Cs.asNotes.reverse,1),Pseq(\Fsdom7_E.asNotes.reverse,1)],x,1),
					Pwrand([Pseq(\Bmajor7_B.asNotes,1),Pseq(\Bmajor7_Ds.asNotes,1),Pseq(\Bmajor7_Fs.asNotes,1),Pseq(\Bmajor7_As.asNotes,1)],x,1),
					Pwrand([Pseq(\Bmajor7_B.asNotes.reverse,1),Pseq(\Bmajor7_Ds.asNotes.reverse,1),Pseq(\Bmajor7_Fs.asNotes.reverse,1),Pseq(\Bmajor7_As.asNotes.reverse,1)],x,1),

					Pwrand([Pseq(\Fminor7_F.asNotes,1),Pseq(\Fminor7_Ab.asNotes,1),Pseq(\Fminor7_C.asNotes,1),Pseq(\Fminor7_E.asNotes,1)],x,1),
					Pwrand([Pseq(\Bbdom7_Bb.asNotes,1),Pseq(\Bbdom7_D.asNotes,1),Pseq(\Bbdom7_F.asNotes,1),Pseq(\Bbdom7_A.asNotes,1)],x, 1),
					Pwrand([Pseq(\Ebmajor7_Eb.asNotes,1),Pseq(\Ebmajor7_G.asNotes,1),Pseq(\Ebmajor7_Bb.asNotes,1),Pseq(\Ebmajor7_D.asNotes,1)],x, 1),
					Pwrand([Pseq(\Ebmajor7_Eb.asNotes,1),Pseq(\Ebmajor7_G.asNotes,1),Pseq(\Ebmajor7_Bb.asNotes,1),Pseq(\Ebmajor7_D.asNotes,1)],x, 1),
					Pwrand([Pseq(\Csminor7_Cs.asNotes.reverse,1),Pseq(\Csminor7_E.asNotes.reverse,1),Pseq(\Csminor7_Gs.asNotes.reverse,1),Pseq(\Csminor7_B.asNotes.reverse,1)],x,1),
					Pwrand([Pseq(\Fsdom7_F.asNotes.reverse,1),Pseq(\Fsdom7_As.asNotes.reverse,1),Pseq(\Fsdom7_Cs.asNotes.reverse,1),Pseq(\Fsdom7_E.asNotes.reverse,1)],x,1),

				]),1),
				\vel, Pwrand([Pseq([0.2,0.2,0.25,0.25]*1.35,1), Pseq([0,0,0.2,0,0.2,0.3,0.2]*1.35,1), Pseq([0,0,0.2,0,0.2,0,0.2]*1.35,1),Pseq([0.2,0.2,0.2,0.3,0.2,0.2,0.2,0.3]*1.35,1)],[0.4,0.25,0.25,0.1],inf),
				\op1mul, Pexprand(1,2,inf),
				\op2mul, Pexprand(1,2,inf),
				\op3mul, Pexprand(0.4,2,inf),
				\atk, Pexprand(0.3, 1,inf),
				\dec, 0.2,
				\sus, 0.2
			),
			(swingBase: 0.125, swingAmount: 0.25)
		),
		Pfuncn({ q.stop; Event.silent(0) }, 1)
	])
])
);

//Second variation

(
~melody2b.stop;
~melody2b=Ppar([
	Pseq([
		Pchain(
			~swingify,
			PmonoArtic(\melodyB, \scale, Scale.chromatic, \octave,5,
				\dur, Pwrand([
					Pseq([1/8,1/8,1/8,1/8,1/8,1/8,1/8,1/8,1/8,1/8,1/8,1/8,1/8,1/8,1/8,1/8],1),
					Pseq([1/4,1/16,1/16,1/8],1),
					Pseq([1/8,1/16,1/16,1/4],1),
					Pseq([1/16,3/8,1/32,1/32],1),
					Pseq([3/8,1/16,1/32,1/32],1),
					Pseq([1/16,1/32,1/32,3/8],1)
				],
				[0.1666,0.1666,0.1666,0.1666,0.1666,0.1666],inf),

				\legato, Prand([1/1.2,1/1.3,1/1.5,1],inf),
				\degree, Pseq(ChordSymbol.degreeProgression([

					Pwrand([Pseq(\Bmajor7_B.asNotes,1),Pseq(\Bmajor7_Ds.asNotes,1),Pseq(\Bmajor7_Fs.asNotes,1),Pseq(\Bmajor7_As.asNotes,1)],x,1),
					Pwrand([Pseq(\Ddom7_D.asNotes,1),Pseq(\Ddom7_Fs.asNotes,1),Pseq(\Ddom7_A.asNotes,1),Pseq(\Ddom7_C.asNotes,1)],x,1),
					Pwrand([Pseq(\Gmajor7_G.asNotes.reverse,1),Pseq(\Gmajor7_As.asNotes.reverse,1),Pseq(\Gmajor7_B.asNotes.reverse,1),Pseq(\Gmajor7_E.asNotes.reverse,1)],x, 1),
					Pwrand([Pseq(\Bbdom7_Bb.asNotes,1),Pseq(\Bbdom7_D.asNotes,1),Pseq(\Bbdom7_F.asNotes,1),Pseq(\Bbdom7_A.asNotes,1)],x, 1),
					Pwrand([Pseq(\Ebmajor7_Eb.asNotes.reverse,1),Pseq(\Ebmajor7_G.asNotes.reverse,1),Pseq(\Ebmajor7_Bb.asNotes.reverse,1),Pseq(\Ebmajor7_D.asNotes.reverse,1)],x, 1),
					Pwrand([Pseq(\Ebmajor7_Eb.asNotes,1),Pseq(\Ebmajor7_G.asNotes,1),Pseq(\Ebmajor7_Bb.asNotes,1),Pseq(\Ebmajor7_D.asNotes,1)],x, 1),
					Pwrand([Pseq(\Aminor7_A.asNotes,1),Pseq(\Aminor7_C.asNotes,1),Pseq(\Aminor7_E.asNotes,1),Pseq(\Aminor7_G.asNotes,1)],x, 1),
					Pwrand([Pseq(\Ddom7_D.asNotes,1),Pseq(\Ddom7_Fs.asNotes,1),Pseq(\Ddom7_A.asNotes,1),Pseq(\Ddom7_C.asNotes,1)],x, 1),

					Pwrand([Pseq(\Gmajor7_G.asNotes,1),Pseq(\Gmajor7_As.asNotes,1),Pseq(\Gmajor7_B.asNotes,1),Pseq(\Gmajor7_E.asNotes,1)],x, 1),
					Pwrand([Pseq(\Bbdom7_Bb.asNotes,1),Pseq(\Bbdom7_D.asNotes,1),Pseq(\Bbdom7_F.asNotes,1),Pseq(\Bbdom7_A.asNotes,1)],x, 1),
					Pwrand([Pseq(\Ebmajor7_Eb.asNotes.reverse,1),Pseq(\Ebmajor7_G.asNotes.reverse,1),Pseq(\Ebmajor7_Bb.asNotes.reverse,1),Pseq(\Ebmajor7_D.asNotes.reverse,1)],x, 1),
					Pwrand([Pseq(\Gbdom7_Gb.asNotes.reverse,1),Pseq(\Gbdom7_Bb.asNotes.reverse,1),Pseq(\Gbdom7_Db.asNotes.reverse,1),Pseq(\Gbdom7_Fb.asNotes.reverse,1)],x,1),
					Pwrand([Pseq(\Bmajor7_B.asNotes,1),Pseq(\Bmajor7_Ds.asNotes,1),Pseq(\Bmajor7_Fs.asNotes,1),Pseq(\Bmajor7_As.asNotes,1)],x,1),
					Pwrand([Pseq(\Bmajor7_B.asNotes.reverse,1),Pseq(\Bmajor7_Ds.asNotes.reverse,1),Pseq(\Bmajor7_Fs.asNotes.reverse,1),Pseq(\Bmajor7_As.asNotes.reverse,1)],x,1),
					Pwrand([Pseq(\Fminor7_F.asNotes,1),Pseq(\Fminor7_Ab.asNotes,1),Pseq(\Fminor7_C.asNotes,1),Pseq(\Fminor7_E.asNotes,1)],x,1),
					Pwrand([Pseq(\Bbdom7_Bb.asNotes,1),Pseq(\Bbdom7_D.asNotes,1),Pseq(\Bbdom7_F.asNotes,1),Pseq(\Bbdom7_A.asNotes,1)],x, 1),

					Pwrand([Pseq(\Ebmajor7_Eb.asNotes,1),Pseq(\Ebmajor7_G.asNotes,1),Pseq(\Ebmajor7_Bb.asNotes,1),Pseq(\Ebmajor7_D.asNotes,1)],x, 1),
					Pwrand([Pseq(\Ebmajor7_Eb.asNotes,1),Pseq(\Ebmajor7_G.asNotes,1),Pseq(\Ebmajor7_Bb.asNotes,1),Pseq(\Ebmajor7_D.asNotes,1)],x, 1),
					Pwrand([Pseq(\Aminor7_A.asNotes,1),Pseq(\Aminor7_C.asNotes,1),Pseq(\Aminor7_E.asNotes,1),Pseq(\Aminor7_G.asNotes,1)],x, 1),
					Pwrand([Pseq(\Ddom7_D.asNotes,1),Pseq(\Ddom7_Fs.asNotes,1),Pseq(\Ddom7_A.asNotes,1),Pseq(\Ddom7_C.asNotes,1)],x, 1),
					Pwrand([Pseq(\Gmajor7_G.asNotes.reverse,1),Pseq(\Gmajor7_As.asNotes.reverse,1),Pseq(\Gmajor7_B.asNotes.reverse,1),Pseq(\Gmajor7_E.asNotes.reverse,1)],x, 1),
					Pwrand([Pseq(\Gmajor7_G.asNotes.reverse,1),Pseq(\Gmajor7_As.asNotes.reverse,1),Pseq(\Gmajor7_B.asNotes.reverse,1),Pseq(\Gmajor7_E.asNotes.reverse,1)],x, 1),
					Pwrand([Pseq(\Csminor7_Cs.asNotes,1),Pseq(\Csminor7_E.asNotes,1),Pseq(\Csminor7_Gs.asNotes,1),Pseq(\Csminor7_B.asNotes,1)],x,1),
					Pwrand([Pseq(\Fsdom7_F.asNotes.reverse,1),Pseq(\Fsdom7_As.asNotes.reverse,1),Pseq(\Fsdom7_Cs.asNotes.reverse,1),Pseq(\Fsdom7_E.asNotes.reverse,1)],x,1),
					Pwrand([Pseq(\Bmajor7_B.asNotes,1),Pseq(\Bmajor7_Ds.asNotes,1),Pseq(\Bmajor7_Fs.asNotes,1),Pseq(\Bmajor7_As.asNotes,1)],x,1),
					Pwrand([Pseq(\Bmajor7_B.asNotes.reverse,1),Pseq(\Bmajor7_Ds.asNotes.reverse,1),Pseq(\Bmajor7_Fs.asNotes.reverse,1),Pseq(\Bmajor7_As.asNotes.reverse,1)],x,1),

					Pwrand([Pseq(\Fminor7_F.asNotes,1),Pseq(\Fminor7_Ab.asNotes,1),Pseq(\Fminor7_C.asNotes,1),Pseq(\Fminor7_E.asNotes,1)],x,1),
					Pwrand([Pseq(\Bbdom7_Bb.asNotes,1),Pseq(\Bbdom7_D.asNotes,1),Pseq(\Bbdom7_F.asNotes,1),Pseq(\Bbdom7_A.asNotes,1)],x, 1),
					Pwrand([Pseq(\Ebmajor7_Eb.asNotes,1),Pseq(\Ebmajor7_G.asNotes,1),Pseq(\Ebmajor7_Bb.asNotes,1),Pseq(\Ebmajor7_D.asNotes,1)],x, 1),
					Pwrand([Pseq(\Ebmajor7_Eb.asNotes,1),Pseq(\Ebmajor7_G.asNotes,1),Pseq(\Ebmajor7_Bb.asNotes,1),Pseq(\Ebmajor7_D.asNotes,1)],x, 1),
					Pwrand([Pseq(\Csminor7_Cs.asNotes.reverse,1),Pseq(\Csminor7_E.asNotes.reverse,1),Pseq(\Csminor7_Gs.asNotes.reverse,1),Pseq(\Csminor7_B.asNotes.reverse,1)],x,1),
					Pwrand([Pseq(\Fsdom7_F.asNotes.reverse,1),Pseq(\Fsdom7_As.asNotes.reverse,1),Pseq(\Fsdom7_Cs.asNotes.reverse,1),Pseq(\Fsdom7_E.asNotes.reverse,1)],x,1),

				]),1),
				\vel, Pwrand([Pseq([0.2,0.2,0.25,0.25]*1.35,1), Pseq([0,0,0.2,0,0.2,0.3,0.2]*1.35,1), Pseq([0,0,0.2,0,0.2,0,0.2]*1.35,1),Pseq([0.2,0.2,0.2,0.3,0.2,0.2,0.2,0.3]*1.35,1)],[0.4,0.25,0.25,0.1],inf),
				\op1mul, Pexprand(1,2,inf),
				\op2mul, Pexprand(1,2,inf),
				\op3mul, Pexprand(0.4,2,inf),
				\atk, Pexprand(0.3, 1,inf),
				\dec, 0.2,
				\sus, 0.2
			),
			(swingBase: 0.125, swingAmount: 0.25)
		),
		Pfuncn({ q.stop; Event.silent(0) }, 1)
	])
])
);

//Third variation

(
~melody2c.stop;
~melody2c=Ppar([
	Pseq([
		Pchain(
			~swingify,
			PmonoArtic(\melodyB, \scale, Scale.chromatic, \octave,5,
				\dur, Pwrand([
					Pseq([1/4,1/16,1/16,1/8],1),
					Pseq([1/8,1/16,1/16,1/4],1),
					Pseq([1/16,3/8,1/32,1/32],1),
					Pseq([3/8,1/16,1/32,1/32],1),
					Pseq([1/16,1/32,1/32,3/8],1)
				],
				[0.2,0.2,0.2,0.2,0.2],inf),

				\legato, Prand([1/1.2,1/1.3,1/1.5,1],inf),
				\degree, Pseq(ChordSymbol.degreeProgression([

					Pwrand([Pseq(\Bmajor7_B.asNotes,1),Pseq(\Bmajor7_Ds.asNotes,1),Pseq(\Bmajor7_Fs.asNotes,1),Pseq(\Bmajor7_As.asNotes,1)],x,1),
					Pwrand([Pseq(\Ddom7_D.asNotes,1),Pseq(\Ddom7_Fs.asNotes,1),Pseq(\Ddom7_A.asNotes,1),Pseq(\Ddom7_C.asNotes,1)],x,1),
					Pwrand([Pseq(\Gmajor7_G.asNotes.reverse,1),Pseq(\Gmajor7_As.asNotes.reverse,1),Pseq(\Gmajor7_B.asNotes.reverse,1),Pseq(\Gmajor7_E.asNotes.reverse,1)],x, 1),
					Pwrand([Pseq(\Bbdom7_Bb.asNotes,1),Pseq(\Bbdom7_D.asNotes,1),Pseq(\Bbdom7_F.asNotes,1),Pseq(\Bbdom7_A.asNotes,1)],x, 1),
					Pwrand([Pseq(\Ebmajor7_Eb.asNotes.reverse,1),Pseq(\Ebmajor7_G.asNotes.reverse,1),Pseq(\Ebmajor7_Bb.asNotes.reverse,1),Pseq(\Ebmajor7_D.asNotes.reverse,1)],x, 1),
					Pwrand([Pseq(\Ebmajor7_Eb.asNotes,1),Pseq(\Ebmajor7_G.asNotes,1),Pseq(\Ebmajor7_Bb.asNotes,1),Pseq(\Ebmajor7_D.asNotes,1)],x, 1),
					Pwrand([Pseq(\Aminor7_A.asNotes,1),Pseq(\Aminor7_C.asNotes,1),Pseq(\Aminor7_E.asNotes,1),Pseq(\Aminor7_G.asNotes,1)],x, 1),
					Pwrand([Pseq(\Ddom7_D.asNotes,1),Pseq(\Ddom7_Fs.asNotes,1),Pseq(\Ddom7_A.asNotes,1),Pseq(\Ddom7_C.asNotes,1)],x, 1),

					Pwrand([Pseq(\Gmajor7_G.asNotes,1),Pseq(\Gmajor7_As.asNotes,1),Pseq(\Gmajor7_B.asNotes,1),Pseq(\Gmajor7_E.asNotes,1)],x, 1),
					Pwrand([Pseq(\Bbdom7_Bb.asNotes,1),Pseq(\Bbdom7_D.asNotes,1),Pseq(\Bbdom7_F.asNotes,1),Pseq(\Bbdom7_A.asNotes,1)],x, 1),
					Pwrand([Pseq(\Ebmajor7_Eb.asNotes.reverse,1),Pseq(\Ebmajor7_G.asNotes.reverse,1),Pseq(\Ebmajor7_Bb.asNotes.reverse,1),Pseq(\Ebmajor7_D.asNotes.reverse,1)],x, 1),
					Pwrand([Pseq(\Gbdom7_Gb.asNotes.reverse,1),Pseq(\Gbdom7_Bb.asNotes.reverse,1),Pseq(\Gbdom7_Db.asNotes.reverse,1),Pseq(\Gbdom7_Fb.asNotes.reverse,1)],x,1),
					Pwrand([Pseq(\Bmajor7_B.asNotes,1),Pseq(\Bmajor7_Ds.asNotes,1),Pseq(\Bmajor7_Fs.asNotes,1),Pseq(\Bmajor7_As.asNotes,1)],x,1),
					Pwrand([Pseq(\Bmajor7_B.asNotes.reverse,1),Pseq(\Bmajor7_Ds.asNotes.reverse,1),Pseq(\Bmajor7_Fs.asNotes.reverse,1),Pseq(\Bmajor7_As.asNotes.reverse,1)],x,1),
					Pwrand([Pseq(\Fminor7_F.asNotes,1),Pseq(\Fminor7_Ab.asNotes,1),Pseq(\Fminor7_C.asNotes,1),Pseq(\Fminor7_E.asNotes,1)],x,1),
					Pwrand([Pseq(\Bbdom7_Bb.asNotes,1),Pseq(\Bbdom7_D.asNotes,1),Pseq(\Bbdom7_F.asNotes,1),Pseq(\Bbdom7_A.asNotes,1)],x, 1),

					Pwrand([Pseq(\Ebmajor7_Eb.asNotes,1),Pseq(\Ebmajor7_G.asNotes,1),Pseq(\Ebmajor7_Bb.asNotes,1),Pseq(\Ebmajor7_D.asNotes,1)],x, 1),
					Pwrand([Pseq(\Ebmajor7_Eb.asNotes,1),Pseq(\Ebmajor7_G.asNotes,1),Pseq(\Ebmajor7_Bb.asNotes,1),Pseq(\Ebmajor7_D.asNotes,1)],x, 1),
					Pwrand([Pseq(\Aminor7_A.asNotes,1),Pseq(\Aminor7_C.asNotes,1),Pseq(\Aminor7_E.asNotes,1),Pseq(\Aminor7_G.asNotes,1)],x, 1),
					Pwrand([Pseq(\Ddom7_D.asNotes,1),Pseq(\Ddom7_Fs.asNotes,1),Pseq(\Ddom7_A.asNotes,1),Pseq(\Ddom7_C.asNotes,1)],x, 1),
					Pwrand([Pseq(\Gmajor7_G.asNotes.reverse,1),Pseq(\Gmajor7_As.asNotes.reverse,1),Pseq(\Gmajor7_B.asNotes.reverse,1),Pseq(\Gmajor7_E.asNotes.reverse,1)],x, 1),
					Pwrand([Pseq(\Gmajor7_G.asNotes.reverse,1),Pseq(\Gmajor7_As.asNotes.reverse,1),Pseq(\Gmajor7_B.asNotes.reverse,1),Pseq(\Gmajor7_E.asNotes.reverse,1)],x, 1),
					Pwrand([Pseq(\Csminor7_Cs.asNotes,1),Pseq(\Csminor7_E.asNotes,1),Pseq(\Csminor7_Gs.asNotes,1),Pseq(\Csminor7_B.asNotes,1)],x,1),
					Pwrand([Pseq(\Fsdom7_F.asNotes.reverse,1),Pseq(\Fsdom7_As.asNotes.reverse,1),Pseq(\Fsdom7_Cs.asNotes.reverse,1),Pseq(\Fsdom7_E.asNotes.reverse,1)],x,1),
					Pwrand([Pseq(\Bmajor7_B.asNotes,1),Pseq(\Bmajor7_Ds.asNotes,1),Pseq(\Bmajor7_Fs.asNotes,1),Pseq(\Bmajor7_As.asNotes,1)],x,1),
					Pwrand([Pseq(\Bmajor7_B.asNotes.reverse,1),Pseq(\Bmajor7_Ds.asNotes.reverse,1),Pseq(\Bmajor7_Fs.asNotes.reverse,1),Pseq(\Bmajor7_As.asNotes.reverse,1)],x,1),

					Pwrand([Pseq(\Fminor7_F.asNotes,1),Pseq(\Fminor7_Ab.asNotes,1),Pseq(\Fminor7_C.asNotes,1),Pseq(\Fminor7_E.asNotes,1)],x,1),
					Pwrand([Pseq(\Bbdom7_Bb.asNotes,1),Pseq(\Bbdom7_D.asNotes,1),Pseq(\Bbdom7_F.asNotes,1),Pseq(\Bbdom7_A.asNotes,1)],x, 1),
					Pwrand([Pseq(\Ebmajor7_Eb.asNotes,1),Pseq(\Ebmajor7_G.asNotes,1),Pseq(\Ebmajor7_Bb.asNotes,1),Pseq(\Ebmajor7_D.asNotes,1)],x, 1),
					Pwrand([Pseq(\Ebmajor7_Eb.asNotes,1),Pseq(\Ebmajor7_G.asNotes,1),Pseq(\Ebmajor7_Bb.asNotes,1),Pseq(\Ebmajor7_D.asNotes,1)],x, 1),
					Pwrand([Pseq(\Csminor7_Cs.asNotes.reverse,1),Pseq(\Csminor7_E.asNotes.reverse,1),Pseq(\Csminor7_Gs.asNotes.reverse,1),Pseq(\Csminor7_B.asNotes.reverse,1)],x,1),
					Pwrand([Pseq(\Fsdom7_F.asNotes.reverse,1),Pseq(\Fsdom7_As.asNotes.reverse,1),Pseq(\Fsdom7_Cs.asNotes.reverse,1),Pseq(\Fsdom7_E.asNotes.reverse,1)],x,1),

				]),1),
				\vel, Pwrand([Pseq([0.2,0.2,0.25,0.25]*1.35,1), Pseq([0,0,0.2,0,0.2,0.3,0.2]*1.35,1), Pseq([0,0,0.2,0,0.2,0,0.2]*1.35,1),Pseq([0.2,0.2,0.2,0.3,0.2,0.2,0.2,0.3]*1.35,1)],[0.4,0.25,0.25,0.1],inf),
				\op1mul, Pexprand(1,2,inf),
				\op2mul, Pexprand(1,2,inf),
				\op3mul, Pexprand(0.4,2,inf),
				\atk, Pexprand(0.3, 1,inf),
				\dec, 0.2,
				\sus, 0.2
			),
			(swingBase: 0.125, swingAmount: 0.25)
		),
		Pfuncn({ q.stop; Event.silent(0) }, 1)
	])
])
);

/////////////////////////////////////////////////////////////////////////////////////
// Improv Piano solo
/////////////////////////////////////////////////////////////////////////////////////
(
~melody3.stop;
~melody3=Ppar([
	Pseq([
		Pchain(
			~swingify,
			Pbind(\instrument, \keys, \scale, Scale.chromatic, \octave,5,
				\dur, Pwrand([
					Pseq([1/8,1/8,1/8,1/8,1/8,1/8,1/8,1/8,1/8,1/8,1/8,1/8,1/8,1/8,1/8,1/8],1),
					Pseq([1/4,1/16,1/16,1/8],1),
					Pseq([1/8,1/16,1/16,1/4],1)],
				[0.6,0.2,0.2],inf),


				\legato, Prand([2/1,1/1.2,1/1.3,1/1.5,1],inf),
				\degree, Pseq(ChordSymbol.degreeProgression([

					Pwrand([Pseq(\Bmajor7_B.asNotes,1),Pseq(\Bmajor7_Ds.asNotes,1),Pseq(\Bmajor7_Fs.asNotes,1),Pseq(\Bmajor7_As.asNotes,1)],x,1),
					Pwrand([Pseq(\Ddom7_D.asNotes,1),Pseq(\Ddom7_Fs.asNotes,1),Pseq(\Ddom7_A.asNotes,1),Pseq(\Ddom7_C.asNotes,1)],x,1),
					Pwrand([Pseq(\Gmajor7_G.asNotes.reverse,1),Pseq(\Gmajor7_As.asNotes.reverse,1),Pseq(\Gmajor7_B.asNotes.reverse,1),Pseq(\Gmajor7_E.asNotes.reverse,1)],x, 1),
					Pwrand([Pseq(\Bbdom7_Bb.asNotes,1),Pseq(\Bbdom7_D.asNotes,1),Pseq(\Bbdom7_F.asNotes,1),Pseq(\Bbdom7_A.asNotes,1)],x, 1),
					Pwrand([Pseq(\Ebmajor7_Eb.asNotes.reverse,1),Pseq(\Ebmajor7_G.asNotes.reverse,1),Pseq(\Ebmajor7_Bb.asNotes.reverse,1),Pseq(\Ebmajor7_D.asNotes.reverse,1)],x, 1),
					Pwrand([Pseq(\Ebmajor7_Eb.asNotes,1),Pseq(\Ebmajor7_G.asNotes,1),Pseq(\Ebmajor7_Bb.asNotes,1),Pseq(\Ebmajor7_D.asNotes,1)],x, 1),
					Pwrand([Pseq(\Aminor7_A.asNotes,1),Pseq(\Aminor7_C.asNotes,1),Pseq(\Aminor7_E.asNotes,1),Pseq(\Aminor7_G.asNotes,1)],x, 1),
					Pwrand([Pseq(\Ddom7_D.asNotes,1),Pseq(\Ddom7_Fs.asNotes,1),Pseq(\Ddom7_A.asNotes,1),Pseq(\Ddom7_C.asNotes,1)],x, 1),

					Pwrand([Pseq(\Gmajor7_G.asNotes,1),Pseq(\Gmajor7_As.asNotes,1),Pseq(\Gmajor7_B.asNotes,1),Pseq(\Gmajor7_E.asNotes,1)],x, 1),
					Pwrand([Pseq(\Bbdom7_Bb.asNotes,1),Pseq(\Bbdom7_D.asNotes,1),Pseq(\Bbdom7_F.asNotes,1),Pseq(\Bbdom7_A.asNotes,1)],x, 1),
					Pwrand([Pseq(\Ebmajor7_Eb.asNotes.reverse,1),Pseq(\Ebmajor7_G.asNotes.reverse,1),Pseq(\Ebmajor7_Bb.asNotes.reverse,1),Pseq(\Ebmajor7_D.asNotes.reverse,1)],x, 1),
					Pwrand([Pseq(\Gbdom7_Gb.asNotes.reverse,1),Pseq(\Gbdom7_Bb.asNotes.reverse,1),Pseq(\Gbdom7_Db.asNotes.reverse,1),Pseq(\Gbdom7_Fb.asNotes.reverse,1)],x,1),
					Pwrand([Pseq(\Bmajor7_B.asNotes,1),Pseq(\Bmajor7_Ds.asNotes,1),Pseq(\Bmajor7_Fs.asNotes,1),Pseq(\Bmajor7_As.asNotes,1)],x,1),
					Pwrand([Pseq(\Bmajor7_B.asNotes.reverse,1),Pseq(\Bmajor7_Ds.asNotes.reverse,1),Pseq(\Bmajor7_Fs.asNotes.reverse,1),Pseq(\Bmajor7_As.asNotes.reverse,1)],x,1),
					Pwrand([Pseq(\Fminor7_F.asNotes,1),Pseq(\Fminor7_Ab.asNotes,1),Pseq(\Fminor7_C.asNotes,1),Pseq(\Fminor7_E.asNotes,1)],x,1),
					Pwrand([Pseq(\Bbdom7_Bb.asNotes,1),Pseq(\Bbdom7_D.asNotes,1),Pseq(\Bbdom7_F.asNotes,1),Pseq(\Bbdom7_A.asNotes,1)],x, 1),

					Pwrand([Pseq(\Ebmajor7_Eb.asNotes,1),Pseq(\Ebmajor7_G.asNotes,1),Pseq(\Ebmajor7_Bb.asNotes,1),Pseq(\Ebmajor7_D.asNotes,1)],x, 1),
					Pwrand([Pseq(\Ebmajor7_Eb.asNotes,1),Pseq(\Ebmajor7_G.asNotes,1),Pseq(\Ebmajor7_Bb.asNotes,1),Pseq(\Ebmajor7_D.asNotes,1)],x, 1),
					Pwrand([Pseq(\Aminor7_A.asNotes,1),Pseq(\Aminor7_C.asNotes,1),Pseq(\Aminor7_E.asNotes,1),Pseq(\Aminor7_G.asNotes,1)],x, 1),
					Pwrand([Pseq(\Ddom7_D.asNotes,1),Pseq(\Ddom7_Fs.asNotes,1),Pseq(\Ddom7_A.asNotes,1),Pseq(\Ddom7_C.asNotes,1)],x, 1),
					Pwrand([Pseq(\Gmajor7_G.asNotes.reverse,1),Pseq(\Gmajor7_As.asNotes.reverse,1),Pseq(\Gmajor7_B.asNotes.reverse,1),Pseq(\Gmajor7_E.asNotes.reverse,1)],x, 1),
					Pwrand([Pseq(\Gmajor7_G.asNotes.reverse,1),Pseq(\Gmajor7_As.asNotes.reverse,1),Pseq(\Gmajor7_B.asNotes.reverse,1),Pseq(\Gmajor7_E.asNotes.reverse,1)],x, 1),
					Pwrand([Pseq(\Csminor7_Cs.asNotes,1),Pseq(\Csminor7_E.asNotes,1),Pseq(\Csminor7_Gs.asNotes,1),Pseq(\Csminor7_B.asNotes,1)],x,1),
					Pwrand([Pseq(\Fsdom7_F.asNotes.reverse,1),Pseq(\Fsdom7_As.asNotes.reverse,1),Pseq(\Fsdom7_Cs.asNotes.reverse,1),Pseq(\Fsdom7_E.asNotes.reverse,1)],x,1),
					Pwrand([Pseq(\Bmajor7_B.asNotes,1),Pseq(\Bmajor7_Ds.asNotes,1),Pseq(\Bmajor7_Fs.asNotes,1),Pseq(\Bmajor7_As.asNotes,1)],x,1),
					Pwrand([Pseq(\Bmajor7_B.asNotes.reverse,1),Pseq(\Bmajor7_Ds.asNotes.reverse,1),Pseq(\Bmajor7_Fs.asNotes.reverse,1),Pseq(\Bmajor7_As.asNotes.reverse,1)],x,1),

					Pwrand([Pseq(\Fminor7_F.asNotes,1),Pseq(\Fminor7_Ab.asNotes,1),Pseq(\Fminor7_C.asNotes,1),Pseq(\Fminor7_E.asNotes,1)],x,1),
					Pwrand([Pseq(\Bbdom7_Bb.asNotes,1),Pseq(\Bbdom7_D.asNotes,1),Pseq(\Bbdom7_F.asNotes,1),Pseq(\Bbdom7_A.asNotes,1)],x, 1),
					Pwrand([Pseq(\Ebmajor7_Eb.asNotes,1),Pseq(\Ebmajor7_G.asNotes,1),Pseq(\Ebmajor7_Bb.asNotes,1),Pseq(\Ebmajor7_D.asNotes,1)],x, 1),
					Pwrand([Pseq(\Ebmajor7_Eb.asNotes,1),Pseq(\Ebmajor7_G.asNotes,1),Pseq(\Ebmajor7_Bb.asNotes,1),Pseq(\Ebmajor7_D.asNotes,1)],x, 1),
					Pwrand([Pseq(\Csminor7_Cs.asNotes.reverse,1),Pseq(\Csminor7_E.asNotes.reverse,1),Pseq(\Csminor7_Gs.asNotes.reverse,1),Pseq(\Csminor7_B.asNotes.reverse,1)],x,1),
					Pwrand([Pseq(\Fsdom7_F.asNotes.reverse,1),Pseq(\Fsdom7_As.asNotes.reverse,1),Pseq(\Fsdom7_Cs.asNotes.reverse,1),Pseq(\Fsdom7_E.asNotes.reverse,1)],x,1),

				]),1),
				\vel, Pwrand([Pseq([0.2,0.2,0.25,0.25]*2,1), Pseq([0,0,0.2,0,0.2,0.3,0.2]*1.5,1), Pseq([0,0,0.2,0,0.2,0,0.2]*2,1),Pseq([0.2,0.2,0.2,0.3,0.2,0.2,0.2,0.3]*2,1)],[0.4,0.25,0.25,0.1],inf),
				\op1mul, Prand([0.1,0.2],inf),
				\op2mul, Prand([0.1,0.5],inf),
				\op3mul, Prand([0.15,0.35],inf),
				\atk, 0.001,
			),
			(swingBase: 0.125, swingAmount: 0.25)
		),
		Pfuncn({ q.stop; Event.silent(0) }, 1)
	])
])
);

/////////////////////////////////////////////////////////////////////////////////////
// Bass
/////////////////////////////////////////////////////////////////////////////////////
(
~bass.stop;
~bass=Ppar([
	Pseq([
		Pchain(
			~swingify,
			Pbind(\instrument, \bass, \scale, Scale.chromatic, \octave,3,
				\dur, Pseq([
					1/2,1/2,1/2,3/8,3/8,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/2,1/2,1/2,3/8,3/8,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/2,1/2,1/2,3/8,3/8,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/2,1/2,1/2,3/8,3/8,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,

					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,

					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,

					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,

					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,


					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,

					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,

					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,

					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,


					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,

					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,

					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,

					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,


					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,

					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,

					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,

					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,
					1/4,1/4,1/4,1/4,1/4,1/4,1/4,1/4,


				],inf),
				\legato, Prand([1/1.3,1],inf),
				\degree,
				Pseq([
					11,9,7,-2,3,   3,1,0,-2,-4,-5,-3,
					7,5,3,1,-1,     6,11,6,5,7,8,10,
					3,10,7,3,-3,2,4,6,     7,-5,7,-5,4,1,6,-6,
					-1,11,6,-1,-2,-1,1,2,   3,-2,-9,-2,6,1,-6,-6,

					-1,9,7,-2,3,   -2,1,0,-2,-4,-5,-3,
					-5,5,3,1,-1,     6,11,6,5,7,8,10,
					3,10,7,3,-3,2,4,6,     7,-5,7,-5,4,1,6,-6,
					-1,11,6,-1,-2,-1,1,2,   3,-2,-9,-2,6,1,-6,-6,


					11,8,9,8,7,-3,-2,2,    3,3,1,0,-2,-4,-5,-3,
					7,6,5,4,3,-2,-3,-2,     6,10,11,5,6,4,5,6,
					3,10,7,3,-3,2,4,6,     7,-5,7,-5,4,1,6,-6,
					-1,11,6,-1,-2,-1,1,2,   3,-2,-9,-2,6,1,-6,-6,

					-1,10,9,8,7,6,1,2,   3, 2,1,0,-2,-4,-5,-3,
					7,6,5,4,3,-2,1,-2,     -1,10,11,5,6,4,5,6,
					3,10,7,3,-3,2,4,6,     7,-5,7,-5,4,1,6,-6,
					-1,11,6,-1,-2,-1,1,2,   3,-2,-9,-2,6,1,-6,-6,


					11,8,9,8,7,-3,-2,2,    3,3,1,0,-2,-4,-5,-3,
					7,6,5,4,3,-2,-3,-2,     6,10,11,5,6,4,5,6,
					3,10,7,3,-3,2,4,6,     7,-5,7,-5,4,1,6,-6,
					-1,11,6,-1,-2,-1,1,2,   3,-2,-9,-2,6,1,-6,-6,

					-1,10,9,8,7,6,1,2,   3, 2,1,0,-2,-4,-5,-3,
					7,6,5,4,3,-2,1,-2,     -1,10,11,5,6,4,5,6,
					3,10,7,3,-3,2,4,6,     7,-5,7,-5,4,1,6,-6,
					-1,11,6,-1,-2,-1,1,2,   3,-2,-9,-2,6,1,-6,-6,


					11,8,9,8,7,-3,-2,2,    3,3,1,0,-2,-4,-5,-3,
					7,6,5,4,3,-2,-3,-2,     6,10,11,5,6,4,5,6,
					3,10,7,3,-3,2,4,6,     7,-5,7,-5,4,1,6,-6,
					-1,11,6,-1,-2,-1,1,2,   3,-2,-9,-2,6,1,-6,-6,

					-1,10,9,8,7,6,1,2,   3, 2,1,0,-2,-4,-5,-3,
					7,6,5,4,3,-2,1,-2,     -1,10,11,5,6,4,5,6,
					3,10,7,3,-3,2,4,6,     7,-5,7,-5,4,1,6,-6,
					-1,11,6,-1,-2,-1,1,2,   3,-2,-9,-2,6,1,-6,-6,


					11,8,9,8,7,-3,-2,2,    3,3,1,0,-2,-4,-5,-3,
					7,6,5,4,3,-2,-3,-2,     6,10,11,5,6,4,5,6,
					3,10,7,3,-3,2,4,6,     7,-5,7,-5,4,1,6,-6,
					-1,11,6,-1,-2,-1,1,2,   3,-2,-9,-2,6,1,-6,-6,

					-1,10,9,8,7,6,1,2,   3, 2,1,0,-2,-4,-5,-3,
					7,6,5,4,3,-2,1,-2,     -1,10,11,5,6,4,5,6,
					3,10,7,3,-3,2,4,6,     7,-5,7,-5,4,1,6,-6,
					-1,11,6,-1,-2,-1,1,2,   3,-2,-9,-2,6,1,-6,-6,

				],inf),

				\vel, Pseq([0.4,0.8],inf),
				\op1mul, Pexprand(0.1,0.2,inf),
				\op2mul, Pexprand(0.1,0.2,inf),
				\op3mul, Pexprand(0.1,0.2,inf),
				\atk, 0.01,
				\dec, 4,
				\sus, 0
			),
			(swingBase: 0.125, swingAmount: 0.2)
		),
		Pfuncn({ q.stop; Event.silent(0) }, 1)
	])
])
);


/////////////////////////////////////////////////////////////////////////////////////
// Ride
/////////////////////////////////////////////////////////////////////////////////////

//Intro part.

fork {
	~rideIntro.stop;
	~rideIntro=Ppar([
		Pseq([
			Pchain(
				~swingify,
				Pbind(\instrument, \ride,
					\dur, Pseq([
						1/2,1/2,1/2,3/8,5/8,1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,
						1/2,1/2,1/2,3/8,5/8,1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,
						1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,
						1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,
						1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,
						1/4,1/8,1/8,1/4,1/8,1/8,3/8,5/8],1),
					\legato, 1/2,
					\degree, 1,
					\vel, Pseq([
						0.9,0.9,0.9,0.9,0.8,0.3,0.4,0.8,0.3,0.4,0.8,0.3,0.4,0.8,0.3,0.4,
						0.8,0.8,0.8,0.8,0.8,0.3,0.4,0.8,0.3,0.4,0.8,0.3,0.4,0.8,0.3,0.4,
						0.8,0.3,0.4,0.8,0.3,0.4,0.8,0.3,0.4,0.8,0.3,0.4,0.8,0.3,0.4,0.8,0.3,0.4,
						0.8,0.3,0.4,0.8,0.3,0.4,0.8,0.3,0.4,0.8,0.3,0.4,0.8,0.3,0.4,0.8,0.3,0.4,
						0.8,0.3,0.4,0.8,0.3,0.4,0.8,0.3,0.4,0.8,0.3,0.4,

					],inf),
				),
				(swingBase: 0.125, swingAmount: 0.3)
			),
			Pfuncn({ q.stop; Event.silent(0) }, 1)
		])
	])
};

//First variation

fork {
	~ride1.stop;
	~ride1=Ppar([
		Pseq([
			Pchain(
				~swingify,
				Pbind(\instrument, \ride,
					\dur, Pseq([
						1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,
						1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,
						1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,
						1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,
						1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,
						1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,
						1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,
						1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8],1),
					\legato, 4,
					\degree, 1,
					\vel, Prand([Pseq([0.6,0.3,0.2],1), Pseq([0.6,0.2,0.4],1), Pseq([1,0.5,0.7],1)],inf),
				),
				(swingBase: 0.125, swingAmount: 0.3)
			),
			Pfuncn({ q.stop; Event.silent(0) }, 1)
		])
	])
};

//Second variation.

fork {
	~ride2.stop;
	~ride2=Ppar([
		Pseq([
			Pchain(
				~swingify,
				Pbind(\instrument, \ride,
					\dur, Pseq([
						1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,
						1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,
						1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,
						1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,
						1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,
						1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,
						1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,
						1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8],1),
					\legato, 1/2,
					\degree, 1,
					\vel, Prand([Pseq([0.6,0.3,0.2],1), Pseq([0.6,0.2,0.4],1), Pseq([1,0.5,0.7],1)],inf),
				),
				(swingBase: 0.125, swingAmount: 0.3)
			),
			Pfuncn({ q.stop; Event.silent(0) }, 1)
		])
	])
};

/////////////////////////////////////////////////////////////////////////////////////
// Hat
/////////////////////////////////////////////////////////////////////////////////////

// Intro part

(
~hatIntro.stop;
~hatIntro=Pbind(\instrument, \hat,
				\dur, 1/4,
				\legato, 1/2,
	\vel, Pseq([
		0,0,0,0,0,0,0,0,0,0.3,0,0.3,0.3,0,0.3,0,
		0,0,0,0,0,0,0,0,0,0.3,0,0.3,0,0.3,0,0.3,
		0,0.3,0,0.3,0,0.3,0,0.3,0,0.3,0,0.3,0,0.3,0,0.3,
		0,0.3,0,0.3,0,0.3,0,0.3,0,0.3,0,0.3,0,0.3,0,0.3
	],1),
	\degree, 1,
			)
);

// Main loop.

(
~hat.stop;
~hat=Pbind(\instrument, \hat,
				\dur, 1/4,
				\legato, 1/2,
	\vel, Pseq([
		0,0.3,0,0.3,0,0.3,0,0.3,0,0.3,0,0.3,0,0.3,0,0.3,
		0,0.3,0,0.3,0,0.3,0,0.3,0,0.3,0,0.3,0,0.3,0,0.3,
		0,0.3,0,0.3,0,0.3,0,0.3,0,0.3,0,0.3,0,0.3,0,0.3,
		0,0.3,0,0.3,0,0.3,0,0.3,0,0.3,0,0.3,0,0.3,0,0.3
	],1),
	\degree, 1,
			)
);

/////////////////////////////////////////////////////////////////////////////////////
// Crash
/////////////////////////////////////////////////////////////////////////////////////

//Intro variation

fork {
~crashIntro.stop;
~crashIntro=Ppar([
	Pseq([
		Pchain(
			~swingify,
			Pbind(\instrument, \crash, \legato,1/16,
				\dur,1/2,
				\vel, Pseq([
						0.2,0.2,0.2,0.2,     0,0,0,0,   0.2,0.2,0.2,0.2,        0,0,0,0.1,
						0,0,0,0,                0,0,0,0,   0,0,0,0,                    0,0,0,0
						]*0.5,1)
				),
			(swingBase: 0.125, swingAmount: 0.3)
		),
	Pfuncn({ q.stop; Event.silent(0) }, 1)
	])
])
};

//Main variation.

fork {
~crash.stop;
~crash=Ppar([
	Pseq([
		Pchain(
			~swingify,
			Pbind(\instrument, \crash, \legato,1/16,
				\dur,Pseq([
						1/2,1/2,1/2,1/2,1/2,1/2,1/2,1/2,1/2,1/2,1/2,1/2,1/2,1/2,1/2,1/2,
						1/2,1/2,1/2,1/2,1/2,1/2,1/2,1/2,1/2,1/2,1/2,1/2,1/2,1/2,1/2,1/2],1),
				\vel, Pwrand([
					Pseq([0.2,0,0,0,        0.1,0.15,0.1,0.1,        0,0,0,0,                       0,0,0,0.1],1),
					Pseq([0.2,0,0,0,        0.1,0,0,0,                  0,0,0,0,                       0,0.2,0,0],1),
					Pseq([0.2,0,0,0,        0,0.2,0,0.1,               0,0,0,0,                       0.1,0,0,0],1),
					Pseq([0,0,0,0,           0,0.2,0,0,                 0,0.2,0,0,                     0,0,0,0.1],1),
					Pseq([0.2,0,0,0,        0,0,0,0,                    0,0,0,0,                        0,0.1,0,0.1],1),
					Pseq([0,0,0,0,          0,0,0.2,0,                  0,0,0,0,                        0,0,0.1,0],1),
					Pseq([0,0,0,0.2,        0,0,0,0,                    0.05,0.1,0.15,0.1,         0.2,0,0,0],1),
					Pseq([0,0,0,0,          0,0,0,0,                     0,0,0.2,0,                    0,0,0,0],1),
				],[0.125,0.125,0.125,0.125,0.125,0.125,0.125,0.125],inf)
			),
			(swingBase: 0.125, swingAmount: 0.3)
		),
	Pfuncn({ q.stop; Event.silent(0) }, 1)
	])
])
};

/////////////////////////////////////////////////////////////////////////////////////
// Kick
/////////////////////////////////////////////////////////////////////////////////////

//Intro part.

(
~kickIntro.stop;
~kickIntro=Ppar([
	Pseq([
		Pchain(
			~swingify,
			Pbind(\instrument, \kick, \legato,1/2,
				\dur,Pseq([
						1/2,1/2,1/2,3/8,5/8,1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,
						1/2,1/2,1/2,3/8,5/8,1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,
						1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,
						1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,
						1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,
						1/4,1/8,1/8,1/4,1/8,1/8,3/8,5/8],1),
				\vel, Pwrand([
					Pseq([0.1,0.1,0.1,0.1,        0.1,0.15,0.2,0.3,        0,0,0,0,           0,0,0,0.1],1),
					Pseq([0.2,0.1,0.1,0.1,        0.1,0,0,0,                  0,0,0,0,           0,0.2,0,0],1),
					Pseq([0.2,0,0,0,        0,0.2,0,0.1,               0,0,0,0,           0.1,0,0,0],1),
					Pseq([0,0,0,0,           0,0.2,0,0,                 0,0.2,0,0,        0,0,0,0.1],1),
					Pseq([0.2,0,0,0,        0,0,0,0,                    0,0,0,0,           0,0.1,0,0.1],1),
					Pseq([0,0,0,0,          0,0,0.2,0,                 0,0,0,0,           0,0,0.1,0],1),
					Pseq([0,0,0,0.2,        0,0,0,0,                   0,0,0,0.1,        0.2,0,0,0],1),
					Pseq([0,0,0,0,          0,0,0,0,                    0,0,0.2,0,        0,0,0,0],1),
				],[0.125,0.125,0.125,0.125,0.125,0.125,0.125,0.125],inf)
			),
			(swingBase: 0.125, swingAmount: 0.3)
		),
	Pfuncn({ q.stop; Event.silent(0) }, 1)
	])
])
);

// Main variation.

(
~kick.stop;
~kick=Ppar([
	Pseq([
		Pchain(
			~swingify,
			Pbind(\instrument, \kick, \legato,1/2,
				\dur,1/8,
				\vel, Pwrand([
					Pseq([0.2,0,0,0,        0.1,0.15,0.2,0.3,        0,0,0,0,           0,0,0,0.1],1),
					Pseq([0.2,0,0,0,        0.1,0,0,0,                  0,0,0,0,           0,0.2,0,0],1),
					Pseq([0.2,0,0,0,        0,0.2,0,0.1,               0,0,0,0,           0.1,0,0,0],1),
					Pseq([0,0,0,0,           0,0.2,0,0,                 0,0.2,0,0,        0,0,0,0.1],1),
					Pseq([0.2,0,0,0,        0,0,0,0,                    0,0,0,0,           0,0.1,0,0.1],1),
					Pseq([0,0,0,0,          0,0,0.2,0,                 0,0,0,0,           0,0,0.1,0],1),
					Pseq([0,0,0,0.2,        0,0,0,0,                   0,0,0,0.1,        0.2,0,0,0],1),
					Pseq([0,0,0,0,          0,0,0,0,                    0,0,0.2,0,        0,0,0,0],1),
				],[0.125,0.125,0.125,0.125,0.125,0.125,0.125,0.125],1)
			),
			(swingBase: 0.125, swingAmount: 0.3)
		),
	Pfuncn({ q.stop; Event.silent(0) }, 1)
	])
])
);

/////////////////////////////////////////////////////////////////////////////////////
// Snare
/////////////////////////////////////////////////////////////////////////////////////

//Intro variation

(
~snareIntro.stop;
~snareIntro=Ppar([
	Pseq([
		Pchain(
			~swingify,
			Pbind(\instrument, \snare, \legato,1/2,
				\dur,Pseq([
						1/2,1/2,1/2,3/8,5/8,1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,
						1/2,1/2,1/2,3/8,5/8,1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,
						1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,
						1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,
						1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,1/4,1/8,1/8,
						1/4,1/8,1/8,1/4,1/8,1/8,3/8,5/8],1),
				\vel, Pwrand([
					Pseq([0,0,0,0,        0.1,0.15,0.2,0.3,        0,0,0,0,                      0,0,0,0.1],1),
					Pseq([0,0,0,0,        0.1,0,0,0,                 0,0,0,0,                       0,0.2,0,0],1),
					Pseq([0,0,0,0,        0,0.2,0,0.1,              0,0,0,0,                       0.1,0,0,0],1),
					Pseq([0,0,0,0,           0,0.2,0,0,                0,0.2,0,0,                     0,0,0,0.1],1),
					Pseq([0,0,0,0,        0,0,0,0,                   0,0,0,0,                        0,0.1,0,0.1],1),
					Pseq([0,0,0,0,          0,0,0.2,0,                 0,0,0,0,                        0,0,0.1,0],1),
					Pseq([0,0,0,0,        0,0,0,0,                  0.05,0.1,0.15,0.2,          0.2,0,0,0],1),
					Pseq([0,0,0,0,          0,0,0,0,                   0,0,0.2,0,                     0,0,0,0],1),
				],[0.125,0.125,0.125,0.125,0.125,0.125,0.125,0.125],inf)
			),
			(swingBase: 0.125, swingAmount: 0.3)
		),
	Pfuncn({ q.stop; Event.silent(0) }, 1)
	])
])
);

//Main part.


(
~snare.stop;
~snare=Ppar([
	Pseq([
		Pchain(
			~swingify,
			Pbind(\instrument, \snare, \legato,1/2,
				\dur,1/8,
				\vel, Pwrand([
					Pseq([0.2,0,0,0,        0.1,0.15,0.2,0.3,        0,0,0,0,                      0,0,0,0.1],1),
					Pseq([0.2,0,0,0,        0.1,0,0,0,                 0,0,0,0,                       0,0.2,0,0],1),
					Pseq([0.2,0,0,0,        0,0.2,0,0.1,              0,0,0,0,                       0.1,0,0,0],1),
					Pseq([0,0,0,0,           0,0.2,0,0,                0,0.2,0,0,                     0,0,0,0.1],1),
					Pseq([0.2,0,0,0,        0,0,0,0,                   0,0,0,0,                        0,0.1,0,0.1],1),
					Pseq([0,0,0,0,          0,0,0.2,0,                 0,0,0,0,                        0,0,0.1,0],1),
					Pseq([0,0,0,0.2,        0,0,0,0,                  0.05,0.1,0.15,0.2,          0.2,0,0,0],1),
					Pseq([0,0,0,0,          0,0,0,0,                   0,0,0.2,0,                     0,0,0,0],1),
				],[0.125,0.125,0.125,0.125,0.125,0.125,0.125,0.125],1)
			),
			(swingBase: 0.125, swingAmount: 0.3)
		),
	Pfuncn({ q.stop; Event.silent(0) }, 1)
	])
])
);
);

/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
// Visuals
/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////
// Scenes.
/////////////////////////////////////////////////////////////////////////////////////

(
(
/////////////////////////////////////////////////////////////////////////////////////
// Scene 1a
/////////////////////////////////////////////////////////////////////////////////////
~scene1a.value;
~scene1a =
{
if(~u1.isNil,{ nil },   {~u1.close });
if(~u2.isNil,{ nil },   {~u2.close });
if(~u3.isNil,{ nil },   {~u3.close });
if(~u4.isNil,{ nil },   {~u4.close });
~rndStrk1 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk2 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk3 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~width1 = rrand(2,10);
~width2 = rrand(2,15);
~width3 = rrand(2,15);
if(~scale.isNil,{~scale=0.4},   {nil});
if(~scale > 0.8 ,{~scale=0.4},   {nil});
~scale = ~scale+0.13;
~rndTrnslx = rrand(-600,900);
~rndTrnsly = rrand(0,1);
~rndSkew1 = rrand(-0.1,0.1);
~rndSkew2 = rrand(-0.1,0.1);
~rndSkew3 = rrand(-0.1,0.1);
~u1rndRotate = rrand(-0.3,0.2);
~u2rndRotate = rrand(-0.01,0.05);
~u3rndRotate = rrand(-0.03,0.02);
~u4rndRotate = rrand(-0.03,0.02);
~strkCol = Color.new255(rrand(50,110), rrand(50,110), rrand(50,110));
~rndCol1 = [Color.magenta, Color.cyan, Color.yellow].choose;

/////////////////////////////////////////////////////////////////////////////////////
// Sax.
/////////////////////////////////////////////////////////////////////////////////////

~u1 = UserView(w, Rect(0, 0, 1920, 1080));
~u1.animate = true;
~u1.frameRate = 60;
~u1.background = [Color.new255(247,232,170), Color.new255(200,139,90), Color.new255(90,200,161)].choose;
~u1.drawFunc = {
~frame= ~u1.frame+40*0.123;

	Pen.scale(~scale,~scale);
	Pen.translate(~rndTrnslx,~rndTrnsly);

	//Mouthpiece

	Pen.strokeColor = ~strkCol;
	Pen.fillColor = ~rndCol1;
	Pen.skew(~rndSkew1,~rndSkew3);

	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+220 @
		sin(20*(sin(~frame)*0.1+0.1))*2+250,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	1.9pi, 0.3pi);

	Pen.fillStroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+340 @
		sin(20*(sin(~frame)*0.1+0.1))*2+160,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
		cos(80*(cos(~frame)*0.1+0.1))*4+150,
	2.4pi, 0.3pi);

	Pen.width = ~width3;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+240 @
		sin(20*(sin(~frame)*0.1+0.1))*2+380,
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
		cos(80*(cos(~frame)*0.1+0.1))*4+130,
	1.5pi, 0.5pi);
	Pen.fillStroke;

	//Body1

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*16+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.fillColor = ~strkCol;

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+70,
	cos(80*(cos(~frame)*0.1+0.1))*4+90));

	Pen.fillColor = ~rndCol1;

	//Button1

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));

//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Body1

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*16+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	//Button1

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));

};
};
);

(
/////////////////////////////////////////////////////////////////////////////////////
// Scene 1b
/////////////////////////////////////////////////////////////////////////////////////
~scene1b.value;
~scene1b =
{
if(~u1.isNil,{ nil },   {~u1.close });
if(~u2.isNil,{ nil },   {~u2.close });
if(~u3.isNil,{ nil },   {~u3.close });
if(~u4.isNil,{ nil },   {~u4.close });
~rndStrk1 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk2 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk3 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~width1 = rrand(2,10);
~width2 = rrand(2,15);
~width3 = rrand(2,15);
if(~scale.isNil,{~scale=0.4},   {nil});
if(~scale > 0.8 ,{~scale=0.4},   {nil});
~scale = ~scale+0.13;
if(~transl.isNil,{~transl = -200},   {nil});
if(~transl >= 200 ,{~transl = -200},   {nil});
~transl = ~transl+100;
~rndTrnslx = rrand(-600,900);
~rndTrnsly = rrand(0,1);
~rndSkew1 = rrand(-0.1,0.1);
~rndSkew2 = rrand(-0.1,0.1);
~rndSkew3 = rrand(-0.1,0.1);
~u1rndRotate = rrand(-0.3,0.2);
~u2rndRotate = rrand(-0.01,0.05);
~u3rndRotate = rrand(-0.03,0.02);
~u4rndRotate = rrand(-0.03,0.02);
~strkCol = Color.new255(rrand(50,110), rrand(50,110), rrand(50,110));
~rndCol1 = Color.yellow;
~rndCol2 = Color(rrand(0.4,0.7),rrand(0.4,0.7),rrand(0.4,0.7));

/////////////////////////////////////////////////////////////////////////////////////
// Sax.
/////////////////////////////////////////////////////////////////////////////////////

~u1 = UserView(w, Rect(0, 0, 1920, 1080));
~u1.animate = true;
~u1.frameRate = 60;
	~u1.background = Color(rrand(0.4,0.7),rrand(0.4,0.7),rrand(0.4,0.7));
~u1.drawFunc = {
~frame= ~u1.frame+40*0.123;

				Pen.translate(-100);

	Pen.use {
			Pen.fillColor = ~rndCol2 ;
			9.do{
				Pen.fillRect(Rect.aboutPoint(Point(~transl,-100),20,20));
				Pen.fillRect(Rect.aboutPoint(Point(~transl+162,200),30,30));
				Pen.fillRect(Rect.aboutPoint(Point(~transl,300),40,40));
				Pen.fillRect(Rect.aboutPoint(Point(~transl+162,400),50,50));
				Pen.fillRect(Rect.aboutPoint(Point(~transl,500),60,60));
				Pen.fillRect(Rect.aboutPoint(Point(~transl+162,600),70,70));
				Pen.fillRect(Rect.aboutPoint(Point(~transl,700),80,80));
				Pen.fillRect(Rect.aboutPoint(Point(~transl+162,800),90,90));
				Pen.fillRect(Rect.aboutPoint(Point(~transl,900),100,100));
				Pen.fillRect(Rect.aboutPoint(Point(~transl+162,1100),110,110));
				Pen.rotate(-0.3,920,540);
				Pen.translate(425);
			};
		};
Pen.translate(100);

	Pen.scale(~scale,~scale);
	Pen.translate(~rndTrnslx,~rndTrnsly);

	//Mouthpiece

	Pen.strokeColor = ~strkCol;
	Pen.fillColor = ~rndCol1;
	Pen.skew(~rndSkew1,~rndSkew3);

	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+220 @
		sin(20*(sin(~frame)*0.1+0.1))*2+250,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	1.9pi, 0.3pi);

	Pen.fillStroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+340 @
		sin(20*(sin(~frame)*0.1+0.1))*2+160,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
		cos(80*(cos(~frame)*0.1+0.1))*4+150,
	2.4pi, 0.3pi);

	Pen.width = ~width3;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+240 @
		sin(20*(sin(~frame)*0.1+0.1))*2+380,
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
		cos(80*(cos(~frame)*0.1+0.1))*4+130,
	1.5pi, 0.5pi);
	Pen.fillStroke;

	//Body1

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*16+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.fillColor = ~strkCol;

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+70,
	cos(80*(cos(~frame)*0.1+0.1))*4+90));

	Pen.fillColor = ~rndCol1;

	//Button1

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));

//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Body1

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*16+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	//Button1

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));

};
};
);

~translx = 3300;
~transly = 2100;

(
/////////////////////////////////////////////////////////////////////////////////////
// Scene 1c
/////////////////////////////////////////////////////////////////////////////////////
~scene1c.value;
~scene1c =
{
if(~u1.isNil,{ nil },   {~u1.close });
if(~u2.isNil,{ nil },   {~u2.close });
if(~u3.isNil,{ nil },   {~u3.close });
if(~u4.isNil,{ nil },   {~u4.close });
~rndStrk1 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk2 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk3 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~width1 = rrand(2,10);
~width2 = rrand(2,15);
~width3 = rrand(2,15);
if(~translx >= 4200 ,{~translx = -300},   {nil});
~translx = ~translx+1400;
if(~transly >= 3000 ,{~transly = -300},   {nil});
~transly = ~transly+1000;
~rndTrnslx = rrand(-600,900);
~rndTrnsly = rrand(0,1);
~rndSkew1 = rrand(-0.1,0.1);
~rndSkew2 = rrand(-0.1,0.1);
~rndSkew3 = rrand(-0.1,0.1);
~u1rndRotate = rrand(-0.3,0.2);
~u2rndRotate = rrand(-0.01,0.05);
~u3rndRotate = rrand(-0.03,0.02);
~u4rndRotate = rrand(-0.03,0.02);
~strkCol = Color.new255(rrand(50,110), rrand(50,110), rrand(50,110));
~rndCol1 = Color.yellow;
~rndCol2 = Color(rrand(0.4,0.7),rrand(0.4,0.7),rrand(0.4,0.7));

/////////////////////////////////////////////////////////////////////////////////////
// Sax.
/////////////////////////////////////////////////////////////////////////////////////

~u1 = UserView(w, Rect(0, 0, 1920, 1080));
~u1.animate = true;
~u1.frameRate = 60;
	~u1.background = Color(rrand(0.2,0.5),rrand(0.2,0.5),rrand(0.2,0.5));
~u1.drawFunc = {
~frame= ~u1.frame+40*0.123;

				Pen.translate(-100);

	Pen.use {
			Pen.fillColor = ~rndCol2 ;
			Pen.fillRect(Rect(0,0,500,1150));
			Pen.fillRect(Rect(300,200,500,900));
			Pen.fillRect(Rect(600,400,500,800));
			Pen.fillRect(Rect(900,600,500,800));
			Pen.fillRect(Rect(1200,800,500,600));


		};
Pen.translate(300,-170);

	Pen.scale(0.2,0.2);
	Pen.translate(~translx,~transly);

	//Mouthpiece

	Pen.strokeColor = ~strkCol;
	Pen.fillColor = ~rndCol1;
	Pen.skew(~rndSkew1,~rndSkew3);

	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+220 @
		sin(20*(sin(~frame)*0.1+0.1))*2+250,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	1.9pi, 0.3pi);

	Pen.fillStroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+340 @
		sin(20*(sin(~frame)*0.1+0.1))*2+160,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
		cos(80*(cos(~frame)*0.1+0.1))*4+150,
	2.4pi, 0.3pi);

	Pen.width = ~width3;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+240 @
		sin(20*(sin(~frame)*0.1+0.1))*2+380,
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
		cos(80*(cos(~frame)*0.1+0.1))*4+130,
	1.5pi, 0.5pi);
	Pen.fillStroke;

	//Body1

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*16+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.fillColor = ~strkCol;

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+70,
	cos(80*(cos(~frame)*0.1+0.1))*4+90));

	Pen.fillColor = ~rndCol1;

	//Button1

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));

//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Body1

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*16+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	//Button1

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));

};
};
);

(
/////////////////////////////////////////////////////////////////////////////////////
// Scene 2
/////////////////////////////////////////////////////////////////////////////////////
~scene2.value;
~scene2 =
{
if(~u1.isNil,{ nil },   {~u1.close });
if(~u2.isNil,{ nil },   {~u2.close });
if(~u3.isNil,{ nil },   {~u3.close });
if(~u4.isNil,{ nil },   {~u4.close });
~rndStrk1 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk2 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk3 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~width1 = rrand(2,10);
~width2 = rrand(2,15);
~width3 = rrand(2,15);

~u1rndScale = 0.9;
~u2rndScale = 0.7;
~u3rndScale = 0.7;
~u4rndScale = 1;

~u1rndTrnslx = 50;
~u2rndTrnslx = rrand(-550,-550);
~u3rndTrnslx = rrand(1750,1750);
~u4rndTrnslx = rrand(1150,1150);

~backrndX = rrand(1700,1900);
~backrndY = rrand(400,600);

~u1rndTrnsly = 0;
~u2rndTrnsly = rrand(-50,0);
~u3rndTrnsly = 700;
~u4rndTrnsly = -150;

~rndSkew1 = rrand(-0.1,0.1);
~rndSkew2 = rrand(-0.1,0.1);
~rndSkew3 = rrand(-0.1,0.1);
~u1rndRotate = rrand(-0.3,0.2);
~u2rndRotate = rrand(-0.01,0.05);
~u3rndRotate = rrand(-0.03,0.02);
~u4rndRotate = rrand(-0.03,0.02);
~strkCol = Color.new255(rrand(50,90), rrand(50,90), rrand(50,90));
~rndCol1 = Color.yellow;
~rndCol2 = Color.cyan;
~rndCol3 = Color.cyan;
~rndCol4 = Color.cyan;
~rndStrCurve1 = rrand(800,1050);
~rndStrCurve2 = rrand(800,1050);

/////////////////////////////////////////////////////////////////////////////////////
// Sax.
/////////////////////////////////////////////////////////////////////////////////////

~u1 = UserView(w, Rect(0, 0, 1920, 1080));
~u1.animate = true;
~u1.frameRate = 60;
~u1.background = Color(1,0.2,0.2);
~u1.drawFunc = {

	~frame= ~u1.frame+40*0.123; //Right phase and speed for the animations we need.

	//Background.

	Pen.fillColor = Color(0.2,0.2,0.2,0.15);

		Pen.moveTo(Point(~backrndX, 0));
		Pen.lineTo(Point(0,~backrndY));
		Pen.lineTo(Point(0,1080));
		Pen.lineTo(Point(1920,1080));
		Pen.lineTo(Point(1920,0));
		Pen.moveTo(Point(~backrndX, 0));
		Pen.fill;

		Pen.fillColor = Color(0.8,0.5,0.5);

	Pen.fillOval(Rect.aboutPoint(Point(
		cos(40*(cos(~frame)*0.1+0.1))*16+960,
		cos(20*(cos(~frame)*0.1+0.1))*16+540),
		cos(100*(cos(~frame)*0.1+0.1))*8+400,
	sin(80*(cos(~frame)*0.1+0.1))*8+400));

	Pen.scale(~u1rndScale,~u1rndScale);
	Pen.translate(~u1rndTrnslx,~u1rndTrnsly);

	//Mouthpiece

	Pen.strokeColor = Color(0.2,0.2,0.2);
	Pen.fillColor = ~rndCol1;


	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+220 @
		sin(20*(sin(~frame)*0.1+0.1))*2+250,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	1.9pi, 0.3pi);
	Pen.fillStroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+340 @
		sin(20*(sin(~frame)*0.1+0.1))*2+160,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
		cos(80*(cos(~frame)*0.1+0.1))*4+150,
	2.4pi, 0.3pi);
	Pen.fillStroke;

	Pen.width = ~width3;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+240 @
		sin(20*(sin(~frame)*0.1+0.1))*2+380,
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
		cos(80*(cos(~frame)*0.1+0.1))*4+130,
	1.5pi, 0.5pi);
	Pen.fillStroke;

	//Body1

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*32+200,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.fillColor = Color(0.2,0.2,0.2);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+70,
	cos(80*(cos(~frame)*0.1+0.1))*4+90));

	Pen.fillColor = ~rndCol1;

	//Button1

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));

//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Body1

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*32+200,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	//Button1

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));
};

/////////////////////////////////////////////////////////////////////////////////////
// Bass
/////////////////////////////////////////////////////////////////////////////////////

~u2 = UserView(w, Rect(0, 0, 1920, 1080));
~u2.animate = true;
~u2.frameRate = 60;
~u2.drawFunc = {

~frame= ~u1.frame+40*0.123; //Right phase and speed for the animations we need.

		Pen.rotate(~u2rndRotate);
	Pen.scale(~u2rndScale,~u2rndScale);
	Pen.translate(~u2rndTrnslx,~u2rndTrnsly);

	//Neck

	Pen.strokeColor = ~strkCol;
	Pen.fillColor = ~rndCol2;
	Pen.skew(~rndSkew1,~rndSkew2);

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+290),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: -0.2, x: 930, y: 690); //ROTATE

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+340),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+380),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body1

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+700),
	sin(100*(cos(~frame)*0.1+0.1))*4+130,
	cos(80*(cos(~frame)*0.1+0.1))*16+100));

		Pen.fillColor = Color(0,0.7,0.75);

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+580),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+200));

			Pen.fillColor = ~rndCol2;

	//Body2

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+970),
	sin(100*(cos(~frame)*0.1+0.1))*4+200,
	cos(80*(cos(~frame)*0.1+0.1))*16+180));

/////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Neck.
	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+290),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: -0.2, x: 930, y: 690); //ROTATE

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+340),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+380),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+580),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+200));

	//Body1

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+700),
	sin(100*(cos(~frame)*0.1+0.1))*8+130,
	cos(80*(cos(~frame)*0.1+0.1))*16+100));

	//Body2

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+970),
	sin(100*(cos(~frame)*0.1+0.1))*2+200,
	cos(80*(cos(~frame)*0.1+0.1))*16+180));

	//Soundholes.
		Pen.fillColor = ~strkCol;
	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ 180 @
	sin(20*(sin(~frame)*0.1+0.1))*2+880,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+150,
	0.8pi, 0.25pi);

		Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -70 @
	sin(20*(sin(~frame)*0.1+0.1))*2+850,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+150,
	2pi, 0.25pi);

	Pen.fillStroke;


	//Bridge and tailpiece.

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -60 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1100,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+150,
	1.4pi, 0.25pi);
	Pen.stroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -120 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1200,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.4pi, 0.25pi);
	Pen.stroke;

	Pen.fillColor = ~rndCol2;
	Pen.width = ~width3;
	Pen.lineDash=~rndStrk3;
	Pen.addWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -155 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1240,
	sin(100*(cos(~frame)*0.1+0.1))*4+100,
	1.5pi, 0.15pi);
	Pen.fillStroke;

	//Soundholes

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -120 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1200,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.4pi, 0.25pi);
	Pen.fillStroke;

	//String.

	Pen.width = 15;
	Pen.lineDash=~rndStrk1;
	Pen.moveTo(940@310);
	Pen.curveTo(
	Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+1050),
	Point(
	sin(200*(cos(~frame)*0.1+0.1))*63+~rndStrCurve1,
			cos(80*(cos(~frame)*0.1+0.1))*8+600),
	Point(
	cos(100*(cos(~frame)*0.1+0.1))*32+~rndStrCurve2,
	sin(80*(cos(~frame)*0.1+0.1))*8+800),
	);

	Pen.stroke;
};

/////////////////////////////////////////////////////////////////////////////////////
// Keys
/////////////////////////////////////////////////////////////////////////////////////

~u3 = UserView(w, Rect(0, 0, 1920, 1080));
~u3.animate = true;
~u3.frameRate = 60;
~u3.drawFunc = {
	// ~u1.background = Color.new255(125, 231, 213); /*(sin(~u1.frame*0.1)*0.2+0.6,sin(~u1.frame*0.11)*0.2+0.6,sin(~u1.frame*0.12 )*0.2+0.6);*/

	~frame= ~u1.frame+40*0.123; //Right phase and speed for the animations we need.

	Pen.rotate(~u3rndRotate);
	Pen.scale(~u3rndScale,~u3rndScale);
	Pen.translate(~u3rndTrnslx,~u3rndTrnsly);

	Pen.strokeColor = ~strkCol;
	Pen.fillColor = ~rndCol3;
	Pen.skew(~rndSkew2,~rndSkew3);

/////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Lid.

	Pen.skew(-1,0);

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;

	Pen.moveTo(cos(80*(cos(~frame)*0.1+0.1))*4+200@cos(80*(cos(~frame)*0.1+0.1))*4+150);
	Pen.curveTo(
	Point(
		sin(40*(cos(~frame)*0.1+0.1))*16+1150,
		cos(20*(cos(~frame)*0.1+0.1))*4+400),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*63+1050,
			cos(80*(cos(~frame)*0.1+0.1))*8+380),
	Point(
	cos(100*(cos(~frame)*0.1+0.1))*32+1200,
	sin(80*(cos(~frame)*0.1+0.1))*8+ 200),
	);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

	Pen.lineTo(sin(80*(cos(~frame)*0.1+0.1))*4+150@cos(80*(cos(~frame)*0.1+0.1))*4+150);
	Pen.lineTo(cos(80*(cos(~frame)*0.1+0.1))*4+200@cos(80*(cos(~frame)*0.1+0.1))*4+150);
		Pen.fillStroke;

	Pen.moveTo(sin(100*(cos(~frame)*0.05+0.1))*4+186@cos(80*(cos(~frame)*0.1+0.1))*4+400);

		Pen.lineDash=~rndStrk2;
		Pen.width = ~width2;

	Pen.curveTo(
	Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1300,
		sin(20*(sin(~frame)*0.1+0.1))*4+550),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*63+1450,
			cos(80*(cos(~frame)*0.1+0.1))*8+500),
	Point(
	cos(100*(cos(~frame)*0.1+0.1))*32+1100,
	sin(80*(cos(~frame)*0.1+0.1))*8+ 500),
	);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+150@
		sin(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.05+0.1))*4+186@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

		Pen.fillStroke;
		Pen.lineDash=~rndStrk3;
		Pen.width = ~width3;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+470);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+132@
		cos(80*(cos(~frame)*0.1+0.1))*4+615);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+133@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+146@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+149@
		cos(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+133@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

		Pen.lineDash=~rndStrk2;
		Pen.width = ~width1;

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+132@
		cos(80*(cos(~frame)*0.1+0.1))*4+615);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+180@
		cos(80*(cos(~frame)*0.1+0.1))*4+610);

		Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+185@
		cos(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+150@
		sin(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.fillStroke;
	Pen.lineDash= FloatArray[1,1,1,2,1,1,1,1,1,2];
	Pen.width = 15;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+146@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.stroke;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+470);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		sin(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+95@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+95@
		cos(80*(cos(~frame)*0.1+0.1))*4+490);

	Pen.fillStroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+135@
		cos(80*(cos(~frame)*0.1+0.1))*4+610);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+135@
		cos(80*(cos(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+140@
		cos(80*(sin(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+140@
		sin(80*(cos(~frame)*0.1+0.1))*4+600);

	Pen.fillStroke;

	Pen.width = ~width3;
	Pen.lineDash=~rndStrk1;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+180@
		cos(80*(cos(~frame)*0.1+0.1))*4+610);


	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+177@
		cos(80*(cos(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+172@
		cos(80*(cos(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+175@
		cos(80*(cos(~frame)*0.1+0.1))*4+600);

	Pen.fillStroke;

};


/////////////////////////////////////////////////////////////////////////////////////
// Drums.
/////////////////////////////////////////////////////////////////////////////////////

~u4 = UserView(w, Rect(0, 0, 1920, 1080));
~u4.animate = true;
~u4.frameRate = 60;
~u4.drawFunc = {
	// ~u1.background = Color.new255(125, 231, 213); /*(sin(~u1.frame*0.1)*0.2+0.6,sin(~u1.frame*0.11)*0.2+0.6,sin(~u1.frame*0.12 )*0.2+0.6);*/

	~frame= ~u1.frame+40*0.123; //Right phase and speed for the animations we need.

	Pen.rotate(~u4rndRotate);
	Pen.scale(~u4rndScale,~u4rndScale);
	Pen.translate(~u4rndTrnslx,~u4rndTrnsly);

	Pen.strokeColor = ~strkCol;
	Pen.fillColor = ~rndCol4;
	Pen.skew(~rndSkew1,~rndSkew3);

//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//BD Feet

	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+ -10 @
		sin(20*(sin(~frame)*0.1+0.1))*2+550,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.2pi, 0.15pi);

	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+ -90 @
		sin(20*(sin(~frame)*0.1+0.1))*2+560,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.7pi, 0.15pi);

	Pen.fillStroke;

	//BigTom

    Pen.translate(10,-50);

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width1;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -18@
		cos(80*(cos(~frame)*0.1+0.1))*4+410);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -65@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 600);

	Pen.curveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -102@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 600,
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 260,
	cos(80*(cos(~frame)*0.1+0.1))*2+620),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 260,
	cos(80*(cos(~frame)*0.1+0.1))*2+620));

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -58@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 410);

	Pen.fillStroke;

	Pen.width = ~width2;

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+260,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
	sin(100*(cos(~frame)*0.1+0.1))*16+80,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+260,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
	sin(100*(cos(~frame)*0.1+0.1))*16+80,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	//Snare

		Pen.lineDash=~rndStrk1;
	Pen.width = ~width3;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 65@
		cos(80*(cos(~frame)*0.1+0.1))*4+380);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 40@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 480);

	Pen.curveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 30@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 400,
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 500,
	cos(80*(cos(~frame)*0.1+0.1))*2+540),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 500,
	cos(80*(cos(~frame)*0.1+0.1))*2+520));

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 18@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 410);

	Pen.fillStroke;

	Pen.width = ~width2;

	Pen.rotate(1.95pi,500,380);

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+500,
		sin(20*(sin(~frame)*0.1+0.1))*4+400),
	sin(100*(cos(~frame)*0.1+0.1))*16+140,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+500,
		sin(20*(sin(~frame)*0.1+0.1))*4+400),
	sin(100*(cos(~frame)*0.1+0.1))*16+140,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	Pen.rotate(-1.95pi,500,380);

    Pen.translate(-10,50);

	//BassDrum

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width2;
	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+440,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
		sin(100*(cos(~frame)*0.1+0.1))*4+120,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+440,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
		sin(100*(cos(~frame)*0.1+0.1))*4+120,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 90@
		sin(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 33@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 13@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 33@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 40@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.stroke;

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 90@
		sin(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 50@
		sin(80*(cos(~frame)*0.15+0.1))*6+ 290);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 95@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 270);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 55@
		sin(80*(cos(~frame)*0.1+0.1))*8+ 280);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 90@
		sin(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.fillStroke;

	Pen.scale(1.2,1.2);

	Pen.translate(-400,-50);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 90@
		cos(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 33@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 13@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 33@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 40@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.stroke;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 90@
		cos(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 35@
		sin(80*(cos(~frame)*0.2+0.2))*8+ 290);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 95@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 270);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 55@
		sin(80*(cos(~frame)*0.2+0.1))*8+ 280);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 90@
		cos(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.fillStroke;

	};
	};
);

(
/////////////////////////////////////////////////////////////////////////////////////
// Scene 2b
/////////////////////////////////////////////////////////////////////////////////////
~scene2b.value;

~scene2b =
{
if(~u1.isNil,{ nil },   {~u1.close });
if(~u2.isNil,{ nil },   {~u2.close });
if(~u3.isNil,{ nil },   {~u3.close });
if(~u4.isNil,{ nil },   {~u4.close });
~rndStrk1 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk2 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk3 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~width1 = rrand(2,10);
~width2 = rrand(2,15);
~width3 = rrand(2,15);

~u1rndScale = 0.9;
~u2rndScale = 0.7;
~u3rndScale = 0.7;
~u4rndScale = 1;

~u1rndTrnslx = 150;
~u2rndTrnslx = rrand(1400,1400);
~u3rndTrnslx = rrand(-100,-100);
~u4rndTrnslx = rrand(-100,-100);

~u1rndTrnsly = 0;
~u2rndTrnsly = -150;
~u3rndTrnsly = 0;
~u4rndTrnsly = 400;

~backrndX = rrand(200,400);
~backrndY = rrand(400,600);

~rndSkew1 = rrand(-0.1,0.1);
~rndSkew2 = rrand(-0.1,0.1);
~rndSkew3 = rrand(-0.1,0.1);
~u1rndRotate = rrand(-0.3,0.2);
~u2rndRotate = rrand(-0.01,0.05);
~u3rndRotate = rrand(-0.03,0.02);
~u4rndRotate = rrand(-0.03,0.02);
~strkCol = Color.new255(rrand(50,90), rrand(50,90), rrand(50,90));
~rndCol1 = Color.yellow;
~rndCol2 = Color.cyan;
~rndCol3 = Color.cyan;
~rndCol4 = Color.cyan;
~rndStrCurve1 = rrand(800,1050);
~rndStrCurve2 = rrand(800,1050);

/////////////////////////////////////////////////////////////////////////////////////
// Sax.
/////////////////////////////////////////////////////////////////////////////////////

~u1 = UserView(w, Rect(0, 0, 1920, 1080));
~u1.animate = true;
~u1.frameRate = 60;
~u1.background = Color(0.2,0.5,0.8);
~u1.drawFunc = {

	~frame= ~u1.frame+40*0.123; //Right phase and speed for the animations we need.

	//Background.

	Pen.fillColor = Color(0.2,0.2,0.2,0.15);

		Pen.moveTo(Point(~backrndX, 0));
		Pen.lineTo(Point(1920,~backrndY));
		Pen.lineTo(Point(1920,1080));
		Pen.lineTo(Point(0,1080));
		Pen.lineTo(Point(0,0));
		Pen.moveTo(Point(~backrndX, 0));
		Pen.fill;

		Pen.fillColor = Color(0.8,0.2,0.5);

	Pen.fillOval(Rect.aboutPoint(Point(
		cos(40*(cos(~frame)*0.1+0.1))*16+960,
		cos(20*(cos(~frame)*0.1+0.1))*16+540),
		cos(100*(cos(~frame)*0.1+0.1))*8+400,
	sin(80*(cos(~frame)*0.1+0.1))*8+400));

	Pen.scale(~u1rndScale,~u1rndScale);
	Pen.translate(~u1rndTrnslx,~u1rndTrnsly);

	//Mouthpiece

	Pen.strokeColor = Color(0.2,0.2,0.2);
	Pen.fillColor = ~rndCol1;


	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+220 @
		sin(20*(sin(~frame)*0.1+0.1))*2+250,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	1.9pi, 0.3pi);
	Pen.fillStroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+340 @
		sin(20*(sin(~frame)*0.1+0.1))*2+160,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
		cos(80*(cos(~frame)*0.1+0.1))*4+150,
	2.4pi, 0.3pi);
	Pen.fillStroke;

	Pen.width = ~width3;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+240 @
		sin(20*(sin(~frame)*0.1+0.1))*2+380,
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
		cos(80*(cos(~frame)*0.1+0.1))*4+130,
	1.5pi, 0.5pi);
	Pen.fillStroke;

	//Body1

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*32+200,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.fillColor = Color(0.2,0.2,0.2);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+70,
	cos(80*(cos(~frame)*0.1+0.1))*4+90));

	Pen.fillColor = ~rndCol1;

	//Button1

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));

//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Body1

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*32+200,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	//Button1

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));
};

/////////////////////////////////////////////////////////////////////////////////////
// Bass
/////////////////////////////////////////////////////////////////////////////////////

~u2 = UserView(w, Rect(0, 0, 1920, 1080));
~u2.animate = true;
~u2.frameRate = 60;
~u2.drawFunc = {

~frame= ~u1.frame+40*0.123; //Right phase and speed for the animations we need.

		Pen.rotate(~u2rndRotate);
	Pen.scale(~u2rndScale,~u2rndScale);
	Pen.translate(~u2rndTrnslx,~u2rndTrnsly);

	//Neck

	Pen.strokeColor = ~strkCol;
	Pen.fillColor = ~rndCol2;
	Pen.skew(~rndSkew1,~rndSkew2);

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+290),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: -0.2, x: 930, y: 690); //ROTATE

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+340),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+380),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body1

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+700),
	sin(100*(cos(~frame)*0.1+0.1))*4+130,
	cos(80*(cos(~frame)*0.1+0.1))*16+100));

		Pen.fillColor = Color(0,0.7,0.75);

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+580),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+200));

			Pen.fillColor = ~rndCol2;

	//Body2

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+970),
	sin(100*(cos(~frame)*0.1+0.1))*4+200,
	cos(80*(cos(~frame)*0.1+0.1))*16+180));

//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Neck.
	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+290),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: -0.2, x: 930, y: 690); //ROTATE

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+340),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+380),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+580),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+200));

	//Body1

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+700),
	sin(100*(cos(~frame)*0.1+0.1))*8+130,
	cos(80*(cos(~frame)*0.1+0.1))*16+100));

	//Body2

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+970),
	sin(100*(cos(~frame)*0.1+0.1))*2+200,
	cos(80*(cos(~frame)*0.1+0.1))*16+180));

	//Soundholes.
		Pen.fillColor = ~strkCol;
	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ 180 @
	sin(20*(sin(~frame)*0.1+0.1))*2+880,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+150,
	0.8pi, 0.25pi);

		Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -70 @
	sin(20*(sin(~frame)*0.1+0.1))*2+850,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+150,
	2pi, 0.25pi);

	Pen.fillStroke;


	//Bridge and tailpiece.

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -60 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1100,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+150,
	1.4pi, 0.25pi);
	Pen.stroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -120 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1200,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.4pi, 0.25pi);
	Pen.stroke;

	Pen.fillColor = ~rndCol2;
	Pen.width = ~width3;
	Pen.lineDash=~rndStrk3;
	Pen.addWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -155 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1240,
	sin(100*(cos(~frame)*0.1+0.1))*4+100,
	1.5pi, 0.15pi);
	Pen.fillStroke;

	//Soundholes

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -120 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1200,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.4pi, 0.25pi);
	Pen.fillStroke;

	//String.

	Pen.width = 15;
	Pen.lineDash=~rndStrk1;
	Pen.moveTo(940@310);
	Pen.curveTo(
	Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+1050),
	Point(
	sin(200*(cos(~frame)*0.1+0.1))*63+~rndStrCurve1,
			cos(80*(cos(~frame)*0.1+0.1))*8+600),
	Point(
	cos(100*(cos(~frame)*0.1+0.1))*32+~rndStrCurve2,
	sin(80*(cos(~frame)*0.1+0.1))*8+800),
	);

	Pen.stroke;
};

/////////////////////////////////////////////////////////////////////////////////////
// Keys
/////////////////////////////////////////////////////////////////////////////////////

~u3 = UserView(w, Rect(0, 0, 1920, 1080));
~u3.animate = true;
~u3.frameRate = 60;
~u3.drawFunc = {
	// ~u1.background = Color.new255(125, 231, 213); /*(sin(~u1.frame*0.1)*0.2+0.6,sin(~u1.frame*0.11)*0.2+0.6,sin(~u1.frame*0.12 )*0.2+0.6);*/

	~frame= ~u1.frame+40*0.123; //Right phase and speed for the animations we need.

	Pen.rotate(~u3rndRotate);
	Pen.scale(~u3rndScale,~u3rndScale);
	Pen.translate(~u3rndTrnslx,~u3rndTrnsly);

	Pen.strokeColor = ~strkCol;
	Pen.fillColor = ~rndCol3;
	Pen.skew(~rndSkew2,~rndSkew3);


//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Lid.

	Pen.skew(-1,0);

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;

	Pen.moveTo(cos(80*(cos(~frame)*0.1+0.1))*4+200@cos(80*(cos(~frame)*0.1+0.1))*4+150);
	Pen.curveTo(
	Point(
		sin(40*(cos(~frame)*0.1+0.1))*16+1150,
		cos(20*(cos(~frame)*0.1+0.1))*4+400),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*63+1050,
			cos(80*(cos(~frame)*0.1+0.1))*8+380),
	Point(
	cos(100*(cos(~frame)*0.1+0.1))*32+1200,
	sin(80*(cos(~frame)*0.1+0.1))*8+ 200),
	);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

	Pen.lineTo(sin(80*(cos(~frame)*0.1+0.1))*4+150@cos(80*(cos(~frame)*0.1+0.1))*4+150);
	Pen.lineTo(cos(80*(cos(~frame)*0.1+0.1))*4+200@cos(80*(cos(~frame)*0.1+0.1))*4+150);
		Pen.fillStroke;

	Pen.moveTo(sin(100*(cos(~frame)*0.05+0.1))*4+186@cos(80*(cos(~frame)*0.1+0.1))*4+400);

		Pen.lineDash=~rndStrk2;
		Pen.width = ~width2;

	Pen.curveTo(
	Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1300,
		sin(20*(sin(~frame)*0.1+0.1))*4+550),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*63+1450,
			cos(80*(cos(~frame)*0.1+0.1))*8+500),
	Point(
	cos(100*(cos(~frame)*0.1+0.1))*32+1100,
	sin(80*(cos(~frame)*0.1+0.1))*8+ 500),
	);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+150@
		sin(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.05+0.1))*4+186@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

		Pen.fillStroke;
		Pen.lineDash=~rndStrk3;
		Pen.width = ~width3;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+470);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+132@
		cos(80*(cos(~frame)*0.1+0.1))*4+615);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+133@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+146@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+149@
		cos(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+133@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

		Pen.lineDash=~rndStrk2;
		Pen.width = ~width1;

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+132@
		cos(80*(cos(~frame)*0.1+0.1))*4+615);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+180@
		cos(80*(cos(~frame)*0.1+0.1))*4+610);

		Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+185@
		cos(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+150@
		sin(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.fillStroke;
	Pen.lineDash= FloatArray[1,1,1,2,1,1,1,1,1,2];
	Pen.width = 15;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+146@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.stroke;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+470);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		sin(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+95@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+95@
		cos(80*(cos(~frame)*0.1+0.1))*4+490);

	Pen.fillStroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+135@
		cos(80*(cos(~frame)*0.1+0.1))*4+610);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+135@
		cos(80*(cos(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+140@
		cos(80*(sin(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+140@
		sin(80*(cos(~frame)*0.1+0.1))*4+600);

	Pen.fillStroke;

	Pen.width = ~width3;
	Pen.lineDash=~rndStrk1;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+180@
		cos(80*(cos(~frame)*0.1+0.1))*4+610);


	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+177@
		cos(80*(cos(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+172@
		cos(80*(cos(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+175@
		cos(80*(cos(~frame)*0.1+0.1))*4+600);

	Pen.fillStroke;

};


/////////////////////////////////////////////////////////////////////////////////////
// Drums.
/////////////////////////////////////////////////////////////////////////////////////

~u4 = UserView(w, Rect(0, 0, 1920, 1080));
~u4.animate = true;
~u4.frameRate = 60;
~u4.drawFunc = {
	// ~u1.background = Color.new255(125, 231, 213); /*(sin(~u1.frame*0.1)*0.2+0.6,sin(~u1.frame*0.11)*0.2+0.6,sin(~u1.frame*0.12 )*0.2+0.6);*/

	~frame= ~u1.frame+40*0.123; //Right phase and speed for the animations we need.

	Pen.rotate(~u4rndRotate);
	Pen.scale(~u4rndScale,~u4rndScale);
	Pen.translate(~u4rndTrnslx,~u4rndTrnsly);

	Pen.strokeColor = ~strkCol;
	Pen.fillColor = ~rndCol4;
	Pen.skew(~rndSkew1,~rndSkew3);

//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//BD Feet

	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+ -10 @
		sin(20*(sin(~frame)*0.1+0.1))*2+550,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.2pi, 0.15pi);

	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+ -90 @
		sin(20*(sin(~frame)*0.1+0.1))*2+560,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.7pi, 0.15pi);

	Pen.fillStroke;

	//BigTom

    Pen.translate(10,-50);

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width1;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -18@
		cos(80*(cos(~frame)*0.1+0.1))*4+410);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -65@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 600);

	Pen.curveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -102@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 600,
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 260,
	cos(80*(cos(~frame)*0.1+0.1))*2+620),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 260,
	cos(80*(cos(~frame)*0.1+0.1))*2+620));

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -58@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 410);

	Pen.fillStroke;

	Pen.width = ~width2;

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+260,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
	sin(100*(cos(~frame)*0.1+0.1))*16+80,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+260,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
	sin(100*(cos(~frame)*0.1+0.1))*16+80,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	//Snare

		Pen.lineDash=~rndStrk1;
	Pen.width = ~width3;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 65@
		cos(80*(cos(~frame)*0.1+0.1))*4+380);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 40@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 480);

	Pen.curveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 30@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 400,
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 500,
	cos(80*(cos(~frame)*0.1+0.1))*2+540),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 500,
	cos(80*(cos(~frame)*0.1+0.1))*2+520));

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 18@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 410);

	Pen.fillStroke;

	Pen.width = ~width2;

	Pen.rotate(1.95pi,500,380);

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+500,
		sin(20*(sin(~frame)*0.1+0.1))*4+400),
	sin(100*(cos(~frame)*0.1+0.1))*16+140,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+500,
		sin(20*(sin(~frame)*0.1+0.1))*4+400),
	sin(100*(cos(~frame)*0.1+0.1))*16+140,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	Pen.rotate(-1.95pi,500,380);

    Pen.translate(-10,50);

	//BassDrum

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width2;
	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+440,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
		sin(100*(cos(~frame)*0.1+0.1))*4+120,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+440,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
		sin(100*(cos(~frame)*0.1+0.1))*4+120,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 90@
		sin(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 33@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 13@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 33@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 40@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.stroke;

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 90@
		sin(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 50@
		sin(80*(cos(~frame)*0.15+0.1))*6+ 290);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 95@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 270);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 55@
		sin(80*(cos(~frame)*0.1+0.1))*8+ 280);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 90@
		sin(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.fillStroke;

	Pen.scale(1.2,1.2);

	Pen.translate(-400,-50);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 90@
		cos(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 33@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 13@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 33@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 40@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.stroke;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 90@
		cos(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 35@
		sin(80*(cos(~frame)*0.2+0.2))*8+ 290);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 95@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 270);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 55@
		sin(80*(cos(~frame)*0.2+0.1))*8+ 280);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 90@
		cos(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.fillStroke;

	};
};
);

(
/////////////////////////////////////////////////////////////////////////////////////
// Scene 3
/////////////////////////////////////////////////////////////////////////////////////
~scene3.value;
~scene3 =
{
if(~u1.isNil,{ nil },   {~u1.close });
if(~u2.isNil,{ nil },   {~u2.close });
if(~u3.isNil,{ nil },   {~u3.close });
if(~u4.isNil,{ nil },   {~u4.close });
~rndStrk1 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk2 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk3 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~width1 = rrand(2,10);
~width2 = rrand(2,15);
~width3 = rrand(2,15);

~u1rndScale = 0.9;
~u2rndScale = 0.7;
~u3rndScale = 0.7;
~u4rndScale = 1;

~u1rndTrnslx = 150;
~u2rndTrnslx = rrand(-550,-550);
~u3rndTrnslx = rrand(1750,1750);
~u4rndTrnslx = rrand(1150,1150);

~u1rndTrnsly = 0;
~u2rndTrnsly = rrand(-50,0);
~u3rndTrnsly = 700;
~u4rndTrnsly = -150;

~rndSkew1 = rrand(-0.1,0.1);
~rndSkew2 = rrand(-0.1,0.1);
~rndSkew3 = rrand(-0.1,0.1);
~u1rndRotate = rrand(-0.3,0.2);
~u2rndRotate = rrand(-0.01,0.05);
~u3rndRotate = rrand(-0.03,0.02);
~u4rndRotate = rrand(-0.03,0.02);
~strkCol = Color.new255(rrand(50,90), rrand(50,90), rrand(50,90));
~rndCol1 = Color.yellow;
~rndCol2 = Color.cyan;
~rndCol3 = Color.cyan;
~rndCol4 = Color.cyan;
~rndStrCurve1 = rrand(800,1050);
~rndStrCurve2 = rrand(800,1050);

/////////////////////////////////////////////////////////////////////////////////////
// Sax.
/////////////////////////////////////////////////////////////////////////////////////

~u1 = UserView(w, Rect(0, 0, 1920, 1080));
~u1.animate = true;
~u1.frameRate = 60;
~u1.background = Color(1,0.2,0);
~u1.drawFunc = {
~frame= ~u1.frame+40*0.123;

	//Background.

		Pen.fillColor = Color(0.8,0.4,0);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(920,540));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,920,540);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(920,540));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,920,540);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(920,540));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,920,540);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(920,540));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,920,540);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(920,540));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,920,540);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(920,540));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,920,540);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(920,540));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,920,540);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(920,540));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,920,540);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(920,540));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,920,540);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(920,540));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,920,540);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(920,540));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,920,540);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(920,540));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,920,540);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(920,540));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,920,540);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(920,540));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,920,540);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(920,540));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.35,920,540);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(920,540));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.2,920,540);

		Pen.fillColor = Color(0.8,0.5,0.5);

	Pen.fillOval(Rect.aboutPoint(Point(
		cos(40*(cos(~frame)*0.1+0.1))*16+960,
		cos(20*(cos(~frame)*0.1+0.1))*16+540),
		cos(100*(cos(~frame)*0.1+0.1))*8+400,
	sin(80*(cos(~frame)*0.1+0.1))*8+400));

	Pen.scale(~u1rndScale,~u1rndScale);
	Pen.translate(~u1rndTrnslx,~u1rndTrnsly);

	//Mouthpiece

	Pen.strokeColor = Color(0.2,0.2,0.2);
	Pen.fillColor = ~rndCol1;


	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+220 @
		sin(20*(sin(~frame)*0.1+0.1))*2+250,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	1.9pi, 0.3pi);
	Pen.fillStroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+340 @
		sin(20*(sin(~frame)*0.1+0.1))*2+160,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
		cos(80*(cos(~frame)*0.1+0.1))*4+150,
	2.4pi, 0.3pi);
	Pen.fillStroke;

	Pen.width = ~width3;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+240 @
		sin(20*(sin(~frame)*0.1+0.1))*2+380,
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
		cos(80*(cos(~frame)*0.1+0.1))*4+130,
	1.5pi, 0.5pi);
	Pen.fillStroke;

	//Body1

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*32+200,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.fillColor = Color(0.2,0.2,0.2);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+70,
	cos(80*(cos(~frame)*0.1+0.1))*4+90));

	Pen.fillColor = ~rndCol1;

	//Button1

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));

//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Body1

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*32+200,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	//Button1

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));
};

/////////////////////////////////////////////////////////////////////////////////////
// Bass
/////////////////////////////////////////////////////////////////////////////////////

~u2 = UserView(w, Rect(0, 0, 1920, 1080));
~u2.animate = true;
~u2.frameRate = 60;
~u2.drawFunc = {

~frame= ~u1.frame+40*0.123; //Right phase and speed for the animations we need.

		Pen.rotate(~u2rndRotate);
	Pen.scale(~u2rndScale,~u2rndScale);
	Pen.translate(~u2rndTrnslx,~u2rndTrnsly);

	//Neck

	Pen.strokeColor = ~strkCol;
	Pen.fillColor = ~rndCol2;
	Pen.skew(~rndSkew1,~rndSkew2);

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+290),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: -0.2, x: 930, y: 690); //ROTATE

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+340),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+380),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body1

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+700),
	sin(100*(cos(~frame)*0.1+0.1))*4+130,
	cos(80*(cos(~frame)*0.1+0.1))*16+100));

		Pen.fillColor = Color(0,0.7,0.75);

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+580),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+200));

			Pen.fillColor = ~rndCol2;

	//Body2

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+970),
	sin(100*(cos(~frame)*0.1+0.1))*4+200,
	cos(80*(cos(~frame)*0.1+0.1))*16+180));

/////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Neck.
	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+290),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: -0.2, x: 930, y: 690); //ROTATE

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+340),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+380),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+580),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+200));

	//Body1

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+700),
	sin(100*(cos(~frame)*0.1+0.1))*8+130,
	cos(80*(cos(~frame)*0.1+0.1))*16+100));

	//Body2

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+970),
	sin(100*(cos(~frame)*0.1+0.1))*2+200,
	cos(80*(cos(~frame)*0.1+0.1))*16+180));

	//Soundholes.
		Pen.fillColor = ~strkCol;
	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ 180 @
	sin(20*(sin(~frame)*0.1+0.1))*2+880,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+150,
	0.8pi, 0.25pi);

		Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -70 @
	sin(20*(sin(~frame)*0.1+0.1))*2+850,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+150,
	2pi, 0.25pi);

	Pen.fillStroke;


	//Bridge and tailpiece.

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -60 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1100,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+150,
	1.4pi, 0.25pi);
	Pen.stroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -120 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1200,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.4pi, 0.25pi);
	Pen.stroke;

	Pen.fillColor = ~rndCol2;
	Pen.width = ~width3;
	Pen.lineDash=~rndStrk3;
	Pen.addWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -155 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1240,
	sin(100*(cos(~frame)*0.1+0.1))*4+100,
	1.5pi, 0.15pi);
	Pen.fillStroke;

	//Soundholes

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -120 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1200,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.4pi, 0.25pi);
	Pen.fillStroke;

	//String.

	Pen.width = 15;
	Pen.lineDash=~rndStrk1;
	Pen.moveTo(940@310);
	Pen.curveTo(
	Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+1050),
	Point(
	sin(200*(cos(~frame)*0.1+0.1))*63+~rndStrCurve1,
			cos(80*(cos(~frame)*0.1+0.1))*8+600),
	Point(
	cos(100*(cos(~frame)*0.1+0.1))*32+~rndStrCurve2,
	sin(80*(cos(~frame)*0.1+0.1))*8+800),
	);

	Pen.stroke;
};

/////////////////////////////////////////////////////////////////////////////////////
// Keys
/////////////////////////////////////////////////////////////////////////////////////

~u3 = UserView(w, Rect(0, 0, 1920, 1080));
~u3.animate = true;
~u3.frameRate = 60;
~u3.drawFunc = {
	// ~u1.background = Color.new255(125, 231, 213); /*(sin(~u1.frame*0.1)*0.2+0.6,sin(~u1.frame*0.11)*0.2+0.6,sin(~u1.frame*0.12 )*0.2+0.6);*/

	~frame= ~u1.frame+40*0.123; //Right phase and speed for the animations we need.

	Pen.rotate(~u3rndRotate);
	Pen.scale(~u3rndScale,~u3rndScale);
	Pen.translate(~u3rndTrnslx,~u3rndTrnsly);

	Pen.strokeColor = ~strkCol;
	Pen.fillColor = ~rndCol3;
	Pen.skew(~rndSkew2,~rndSkew3);


//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Lid.

	Pen.skew(-1,0);

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;

	Pen.moveTo(cos(80*(cos(~frame)*0.1+0.1))*4+200@cos(80*(cos(~frame)*0.1+0.1))*4+150);
	Pen.curveTo(
	Point(
		sin(40*(cos(~frame)*0.1+0.1))*16+1150,
		cos(20*(cos(~frame)*0.1+0.1))*4+400),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*63+1050,
			cos(80*(cos(~frame)*0.1+0.1))*8+380),
	Point(
	cos(100*(cos(~frame)*0.1+0.1))*32+1200,
	sin(80*(cos(~frame)*0.1+0.1))*8+ 200),
	);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

	Pen.lineTo(sin(80*(cos(~frame)*0.1+0.1))*4+150@cos(80*(cos(~frame)*0.1+0.1))*4+150);
	Pen.lineTo(cos(80*(cos(~frame)*0.1+0.1))*4+200@cos(80*(cos(~frame)*0.1+0.1))*4+150);
		Pen.fillStroke;

	Pen.moveTo(sin(100*(cos(~frame)*0.05+0.1))*4+186@cos(80*(cos(~frame)*0.1+0.1))*4+400);

		Pen.lineDash=~rndStrk2;
		Pen.width = ~width2;

	Pen.curveTo(
	Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1300,
		sin(20*(sin(~frame)*0.1+0.1))*4+550),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*63+1450,
			cos(80*(cos(~frame)*0.1+0.1))*8+500),
	Point(
	cos(100*(cos(~frame)*0.1+0.1))*32+1100,
	sin(80*(cos(~frame)*0.1+0.1))*8+ 500),
	);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+150@
		sin(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.05+0.1))*4+186@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

		Pen.fillStroke;
		Pen.lineDash=~rndStrk3;
		Pen.width = ~width3;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+470);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+132@
		cos(80*(cos(~frame)*0.1+0.1))*4+615);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+133@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+146@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+149@
		cos(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+133@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

		Pen.lineDash=~rndStrk2;
		Pen.width = ~width1;

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+132@
		cos(80*(cos(~frame)*0.1+0.1))*4+615);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+180@
		cos(80*(cos(~frame)*0.1+0.1))*4+610);

		Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+185@
		cos(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+150@
		sin(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.fillStroke;
	Pen.lineDash= FloatArray[1,1,1,2,1,1,1,1,1,2];
	Pen.width = 15;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+146@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.stroke;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+470);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		sin(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+95@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+95@
		cos(80*(cos(~frame)*0.1+0.1))*4+490);

	Pen.fillStroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+135@
		cos(80*(cos(~frame)*0.1+0.1))*4+610);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+135@
		cos(80*(cos(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+140@
		cos(80*(sin(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+140@
		sin(80*(cos(~frame)*0.1+0.1))*4+600);

	Pen.fillStroke;

	Pen.width = ~width3;
	Pen.lineDash=~rndStrk1;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+180@
		cos(80*(cos(~frame)*0.1+0.1))*4+610);


	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+177@
		cos(80*(cos(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+172@
		cos(80*(cos(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+175@
		cos(80*(cos(~frame)*0.1+0.1))*4+600);

	Pen.fillStroke;

};


/////////////////////////////////////////////////////////////////////////////////////
// Drums.
/////////////////////////////////////////////////////////////////////////////////////

~u4 = UserView(w, Rect(0, 0, 1920, 1080));
~u4.animate = true;
~u4.frameRate = 60;
~u4.drawFunc = {
	// ~u1.background = Color.new255(125, 231, 213); /*(sin(~u1.frame*0.1)*0.2+0.6,sin(~u1.frame*0.11)*0.2+0.6,sin(~u1.frame*0.12 )*0.2+0.6);*/

	~frame= ~u1.frame+40*0.123; //Right phase and speed for the animations we need.

	Pen.rotate(~u4rndRotate);
	Pen.scale(~u4rndScale,~u4rndScale);
	Pen.translate(~u4rndTrnslx,~u4rndTrnsly);

	Pen.strokeColor = ~strkCol;
	Pen.fillColor = ~rndCol4;
	Pen.skew(~rndSkew1,~rndSkew3);

/////////////////////////////////////////////////////////////////////////////////////Strokes.

	//BD Feet

	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+ -10 @
		sin(20*(sin(~frame)*0.1+0.1))*2+550,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.2pi, 0.15pi);

	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+ -90 @
		sin(20*(sin(~frame)*0.1+0.1))*2+560,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.7pi, 0.15pi);

	Pen.fillStroke;

	//BigTom

    Pen.translate(10,-50);

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width1;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -18@
		cos(80*(cos(~frame)*0.1+0.1))*4+410);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -65@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 600);

	Pen.curveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -102@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 600,
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 260,
	cos(80*(cos(~frame)*0.1+0.1))*2+620),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 260,
	cos(80*(cos(~frame)*0.1+0.1))*2+620));

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -58@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 410);

	Pen.fillStroke;

	Pen.width = ~width2;

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+260,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
	sin(100*(cos(~frame)*0.1+0.1))*16+80,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+260,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
	sin(100*(cos(~frame)*0.1+0.1))*16+80,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	//Snare

		Pen.lineDash=~rndStrk1;
	Pen.width = ~width3;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 65@
		cos(80*(cos(~frame)*0.1+0.1))*4+380);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 40@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 480);

	Pen.curveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 30@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 400,
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 500,
	cos(80*(cos(~frame)*0.1+0.1))*2+540),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 500,
	cos(80*(cos(~frame)*0.1+0.1))*2+520));

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 18@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 410);

	Pen.fillStroke;

	Pen.width = ~width2;

	Pen.rotate(1.95pi,500,380);

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+500,
		sin(20*(sin(~frame)*0.1+0.1))*4+400),
	sin(100*(cos(~frame)*0.1+0.1))*16+140,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+500,
		sin(20*(sin(~frame)*0.1+0.1))*4+400),
	sin(100*(cos(~frame)*0.1+0.1))*16+140,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	Pen.rotate(-1.95pi,500,380);

    Pen.translate(-10,50);

	//BassDrum

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width2;
	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+440,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
		sin(100*(cos(~frame)*0.1+0.1))*4+120,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+440,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
		sin(100*(cos(~frame)*0.1+0.1))*4+120,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 90@
		sin(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 33@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 13@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 33@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 40@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.stroke;

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 90@
		sin(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 50@
		sin(80*(cos(~frame)*0.15+0.1))*6+ 290);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 95@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 270);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 55@
		sin(80*(cos(~frame)*0.1+0.1))*8+ 280);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 90@
		sin(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.fillStroke;

	Pen.scale(1.2,1.2);

	Pen.translate(-400,-50);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 90@
		cos(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 33@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 13@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 33@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 40@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.stroke;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 90@
		cos(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 35@
		sin(80*(cos(~frame)*0.2+0.2))*8+ 290);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 95@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 270);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 55@
		sin(80*(cos(~frame)*0.2+0.1))*8+ 280);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 90@
		cos(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.fillStroke;

	};
	};
);

(
/////////////////////////////////////////////////////////////////////////////////////
// Scene 4
/////////////////////////////////////////////////////////////////////////////////////
~scene4.value;
~scene4 =
{
if(~u1.isNil,{ nil },   {~u1.close });
if(~u2.isNil,{ nil },   {~u2.close });
if(~u3.isNil,{ nil },   {~u3.close });
if(~u4.isNil,{ nil },   {~u4.close });
~rndStrk1 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk2 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk3 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~width1 = rrand(2,10);
~width2 = rrand(2,15);
~width3 = rrand(2,15);

~u1rndScale = 0.9;
~u2rndScale = 0.7;
~u3rndScale = 0.7;
~u4rndScale = 1;

~u1rndTrnslx = 50;
~u2rndTrnslx = rrand(1400,1400);
~u3rndTrnslx = rrand(-100,-100);
~u4rndTrnslx = rrand(-100,-100);

~u1rndTrnsly = -150;
~u2rndTrnsly = -150;
~u3rndTrnsly = 0;
~u4rndTrnsly = 400;

~rndSkew1 = rrand(-0.1,0.1);
~rndSkew2 = rrand(-0.1,0.1);
~rndSkew3 = rrand(-0.1,0.1);
~u1rndRotate = rrand(-0.3,0.2);
~u2rndRotate = rrand(-0.01,0.05);
~u3rndRotate = rrand(-0.03,0.02);
~u4rndRotate = rrand(-0.03,0.02);
~strkCol = Color.new255(rrand(50,90), rrand(50,90), rrand(50,90));
~rndCol1 = Color.yellow;
~rndCol2 = Color.cyan;
~rndCol3 = Color.cyan;
~rndCol4 = Color.cyan;
~rndStrCurve1 = rrand(800,1050);
~rndStrCurve2 = rrand(800,1050);

/////////////////////////////////////////////////////////////////////////////////////
// Sax.
/////////////////////////////////////////////////////////////////////////////////////

~u1 = UserView(w, Rect(0, 0, 1920, 1080));
~u1.animate = true;
~u1.frameRate = 60;
~u1.background = Color(0.2,0.5,0.8);
~u1.drawFunc = {
~frame= ~u1.frame+40*0.123;

	//Background.

	//Background.

		Pen.fillColor = Color(0.2,0.7,0.6);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(920,540));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,920,540);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(920,540));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,920,540);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(920,540));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,920,540);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(920,540));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,920,540);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(920,540));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,920,540);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(920,540));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,920,540);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(920,540));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,920,540);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(920,540));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,920,540);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(920,540));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,920,540);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(920,540));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,920,540);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(920,540));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,920,540);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(920,540));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,920,540);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(920,540));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,920,540);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(920,540));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,920,540);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(920,540));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.35,920,540);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(920,540));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.2,920,540);

		Pen.fillColor = Color(0.8,0.2,0.5);

	Pen.fillOval(Rect.aboutPoint(Point(
		cos(40*(cos(~frame)*0.1+0.1))*16+960,
		cos(20*(cos(~frame)*0.1+0.1))*16+540),
		cos(100*(cos(~frame)*0.1+0.1))*8+400,
	sin(80*(cos(~frame)*0.1+0.1))*8+400));

	Pen.scale(~u1rndScale,~u1rndScale);
	Pen.translate(~u1rndTrnslx,~u1rndTrnsly);

	//Mouthpiece

	Pen.strokeColor = Color(0.2,0.2,0.2);
	Pen.fillColor = ~rndCol1;


	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+220 @
		sin(20*(sin(~frame)*0.1+0.1))*2+250,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	1.9pi, 0.3pi);
	Pen.fillStroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+340 @
		sin(20*(sin(~frame)*0.1+0.1))*2+160,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
		cos(80*(cos(~frame)*0.1+0.1))*4+150,
	2.4pi, 0.3pi);
	Pen.fillStroke;

	Pen.width = ~width3;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+240 @
		sin(20*(sin(~frame)*0.1+0.1))*2+380,
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
		cos(80*(cos(~frame)*0.1+0.1))*4+130,
	1.5pi, 0.5pi);
	Pen.fillStroke;

	//Body1

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*32+200,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.fillColor = Color(0.2,0.2,0.2);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+70,
	cos(80*(cos(~frame)*0.1+0.1))*4+90));

	Pen.fillColor = ~rndCol1;

	//Button1

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));

/////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Body1

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*32+200,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	//Button1

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));
};

/////////////////////////////////////////////////////////////////////////////////////
// Bass
/////////////////////////////////////////////////////////////////////////////////////

~u2 = UserView(w, Rect(0, 0, 1920, 1080));
~u2.animate = true;
~u2.frameRate = 60;
~u2.drawFunc = {

~frame= ~u1.frame+40*0.123; //Right phase and speed for the animations we need.

		Pen.rotate(~u2rndRotate);
	Pen.scale(~u2rndScale,~u2rndScale);
	Pen.translate(~u2rndTrnslx,~u2rndTrnsly);

	//Neck

	Pen.strokeColor = ~strkCol;
	Pen.fillColor = ~rndCol2;
	Pen.skew(~rndSkew1,~rndSkew2);

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+290),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: -0.2, x: 930, y: 690); //ROTATE

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+340),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+380),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body1

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+700),
	sin(100*(cos(~frame)*0.1+0.1))*4+130,
	cos(80*(cos(~frame)*0.1+0.1))*16+100));

		Pen.fillColor = Color(0,0.7,0.75);

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+580),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+200));

			Pen.fillColor = ~rndCol2;

	//Body2

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+970),
	sin(100*(cos(~frame)*0.1+0.1))*4+200,
	cos(80*(cos(~frame)*0.1+0.1))*16+180));

/////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Neck.
	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+290),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: -0.2, x: 930, y: 690); //ROTATE

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+340),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+380),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+580),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+200));

	//Body1

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+700),
	sin(100*(cos(~frame)*0.1+0.1))*8+130,
	cos(80*(cos(~frame)*0.1+0.1))*16+100));

	//Body2

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+970),
	sin(100*(cos(~frame)*0.1+0.1))*2+200,
	cos(80*(cos(~frame)*0.1+0.1))*16+180));

	//Soundholes.
		Pen.fillColor = ~strkCol;
	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ 180 @
	sin(20*(sin(~frame)*0.1+0.1))*2+880,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+150,
	0.8pi, 0.25pi);

		Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -70 @
	sin(20*(sin(~frame)*0.1+0.1))*2+850,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+150,
	2pi, 0.25pi);

	Pen.fillStroke;


	//Bridge and tailpiece.

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -60 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1100,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+150,
	1.4pi, 0.25pi);
	Pen.stroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -120 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1200,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.4pi, 0.25pi);
	Pen.stroke;

	Pen.fillColor = ~rndCol2;
	Pen.width = ~width3;
	Pen.lineDash=~rndStrk3;
	Pen.addWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -155 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1240,
	sin(100*(cos(~frame)*0.1+0.1))*4+100,
	1.5pi, 0.15pi);
	Pen.fillStroke;

	//Soundholes

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -120 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1200,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.4pi, 0.25pi);
	Pen.fillStroke;

	//String.

	Pen.width = 15;
	Pen.lineDash=~rndStrk1;
	Pen.moveTo(940@310);
	Pen.curveTo(
	Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+1050),
	Point(
	sin(200*(cos(~frame)*0.1+0.1))*63+~rndStrCurve1,
			cos(80*(cos(~frame)*0.1+0.1))*8+600),
	Point(
	cos(100*(cos(~frame)*0.1+0.1))*32+~rndStrCurve2,
	sin(80*(cos(~frame)*0.1+0.1))*8+800),
	);

	Pen.stroke;
};

/////////////////////////////////////////////////////////////////////////////////////
// Keys
/////////////////////////////////////////////////////////////////////////////////////

~u3 = UserView(w, Rect(0, 0, 1920, 1080));
~u3.animate = true;
~u3.frameRate = 60;
~u3.drawFunc = {
	// ~u1.background = Color.new255(125, 231, 213); /*(sin(~u1.frame*0.1)*0.2+0.6,sin(~u1.frame*0.11)*0.2+0.6,sin(~u1.frame*0.12 )*0.2+0.6);*/

	~frame= ~u1.frame+40*0.123; //Right phase and speed for the animations we need.

	Pen.rotate(~u3rndRotate);
	Pen.scale(~u3rndScale,~u3rndScale);
	Pen.translate(~u3rndTrnslx,~u3rndTrnsly);

	Pen.strokeColor = ~strkCol;
	Pen.fillColor = ~rndCol3;
	Pen.skew(~rndSkew2,~rndSkew3);

/////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Lid.

	Pen.skew(-1,0);

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;

	Pen.moveTo(cos(80*(cos(~frame)*0.1+0.1))*4+200@cos(80*(cos(~frame)*0.1+0.1))*4+150);
	Pen.curveTo(
	Point(
		sin(40*(cos(~frame)*0.1+0.1))*16+1150,
		cos(20*(cos(~frame)*0.1+0.1))*4+400),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*63+1050,
			cos(80*(cos(~frame)*0.1+0.1))*8+380),
	Point(
	cos(100*(cos(~frame)*0.1+0.1))*32+1200,
	sin(80*(cos(~frame)*0.1+0.1))*8+ 200),
	);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

	Pen.lineTo(sin(80*(cos(~frame)*0.1+0.1))*4+150@cos(80*(cos(~frame)*0.1+0.1))*4+150);
	Pen.lineTo(cos(80*(cos(~frame)*0.1+0.1))*4+200@cos(80*(cos(~frame)*0.1+0.1))*4+150);
		Pen.fillStroke;

	Pen.moveTo(sin(100*(cos(~frame)*0.05+0.1))*4+186@cos(80*(cos(~frame)*0.1+0.1))*4+400);

		Pen.lineDash=~rndStrk2;
		Pen.width = ~width2;

	Pen.curveTo(
	Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1300,
		sin(20*(sin(~frame)*0.1+0.1))*4+550),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*63+1450,
			cos(80*(cos(~frame)*0.1+0.1))*8+500),
	Point(
	cos(100*(cos(~frame)*0.1+0.1))*32+1100,
	sin(80*(cos(~frame)*0.1+0.1))*8+ 500),
	);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+150@
		sin(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.05+0.1))*4+186@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

		Pen.fillStroke;
		Pen.lineDash=~rndStrk3;
		Pen.width = ~width3;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+470);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+132@
		cos(80*(cos(~frame)*0.1+0.1))*4+615);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+133@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+146@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+149@
		cos(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+133@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

		Pen.lineDash=~rndStrk2;
		Pen.width = ~width1;

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+132@
		cos(80*(cos(~frame)*0.1+0.1))*4+615);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+180@
		cos(80*(cos(~frame)*0.1+0.1))*4+610);

		Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+185@
		cos(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+150@
		sin(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.fillStroke;
	Pen.lineDash= FloatArray[1,1,1,2,1,1,1,1,1,2];
	Pen.width = 15;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+146@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.stroke;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+470);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		sin(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+95@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+95@
		cos(80*(cos(~frame)*0.1+0.1))*4+490);

	Pen.fillStroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+135@
		cos(80*(cos(~frame)*0.1+0.1))*4+610);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+135@
		cos(80*(cos(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+140@
		cos(80*(sin(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+140@
		sin(80*(cos(~frame)*0.1+0.1))*4+600);

	Pen.fillStroke;

	Pen.width = ~width3;
	Pen.lineDash=~rndStrk1;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+180@
		cos(80*(cos(~frame)*0.1+0.1))*4+610);


	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+177@
		cos(80*(cos(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+172@
		cos(80*(cos(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+175@
		cos(80*(cos(~frame)*0.1+0.1))*4+600);

	Pen.fillStroke;

};


/////////////////////////////////////////////////////////////////////////////////////
// Drums.
/////////////////////////////////////////////////////////////////////////////////////

~u4 = UserView(w, Rect(0, 0, 1920, 1080));
~u4.animate = true;
~u4.frameRate = 60;
~u4.drawFunc = {
	// ~u1.background = Color.new255(125, 231, 213); /*(sin(~u1.frame*0.1)*0.2+0.6,sin(~u1.frame*0.11)*0.2+0.6,sin(~u1.frame*0.12 )*0.2+0.6);*/

	~frame= ~u1.frame+40*0.123; //Right phase and speed for the animations we need.

	Pen.rotate(~u4rndRotate);
	Pen.scale(~u4rndScale,~u4rndScale);
	Pen.translate(~u4rndTrnslx,~u4rndTrnsly);

	Pen.strokeColor = ~strkCol;
	Pen.fillColor = ~rndCol4;
	Pen.skew(~rndSkew1,~rndSkew3);

//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//BD Feet

	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+ -10 @
		sin(20*(sin(~frame)*0.1+0.1))*2+550,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.2pi, 0.15pi);

	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+ -90 @
		sin(20*(sin(~frame)*0.1+0.1))*2+560,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.7pi, 0.15pi);

	Pen.fillStroke;

	//BigTom

    Pen.translate(10,-50);

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width1;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -18@
		cos(80*(cos(~frame)*0.1+0.1))*4+410);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -65@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 600);

	Pen.curveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -102@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 600,
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 260,
	cos(80*(cos(~frame)*0.1+0.1))*2+620),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 260,
	cos(80*(cos(~frame)*0.1+0.1))*2+620));

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -58@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 410);

	Pen.fillStroke;

	Pen.width = ~width2;

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+260,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
	sin(100*(cos(~frame)*0.1+0.1))*16+80,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+260,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
	sin(100*(cos(~frame)*0.1+0.1))*16+80,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	//Snare

		Pen.lineDash=~rndStrk1;
	Pen.width = ~width3;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 65@
		cos(80*(cos(~frame)*0.1+0.1))*4+380);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 40@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 480);

	Pen.curveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 30@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 400,
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 500,
	cos(80*(cos(~frame)*0.1+0.1))*2+540),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 500,
	cos(80*(cos(~frame)*0.1+0.1))*2+520));

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 18@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 410);

	Pen.fillStroke;

	Pen.width = ~width2;

	Pen.rotate(1.95pi,500,380);

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+500,
		sin(20*(sin(~frame)*0.1+0.1))*4+400),
	sin(100*(cos(~frame)*0.1+0.1))*16+140,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+500,
		sin(20*(sin(~frame)*0.1+0.1))*4+400),
	sin(100*(cos(~frame)*0.1+0.1))*16+140,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	Pen.rotate(-1.95pi,500,380);

    Pen.translate(-10,50);

	//BassDrum

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width2;
	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+440,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
		sin(100*(cos(~frame)*0.1+0.1))*4+120,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+440,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
		sin(100*(cos(~frame)*0.1+0.1))*4+120,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 90@
		sin(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 33@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 13@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 33@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 40@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.stroke;

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 90@
		sin(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 50@
		sin(80*(cos(~frame)*0.15+0.1))*6+ 290);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 95@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 270);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 55@
		sin(80*(cos(~frame)*0.1+0.1))*8+ 280);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 90@
		sin(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.fillStroke;

	Pen.scale(1.2,1.2);

	Pen.translate(-400,-50);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 90@
		cos(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 33@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 13@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 33@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 40@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.stroke;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 90@
		cos(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 35@
		sin(80*(cos(~frame)*0.2+0.2))*8+ 290);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 95@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 270);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 55@
		sin(80*(cos(~frame)*0.2+0.1))*8+ 280);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 90@
		cos(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.fillStroke;

	};
	};
);

(
/////////////////////////////////////////////////////////////////////////////////////
// Scene 5a
/////////////////////////////////////////////////////////////////////////////////////
~scene5a.value;
~scene5a =
{
if(~u1.isNil,{ nil },   {~u1.close });
if(~u2.isNil,{ nil },   {~u2.close });
if(~u3.isNil,{ nil },   {~u3.close });
if(~u4.isNil,{ nil },   {~u4.close });
~rndStrk1 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk2 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk3 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~width1 = rrand(2,10);
~width2 = rrand(2,15);
~width3 = rrand(2,15);

~u1rndScale = rrand(0.7,0.9);
~u2rndScale = 0.7;
~u3rndScale = 0.7;
~u4rndScale = 1;

~u1rndTrnslx = rrand(-60,60);
~u2rndTrnslx = rrand(-550,-550);
~u3rndTrnslx = rrand(1750,1750);
~u4rndTrnslx = rrand(1150,1150);

~u1rndTrnsly = -100;
~u2rndTrnsly = rrand(-50,0);
~u3rndTrnsly = 700;
~u4rndTrnsly = -150;

~backrndX = rrand(1700,1900);
~backrndY = rrand(400,600);

~rndSkew1 = rrand(-0.1,0.1);
~rndSkew2 = rrand(-0.1,0.1);
~rndSkew3 = rrand(-0.1,0.1);
~u1rndRotate = rrand(-0.3,0.2);
~u2rndRotate = rrand(-0.01,0.05);
~u3rndRotate = rrand(-0.03,0.02);
~u4rndRotate = rrand(-0.03,0.02);
~strkCol = Color.new255(rrand(50,90), rrand(50,90), rrand(50,90));
~rndCol1 = Color.yellow;
~rndCol2 = Color.cyan;
~rndCol3 = Color.cyan;
~rndCol4 = Color.cyan;
~rndStrCurve1 = rrand(800,1050);
~rndStrCurve2 = rrand(800,1050);

/////////////////////////////////////////////////////////////////////////////////////
// Sax.
/////////////////////////////////////////////////////////////////////////////////////

~u1 = UserView(w, Rect(0, 0, 1920, 1080));
~u1.animate = true;
~u1.frameRate = 60;
~u1.background = Color(0.7,0.2,0.2);
~u1.drawFunc = {

	~frame= ~u1.frame+40*0.123; //Right phase and speed for the animations we need.

	//Background.

		Pen.fillColor = Color(0.2,0.2,0.2,0.3);

		Pen.moveTo(Point(~backrndX, 0));
		Pen.lineTo(Point(0,~backrndY));
		Pen.lineTo(Point(0,1080));
		Pen.lineTo(Point(1920,1080));
		Pen.lineTo(Point(1920,0));
		Pen.moveTo(Point(1700, 0));
		Pen.fill;

	//Spotlight

	Pen.scale(~u1rndScale,~u1rndScale);
	Pen.translate(~u1rndTrnslx,~u1rndTrnsly);
	Pen.skew(~rndSkew1);

	Pen.fillColor = Color(1,1,1,0.15);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*8+920,
		sin(20*(sin(~frame)*0.1+0.1))*8+1100),
		sin(100*(cos(~frame)*0.1+0.1))*4+350,
		cos(80*(cos(~frame)*0.1+0.1))*4+160));
	Pen.fill;

	//Mouthpiece

	Pen.strokeColor = Color(0.2,0.2,0.2);
	Pen.fillColor = ~rndCol1;


	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+220 @
		sin(20*(sin(~frame)*0.1+0.1))*2+250,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	1.9pi, 0.3pi);
	Pen.fillStroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+340 @
		sin(20*(sin(~frame)*0.1+0.1))*2+160,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
		cos(80*(cos(~frame)*0.1+0.1))*4+150,
	2.4pi, 0.3pi);
	Pen.fillStroke;

	Pen.width = ~width3;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+240 @
		sin(20*(sin(~frame)*0.1+0.1))*2+380,
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
		cos(80*(cos(~frame)*0.1+0.1))*4+130,
	1.5pi, 0.5pi);
	Pen.fillStroke;

	//Body1

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*8+130,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.fillColor = Color(0.2,0.2,0.2);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+70,
	cos(80*(cos(~frame)*0.1+0.1))*4+90));

	Pen.fillColor = ~rndCol1;

	//Button1

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));

	/////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Body1

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*8+130,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	//Button1

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));
};

/////////////////////////////////////////////////////////////////////////////////////
// Bass
/////////////////////////////////////////////////////////////////////////////////////

~u2 = UserView(w, Rect(0, 0, 1920, 1080));
~u2.animate = true;
~u2.frameRate = 60;
~u2.drawFunc = {
~frame= ~u1.frame+40*0.123;

	Pen.scale(~u2rndScale,~u2rndScale);
	Pen.translate(~u2rndTrnslx,~u2rndTrnsly);
	Pen.skew(~rndSkew1,~rndSkew2);

	//Spotlight

	Pen.fillColor = Color(1,1,1,0.15);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*8+850,
		sin(20*(sin(~frame)*0.1+0.1))*8+1200),
		sin(100*(cos(~frame)*0.1+0.1))*4+300,
		cos(80*(cos(~frame)*0.1+0.1))*4+120));
	Pen.fill;

	//Neck

	Pen.rotate(~u2rndRotate);

	Pen.strokeColor = ~strkCol;
	Pen.fillColor = ~rndCol2;

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+290),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: -0.2, x: 930, y: 690); //ROTATE

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+340),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+380),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body1

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+700),
	sin(100*(cos(~frame)*0.1+0.1))*4+130,
	cos(80*(cos(~frame)*0.1+0.1))*16+100));

		Pen.fillColor = Color(0,0.7,0.75);

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+580),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+200));

			Pen.fillColor = ~rndCol2;

	//Body2

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+970),
	sin(100*(cos(~frame)*0.1+0.1))*4+200,
	cos(80*(cos(~frame)*0.1+0.1))*16+180));

/////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Neck.
	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+290),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: -0.2, x: 930, y: 690); //ROTATE

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+340),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+380),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+580),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+200));

	//Body1

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+700),
	sin(100*(cos(~frame)*0.1+0.1))*8+130,
	cos(80*(cos(~frame)*0.1+0.1))*16+100));

	//Body2

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+970),
	sin(100*(cos(~frame)*0.1+0.1))*2+200,
	cos(80*(cos(~frame)*0.1+0.1))*16+180));

	//Soundholes.
		Pen.fillColor = ~strkCol;
	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ 180 @
	sin(20*(sin(~frame)*0.1+0.1))*2+880,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+150,
	0.8pi, 0.25pi);

		Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -70 @
	sin(20*(sin(~frame)*0.1+0.1))*2+850,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+150,
	2pi, 0.25pi);

	Pen.fillStroke;


	//Bridge and tailpiece.

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -60 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1100,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+150,
	1.4pi, 0.25pi);
	Pen.stroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -120 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1200,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.4pi, 0.25pi);
	Pen.stroke;

	Pen.fillColor = ~rndCol2;
	Pen.width = ~width3;
	Pen.lineDash=~rndStrk3;
	Pen.addWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -155 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1240,
	sin(100*(cos(~frame)*0.1+0.1))*4+100,
	1.5pi, 0.15pi);
	Pen.fillStroke;

	//Soundholes

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -120 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1200,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.4pi, 0.25pi);
	Pen.fillStroke;

	//String.

	Pen.width = 15;
	Pen.lineDash=~rndStrk1;
	Pen.moveTo(940@310);
	Pen.curveTo(
	Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+1050),
	Point(
	sin(200*(cos(~frame)*0.1+0.1))*63+~rndStrCurve1,
			cos(80*(cos(~frame)*0.1+0.1))*8+600),
	Point(
	cos(100*(cos(~frame)*0.1+0.1))*32+~rndStrCurve2,
	sin(80*(cos(~frame)*0.1+0.1))*8+800),
	);

	Pen.stroke;
};

/////////////////////////////////////////////////////////////////////////////////////
// Keys
/////////////////////////////////////////////////////////////////////////////////////

~u3 = UserView(w, Rect(0, 0, 1920, 1080));
~u3.animate = true;
~u3.frameRate = 60;
~u3.drawFunc = {

	~frame= ~u1.frame+40*0.123;

	//Spotlight

	Pen.scale(~u3rndScale,~u3rndScale);
	Pen.translate(~u3rndTrnslx,~u3rndTrnsly);

	Pen.fillColor = Color(1,1,1,0.15);

	Pen.fillOval(Rect.aboutPoint(Point(
			sin(40*(sin(~frame)*0.1+0.1))*8+500,
		sin(20*(sin(~frame)*0.1+0.1))*8+700),
		sin(100*(cos(~frame)*0.1+0.1))*4+350,
		cos(80*(cos(~frame)*0.1+0.1))*4+200));
	Pen.fill;

	Pen.rotate(~u3rndRotate);
	Pen.skew(~rndSkew2,~rndSkew3);
	Pen.strokeColor = ~strkCol;
	Pen.fillColor = ~rndCol3;


/////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Lid.

	Pen.skew(-1,0);

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;

	Pen.moveTo(cos(80*(cos(~frame)*0.1+0.1))*4+200@cos(80*(cos(~frame)*0.1+0.1))*4+150);
	Pen.curveTo(
	Point(
		sin(40*(cos(~frame)*0.1+0.1))*16+1150,
		cos(20*(cos(~frame)*0.1+0.1))*4+400),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*63+1050,
			cos(80*(cos(~frame)*0.1+0.1))*8+380),
	Point(
	cos(100*(cos(~frame)*0.1+0.1))*32+1200,
	sin(80*(cos(~frame)*0.1+0.1))*8+ 200),
	);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

	Pen.lineTo(sin(80*(cos(~frame)*0.1+0.1))*4+150@cos(80*(cos(~frame)*0.1+0.1))*4+150);
	Pen.lineTo(cos(80*(cos(~frame)*0.1+0.1))*4+200@cos(80*(cos(~frame)*0.1+0.1))*4+150);
		Pen.fillStroke;

	Pen.moveTo(sin(100*(cos(~frame)*0.05+0.1))*4+186@cos(80*(cos(~frame)*0.1+0.1))*4+400);

		Pen.lineDash=~rndStrk2;
		Pen.width = ~width2;

	Pen.curveTo(
	Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1300,
		sin(20*(sin(~frame)*0.1+0.1))*4+550),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*63+1450,
			cos(80*(cos(~frame)*0.1+0.1))*8+500),
	Point(
	cos(100*(cos(~frame)*0.1+0.1))*32+1100,
	sin(80*(cos(~frame)*0.1+0.1))*8+ 500),
	);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+150@
		sin(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.05+0.1))*4+186@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

		Pen.fillStroke;
		Pen.lineDash=~rndStrk3;
		Pen.width = ~width3;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+470);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+132@
		cos(80*(cos(~frame)*0.1+0.1))*4+615);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+133@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+146@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+149@
		cos(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+133@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

		Pen.lineDash=~rndStrk2;
		Pen.width = ~width1;

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+132@
		cos(80*(cos(~frame)*0.1+0.1))*4+615);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+180@
		cos(80*(cos(~frame)*0.1+0.1))*4+610);

		Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+185@
		cos(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+150@
		sin(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.fillStroke;
	Pen.lineDash= FloatArray[1,1,1,2,1,1,1,1,1,2];
	Pen.width = 15;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+146@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.stroke;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+470);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		sin(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+95@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+95@
		cos(80*(cos(~frame)*0.1+0.1))*4+490);

	Pen.fillStroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+135@
		cos(80*(cos(~frame)*0.1+0.1))*4+610);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+135@
		cos(80*(cos(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+140@
		cos(80*(sin(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+140@
		sin(80*(cos(~frame)*0.1+0.1))*4+600);

	Pen.fillStroke;

	Pen.width = ~width3;
	Pen.lineDash=~rndStrk1;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+180@
		cos(80*(cos(~frame)*0.1+0.1))*4+610);


	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+177@
		cos(80*(cos(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+172@
		cos(80*(cos(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+175@
		cos(80*(cos(~frame)*0.1+0.1))*4+600);

	Pen.fillStroke;

};


/////////////////////////////////////////////////////////////////////////////////////
// Drums.
/////////////////////////////////////////////////////////////////////////////////////

~u4 = UserView(w, Rect(0, 0, 1920, 1080));
~u4.animate = true;
~u4.frameRate = 60;
~u4.drawFunc = {

	~frame= ~u1.frame+40*0.123;


	Pen.strokeColor = ~strkCol;
	Pen.translate(~u4rndTrnslx,~u4rndTrnsly);

	Pen.fillColor = Color(1,1,1,0.15);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*8+400,
		sin(20*(sin(~frame)*0.1+0.1))*8+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+350,
		cos(80*(cos(~frame)*0.1+0.1))*4+160));
	Pen.fill;

	Pen.fillColor = ~rndCol4;
	Pen.rotate(~u4rndRotate);
	Pen.skew(~rndSkew1,~rndSkew3);
	Pen.scale(~u4rndScale,~u4rndScale);

/////////////////////////////////////////////////////////////////////////////////////Strokes.

	//BD Feet

	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+ -10 @
		sin(20*(sin(~frame)*0.1+0.1))*2+550,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.2pi, 0.15pi);

	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+ -90 @
		sin(20*(sin(~frame)*0.1+0.1))*2+560,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.7pi, 0.15pi);

	Pen.fillStroke;

	//BigTom

    Pen.translate(10,-50);

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width1;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -18@
		cos(80*(cos(~frame)*0.1+0.1))*4+410);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -65@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 600);

	Pen.curveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -102@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 600,
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 260,
	cos(80*(cos(~frame)*0.1+0.1))*2+620),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 260,
	cos(80*(cos(~frame)*0.1+0.1))*2+620));

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -58@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 410);

	Pen.fillStroke;

	Pen.width = ~width2;

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+260,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
	sin(100*(cos(~frame)*0.1+0.1))*16+80,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+260,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
	sin(100*(cos(~frame)*0.1+0.1))*16+80,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	//Snare

		Pen.lineDash=~rndStrk1;
	Pen.width = ~width3;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 65@
		cos(80*(cos(~frame)*0.1+0.1))*4+380);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 40@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 480);

	Pen.curveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 30@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 400,
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 500,
	cos(80*(cos(~frame)*0.1+0.1))*2+540),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 500,
	cos(80*(cos(~frame)*0.1+0.1))*2+520));

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 18@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 410);

	Pen.fillStroke;

	Pen.width = ~width2;

	Pen.rotate(1.95pi,500,380);

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+500,
		sin(20*(sin(~frame)*0.1+0.1))*4+400),
	sin(100*(cos(~frame)*0.1+0.1))*16+140,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+500,
		sin(20*(sin(~frame)*0.1+0.1))*4+400),
	sin(100*(cos(~frame)*0.1+0.1))*16+140,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	Pen.rotate(-1.95pi,500,380);

    Pen.translate(-10,50);

	//BassDrum

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width2;
	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+440,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
		sin(100*(cos(~frame)*0.1+0.1))*4+120,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+440,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
		sin(100*(cos(~frame)*0.1+0.1))*4+120,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 90@
		sin(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 33@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 13@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 33@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 40@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.stroke;

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 90@
		sin(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 50@
		sin(80*(cos(~frame)*0.15+0.1))*6+ 290);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 95@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 270);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 55@
		sin(80*(cos(~frame)*0.1+0.1))*8+ 280);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 90@
		sin(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.fillStroke;

	Pen.scale(1.2,1.2);

	Pen.translate(-400,-50);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 90@
		cos(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 33@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 13@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 33@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 40@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.stroke;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 90@
		cos(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 35@
		sin(80*(cos(~frame)*0.2+0.2))*8+ 290);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 95@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 270);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 55@
		sin(80*(cos(~frame)*0.2+0.1))*8+ 280);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 90@
		cos(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.fillStroke;

	};
	};
);

(
/////////////////////////////////////////////////////////////////////////////////////
// Scene 5b
/////////////////////////////////////////////////////////////////////////////////////
~scene5b.value;
~scene5b =
{
if(~u1.isNil,{ nil },   {~u1.close });
if(~u2.isNil,{ nil },   {~u2.close });
if(~u3.isNil,{ nil },   {~u3.close });
if(~u4.isNil,{ nil },   {~u4.close });
~rndStrk1 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk2 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk3 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~width1 = rrand(2,10);
~width2 = rrand(2,15);
~width3 = rrand(2,15);

~u1rndScale = rrand(0.7,0.9);
~u2rndScale = 0.7;
~u3rndScale = 0.7;
~u4rndScale = 1;

~u1rndTrnslx = rrand(-60,60);
~u2rndTrnslx = rrand(-550,-550);
~u3rndTrnslx = rrand(1750,1750);
~u4rndTrnslx = rrand(1150,1150);

~u1rndTrnsly = -100;
~u2rndTrnsly = rrand(-50,0);
~u3rndTrnsly = 700;
~u4rndTrnsly = -150;

~backrndX = rrand(1700,1900);
~backrndY = rrand(400,600);

~rndSkew1 = rrand(-0.1,0.1);
~rndSkew2 = rrand(-0.1,0.1);
~rndSkew3 = rrand(-0.1,0.1);
~u1rndRotate = rrand(-0.3,0.2);
~u2rndRotate = rrand(-0.01,0.05);
~u3rndRotate = rrand(-0.03,0.02);
~u4rndRotate = rrand(-0.03,0.02);
~strkCol = Color.new255(rrand(50,90), rrand(50,90), rrand(50,90));
~rndCol1 = Color.yellow;
~rndCol2 = Color.cyan;
~rndCol3 = Color.cyan;
~rndCol4 = Color.cyan;
~rndStrCurve1 = rrand(800,1050);
~rndStrCurve2 = rrand(800,1050);

/////////////////////////////////////////////////////////////////////////////////////
// Sax.
/////////////////////////////////////////////////////////////////////////////////////

~u1 = UserView(w, Rect(0, 0, 1920, 1080));
~u1.animate = true;
~u1.frameRate = 60;
~u1.background = Color.rand(0.3,0.5);
~u1.drawFunc = {

	~frame= ~u1.frame+40*0.123; //Right phase and speed for the animations we need.

	//Background.

		Pen.fillColor = Color(0.2,0.2,0.2,0.3);

		Pen.moveTo(Point(~backrndX, 0));
		Pen.lineTo(Point(0,~backrndY));
		Pen.lineTo(Point(0,1080));
		Pen.lineTo(Point(1920,1080));
		Pen.lineTo(Point(1920,0));
		Pen.moveTo(Point(1700, 0));
		Pen.fill;

	//Spotlight

	Pen.scale(~u1rndScale,~u1rndScale);
	Pen.translate(~u1rndTrnslx,~u1rndTrnsly);
	Pen.skew(~rndSkew1);

	Pen.fillColor = Color(1,1,1,0.15);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*8+920,
		sin(20*(sin(~frame)*0.1+0.1))*8+1100),
		sin(100*(cos(~frame)*0.1+0.1))*4+350,
		cos(80*(cos(~frame)*0.1+0.1))*4+160));
	Pen.fill;

	//Mouthpiece

	Pen.strokeColor = Color(0.2,0.2,0.2);
	Pen.fillColor = ~rndCol1;


	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+220 @
		sin(20*(sin(~frame)*0.1+0.1))*2+250,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	1.9pi, 0.3pi);
	Pen.fillStroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+340 @
		sin(20*(sin(~frame)*0.1+0.1))*2+160,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
		cos(80*(cos(~frame)*0.1+0.1))*4+150,
	2.4pi, 0.3pi);
	Pen.fillStroke;

	Pen.width = ~width3;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+240 @
		sin(20*(sin(~frame)*0.1+0.1))*2+380,
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
		cos(80*(cos(~frame)*0.1+0.1))*4+130,
	1.5pi, 0.5pi);
	Pen.fillStroke;

	//Body1

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*8+130,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.fillColor = Color(0.2,0.2,0.2);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+70,
	cos(80*(cos(~frame)*0.1+0.1))*4+90));

	Pen.fillColor = ~rndCol1;

	//Button1

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));

/////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Body1

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*8+130,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	//Button1

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));
};

/////////////////////////////////////////////////////////////////////////////////////
// Bass
/////////////////////////////////////////////////////////////////////////////////////

~u2 = UserView(w, Rect(0, 0, 1920, 1080));
~u2.animate = true;
~u2.frameRate = 60;
~u2.drawFunc = {
~frame= ~u1.frame+40*0.123;

	Pen.scale(~u2rndScale,~u2rndScale);
	Pen.translate(~u2rndTrnslx,~u2rndTrnsly);
	Pen.skew(~rndSkew1,~rndSkew2);

	//Spotlight

	Pen.fillColor = Color(1,1,1,0.15);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*8+850,
		sin(20*(sin(~frame)*0.1+0.1))*8+1200),
		sin(100*(cos(~frame)*0.1+0.1))*4+300,
		cos(80*(cos(~frame)*0.1+0.1))*4+120));
	Pen.fill;

	//Neck

	Pen.rotate(~u2rndRotate);

	Pen.strokeColor = ~strkCol;
	Pen.fillColor = ~rndCol2;

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+290),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: -0.2, x: 930, y: 690); //ROTATE

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+340),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+380),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body1

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+700),
	sin(100*(cos(~frame)*0.1+0.1))*4+130,
	cos(80*(cos(~frame)*0.1+0.1))*16+100));

		Pen.fillColor = Color(0,0.7,0.75);

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+580),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+200));

			Pen.fillColor = ~rndCol2;

	//Body2

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+970),
	sin(100*(cos(~frame)*0.1+0.1))*4+200,
	cos(80*(cos(~frame)*0.1+0.1))*16+180));

/////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Neck.
	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+290),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: -0.2, x: 930, y: 690); //ROTATE

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+340),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+380),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+580),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+200));

	//Body1

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+700),
	sin(100*(cos(~frame)*0.1+0.1))*8+130,
	cos(80*(cos(~frame)*0.1+0.1))*16+100));

	//Body2

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+970),
	sin(100*(cos(~frame)*0.1+0.1))*2+200,
	cos(80*(cos(~frame)*0.1+0.1))*16+180));

	//Soundholes.
		Pen.fillColor = ~strkCol;
	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ 180 @
	sin(20*(sin(~frame)*0.1+0.1))*2+880,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+150,
	0.8pi, 0.25pi);

		Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -70 @
	sin(20*(sin(~frame)*0.1+0.1))*2+850,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+150,
	2pi, 0.25pi);

	Pen.fillStroke;


	//Bridge and tailpiece.

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -60 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1100,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+150,
	1.4pi, 0.25pi);
	Pen.stroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -120 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1200,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.4pi, 0.25pi);
	Pen.stroke;

	Pen.fillColor = ~rndCol2;
	Pen.width = ~width3;
	Pen.lineDash=~rndStrk3;
	Pen.addWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -155 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1240,
	sin(100*(cos(~frame)*0.1+0.1))*4+100,
	1.5pi, 0.15pi);
	Pen.fillStroke;

	//Soundholes

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -120 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1200,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.4pi, 0.25pi);
	Pen.fillStroke;

	//String.

	Pen.width = 15;
	Pen.lineDash=~rndStrk1;
	Pen.moveTo(940@310);
	Pen.curveTo(
	Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+1050),
	Point(
	sin(200*(cos(~frame)*0.1+0.1))*63+~rndStrCurve1,
			cos(80*(cos(~frame)*0.1+0.1))*8+600),
	Point(
	cos(100*(cos(~frame)*0.1+0.1))*32+~rndStrCurve2,
	sin(80*(cos(~frame)*0.1+0.1))*8+800),
	);

	Pen.stroke;
};

/////////////////////////////////////////////////////////////////////////////////////
// Keys
/////////////////////////////////////////////////////////////////////////////////////

~u3 = UserView(w, Rect(0, 0, 1920, 1080));
~u3.animate = true;
~u3.frameRate = 60;
~u3.drawFunc = {

	~frame= ~u1.frame+40*0.123;

	//Spotlight

	Pen.scale(~u3rndScale,~u3rndScale);
	Pen.translate(~u3rndTrnslx,~u3rndTrnsly);

	Pen.fillColor = Color(1,1,1,0.15);

	Pen.fillOval(Rect.aboutPoint(Point(
			sin(40*(sin(~frame)*0.1+0.1))*8+500,
		sin(20*(sin(~frame)*0.1+0.1))*8+700),
		sin(100*(cos(~frame)*0.1+0.1))*4+350,
		cos(80*(cos(~frame)*0.1+0.1))*4+200));
	Pen.fill;

	Pen.rotate(~u3rndRotate);
	Pen.skew(~rndSkew2,~rndSkew3);
	Pen.strokeColor = ~strkCol;
	Pen.fillColor = ~rndCol3;


/////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Lid.

	Pen.skew(-1,0);

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;

	Pen.moveTo(cos(80*(cos(~frame)*0.1+0.1))*4+200@cos(80*(cos(~frame)*0.1+0.1))*4+150);
	Pen.curveTo(
	Point(
		sin(40*(cos(~frame)*0.1+0.1))*16+1150,
		cos(20*(cos(~frame)*0.1+0.1))*4+400),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*63+1050,
			cos(80*(cos(~frame)*0.1+0.1))*8+380),
	Point(
	cos(100*(cos(~frame)*0.1+0.1))*32+1200,
	sin(80*(cos(~frame)*0.1+0.1))*8+ 200),
	);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

	Pen.lineTo(sin(80*(cos(~frame)*0.1+0.1))*4+150@cos(80*(cos(~frame)*0.1+0.1))*4+150);
	Pen.lineTo(cos(80*(cos(~frame)*0.1+0.1))*4+200@cos(80*(cos(~frame)*0.1+0.1))*4+150);
		Pen.fillStroke;

	Pen.moveTo(sin(100*(cos(~frame)*0.05+0.1))*4+186@cos(80*(cos(~frame)*0.1+0.1))*4+400);

		Pen.lineDash=~rndStrk2;
		Pen.width = ~width2;

	Pen.curveTo(
	Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1300,
		sin(20*(sin(~frame)*0.1+0.1))*4+550),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*63+1450,
			cos(80*(cos(~frame)*0.1+0.1))*8+500),
	Point(
	cos(100*(cos(~frame)*0.1+0.1))*32+1100,
	sin(80*(cos(~frame)*0.1+0.1))*8+ 500),
	);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+150@
		sin(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.05+0.1))*4+186@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

		Pen.fillStroke;
		Pen.lineDash=~rndStrk3;
		Pen.width = ~width3;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+470);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+132@
		cos(80*(cos(~frame)*0.1+0.1))*4+615);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+133@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+146@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+149@
		cos(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+133@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

		Pen.lineDash=~rndStrk2;
		Pen.width = ~width1;

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+132@
		cos(80*(cos(~frame)*0.1+0.1))*4+615);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+180@
		cos(80*(cos(~frame)*0.1+0.1))*4+610);

		Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+185@
		cos(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+150@
		sin(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.fillStroke;
	Pen.lineDash= FloatArray[1,1,1,2,1,1,1,1,1,2];
	Pen.width = 15;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+146@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.stroke;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+470);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		sin(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+95@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+95@
		cos(80*(cos(~frame)*0.1+0.1))*4+490);

	Pen.fillStroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+135@
		cos(80*(cos(~frame)*0.1+0.1))*4+610);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+135@
		cos(80*(cos(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+140@
		cos(80*(sin(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+140@
		sin(80*(cos(~frame)*0.1+0.1))*4+600);

	Pen.fillStroke;

	Pen.width = ~width3;
	Pen.lineDash=~rndStrk1;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+180@
		cos(80*(cos(~frame)*0.1+0.1))*4+610);


	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+177@
		cos(80*(cos(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+172@
		cos(80*(cos(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+175@
		cos(80*(cos(~frame)*0.1+0.1))*4+600);

	Pen.fillStroke;

};


/////////////////////////////////////////////////////////////////////////////////////
// Drums.
/////////////////////////////////////////////////////////////////////////////////////

~u4 = UserView(w, Rect(0, 0, 1920, 1080));
~u4.animate = true;
~u4.frameRate = 60;
~u4.drawFunc = {

	~frame= ~u1.frame+40*0.123;


	Pen.strokeColor = ~strkCol;
	Pen.translate(~u4rndTrnslx,~u4rndTrnsly);

	Pen.fillColor = Color(1,1,1,0.15);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*8+400,
		sin(20*(sin(~frame)*0.1+0.1))*8+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+350,
		cos(80*(cos(~frame)*0.1+0.1))*4+160));
	Pen.fill;

	Pen.fillColor = ~rndCol4;
	Pen.rotate(~u4rndRotate);
	Pen.skew(~rndSkew1,~rndSkew3);
	Pen.scale(~u4rndScale,~u4rndScale);

//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//BD Feet

	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+ -10 @
		sin(20*(sin(~frame)*0.1+0.1))*2+550,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.2pi, 0.15pi);

	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+ -90 @
		sin(20*(sin(~frame)*0.1+0.1))*2+560,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.7pi, 0.15pi);

	Pen.fillStroke;

	//BigTom

    Pen.translate(10,-50);

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width1;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -18@
		cos(80*(cos(~frame)*0.1+0.1))*4+410);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -65@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 600);

	Pen.curveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -102@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 600,
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 260,
	cos(80*(cos(~frame)*0.1+0.1))*2+620),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 260,
	cos(80*(cos(~frame)*0.1+0.1))*2+620));

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -58@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 410);

	Pen.fillStroke;

	Pen.width = ~width2;

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+260,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
	sin(100*(cos(~frame)*0.1+0.1))*16+80,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+260,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
	sin(100*(cos(~frame)*0.1+0.1))*16+80,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	//Snare

		Pen.lineDash=~rndStrk1;
	Pen.width = ~width3;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 65@
		cos(80*(cos(~frame)*0.1+0.1))*4+380);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 40@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 480);

	Pen.curveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 30@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 400,
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 500,
	cos(80*(cos(~frame)*0.1+0.1))*2+540),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 500,
	cos(80*(cos(~frame)*0.1+0.1))*2+520));

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 18@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 410);

	Pen.fillStroke;

	Pen.width = ~width2;

	Pen.rotate(1.95pi,500,380);

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+500,
		sin(20*(sin(~frame)*0.1+0.1))*4+400),
	sin(100*(cos(~frame)*0.1+0.1))*16+140,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+500,
		sin(20*(sin(~frame)*0.1+0.1))*4+400),
	sin(100*(cos(~frame)*0.1+0.1))*16+140,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	Pen.rotate(-1.95pi,500,380);

    Pen.translate(-10,50);

	//BassDrum

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width2;
	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+440,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
		sin(100*(cos(~frame)*0.1+0.1))*4+120,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+440,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
		sin(100*(cos(~frame)*0.1+0.1))*4+120,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 90@
		sin(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 33@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 13@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 33@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 40@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.stroke;

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 90@
		sin(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 50@
		sin(80*(cos(~frame)*0.15+0.1))*6+ 290);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 95@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 270);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 55@
		sin(80*(cos(~frame)*0.1+0.1))*8+ 280);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 90@
		sin(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.fillStroke;

	Pen.scale(1.2,1.2);

	Pen.translate(-400,-50);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 90@
		cos(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 33@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 13@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 33@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 40@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.stroke;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 90@
		cos(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 35@
		sin(80*(cos(~frame)*0.2+0.2))*8+ 290);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 95@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 270);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 55@
		sin(80*(cos(~frame)*0.2+0.1))*8+ 280);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 90@
		cos(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.fillStroke;

	};
	};
);

(
/////////////////////////////////////////////////////////////////////////////////////
// Scene 5c
/////////////////////////////////////////////////////////////////////////////////////
~scene5c.value;
~scene5c =
{
if(~u1.isNil,{ nil },   {~u1.close });
if(~u2.isNil,{ nil },   {~u2.close });
if(~u3.isNil,{ nil },   {~u3.close });
if(~u4.isNil,{ nil },   {~u4.close });
~rndStrk1 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk2 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk3 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~width1 = rrand(2,10);
~width2 = rrand(2,15);
~width3 = rrand(2,15);

	~u1rndScale = rrand(0.7,0.9);
~u2rndScale = 0.7;
~u3rndScale = 0.7;
~u4rndScale = 1;

	~u1rndTrnslx = rrand(-60,60);
~u2rndTrnslx = rrand(-550,-550);
~u3rndTrnslx = rrand(1750,1750);
~u4rndTrnslx = rrand(1150,1150);

~u1rndTrnsly = -100;
~u2rndTrnsly = rrand(-50,0);
~u3rndTrnsly = 700;
~u4rndTrnsly = -150;

~backrndX = rrand(1700,1900);
~backrndY = rrand(400,600);

~rndSkew1 = rrand(-0.1,0.1);
~rndSkew2 = rrand(-0.1,0.1);
~rndSkew3 = rrand(-0.1,0.1);
~u1rndRotate = rrand(-0.3,0.2);
~u2rndRotate = rrand(-0.01,0.05);
~u3rndRotate = rrand(-0.03,0.02);
~u4rndRotate = rrand(-0.03,0.02);
~strkCol = Color.new255(rrand(50,90), rrand(50,90), rrand(50,90));
~rndCol1 = Color.yellow;
~rndCol2 = Color.cyan;
~rndCol3 = Color.cyan;
~rndCol4 = Color.cyan;
~rndStrCurve1 = rrand(800,1050);
~rndStrCurve2 = rrand(800,1050);

/////////////////////////////////////////////////////////////////////////////////////
// Sax.
/////////////////////////////////////////////////////////////////////////////////////

~u1 = UserView(w, Rect(0, 0, 1920, 1080));
~u1.animate = true;
~u1.frameRate = 60;
~u1.drawFunc = {
~frame= ~u1.frame+40*0.123;
~u1.background = Color(sin(~u1.frame*0.1)*0.1+0.1,sin(~u1.frame*0.12)*0.2+0.4,sin(~u1.frame*0.14 )*0.2+0.7);

	//Background.

		Pen.fillColor = Color(0.2,0.2,0.2,0.3);

		Pen.moveTo(Point(~backrndX, 0));
		Pen.lineTo(Point(0,~backrndY));
		Pen.lineTo(Point(0,1080));
		Pen.lineTo(Point(1920,1080));
		Pen.lineTo(Point(1920,0));
		Pen.moveTo(Point(1700, 0));
		Pen.fill;

	//Spotlight

	Pen.scale(~u1rndScale,~u1rndScale);
	Pen.translate(~u1rndTrnslx,~u1rndTrnsly);
	Pen.skew(~rndSkew1);

	Pen.fillColor = Color(1,1,1,0.15);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*8+920,
		sin(20*(sin(~frame)*0.1+0.1))*8+1100),
		sin(100*(cos(~frame)*0.1+0.1))*4+350,
		cos(80*(cos(~frame)*0.1+0.1))*4+160));
	Pen.fill;

	//Mouthpiece

	Pen.strokeColor = Color(0.2,0.2,0.2);
	Pen.fillColor = ~rndCol1;


	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+220 @
		sin(20*(sin(~frame)*0.1+0.1))*2+250,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	1.9pi, 0.3pi);
	Pen.fillStroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+340 @
		sin(20*(sin(~frame)*0.1+0.1))*2+160,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
		cos(80*(cos(~frame)*0.1+0.1))*4+150,
	2.4pi, 0.3pi);
	Pen.fillStroke;

	Pen.width = ~width3;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+240 @
		sin(20*(sin(~frame)*0.1+0.1))*2+380,
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
		cos(80*(cos(~frame)*0.1+0.1))*4+130,
	1.5pi, 0.5pi);
	Pen.fillStroke;

	//Body1

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*32+200,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.fillColor = Color(0.2,0.2,0.2);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+70,
	cos(80*(cos(~frame)*0.1+0.1))*4+90));

	Pen.fillColor = ~rndCol1;

	//Button1

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));

/////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Body1

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*32+200,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	//Button1

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));
};

/////////////////////////////////////////////////////////////////////////////////////
// Bass
/////////////////////////////////////////////////////////////////////////////////////

~u2 = UserView(w, Rect(0, 0, 1920, 1080));
~u2.animate = true;
~u2.frameRate = 60;
~u2.drawFunc = {

~frame= ~u1.frame+40*0.123; //Right phase and speed for the animations we need.

	Pen.scale(~u2rndScale,~u2rndScale);
	Pen.translate(~u2rndTrnslx,~u2rndTrnsly);
	Pen.skew(~rndSkew1,~rndSkew2);

	//Spotlight

	Pen.fillColor = Color(1,1,1,0.15);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*8+850,
		sin(20*(sin(~frame)*0.1+0.1))*8+1200),
		sin(100*(cos(~frame)*0.1+0.1))*4+300,
		cos(80*(cos(~frame)*0.1+0.1))*4+120));
	Pen.fill;

	//Neck

	Pen.strokeColor = ~strkCol;
	Pen.fillColor = ~rndCol2;
	Pen.skew(~rndSkew1,~rndSkew2);

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+290),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: -0.2, x: 930, y: 690); //ROTATE

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+340),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+380),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body1

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+700),
	sin(100*(cos(~frame)*0.1+0.1))*4+130,
	cos(80*(cos(~frame)*0.1+0.1))*16+100));

		Pen.fillColor = Color(0,0.7,0.75);

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+580),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+200));

			Pen.fillColor = ~rndCol2;

	//Body2

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+970),
	sin(100*(cos(~frame)*0.1+0.1))*4+200,
	cos(80*(cos(~frame)*0.1+0.1))*16+180));

/////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Neck.
	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+290),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: -0.2, x: 930, y: 690); //ROTATE

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+340),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+380),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+580),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+200));

	//Body1

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+700),
	sin(100*(cos(~frame)*0.1+0.1))*8+130,
	cos(80*(cos(~frame)*0.1+0.1))*16+100));

	//Body2

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+970),
	sin(100*(cos(~frame)*0.1+0.1))*2+200,
	cos(80*(cos(~frame)*0.1+0.1))*16+180));

	//Soundholes.
		Pen.fillColor = ~strkCol;
	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ 180 @
	sin(20*(sin(~frame)*0.1+0.1))*2+880,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+150,
	0.8pi, 0.25pi);

		Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -70 @
	sin(20*(sin(~frame)*0.1+0.1))*2+850,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+150,
	2pi, 0.25pi);

	Pen.fillStroke;


	//Bridge and tailpiece.

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -60 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1100,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+150,
	1.4pi, 0.25pi);
	Pen.stroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -120 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1200,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.4pi, 0.25pi);
	Pen.stroke;

	Pen.fillColor = ~rndCol2;
	Pen.width = ~width3;
	Pen.lineDash=~rndStrk3;
	Pen.addWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -155 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1240,
	sin(100*(cos(~frame)*0.1+0.1))*4+100,
	1.5pi, 0.15pi);
	Pen.fillStroke;

	//Soundholes

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -120 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1200,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.4pi, 0.25pi);
	Pen.fillStroke;

	//String.

	Pen.width = 15;
	Pen.lineDash=~rndStrk1;
	Pen.moveTo(940@310);
	Pen.curveTo(
	Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+1050),
	Point(
	sin(200*(cos(~frame)*0.1+0.1))*63+~rndStrCurve1,
			cos(80*(cos(~frame)*0.1+0.1))*8+600),
	Point(
	cos(100*(cos(~frame)*0.1+0.1))*32+~rndStrCurve2,
	sin(80*(cos(~frame)*0.1+0.1))*8+800),
	);

	Pen.stroke;
};

/////////////////////////////////////////////////////////////////////////////////////
// Keys
/////////////////////////////////////////////////////////////////////////////////////

~u3 = UserView(w, Rect(0, 0, 1920, 1080));
~u3.animate = true;
~u3.frameRate = 60;
~u3.drawFunc = {
	// ~u1.background = Color.new255(125, 231, 213); /*(sin(~u1.frame*0.1)*0.2+0.6,sin(~u1.frame*0.11)*0.2+0.6,sin(~u1.frame*0.12 )*0.2+0.6);*/

	~frame= ~u1.frame+40*0.123; //Right phase and speed for the animations we need.

	//Spotlight

	Pen.scale(~u3rndScale,~u3rndScale);
	Pen.translate(~u3rndTrnslx,~u3rndTrnsly);

	Pen.fillColor = Color(1,1,1,0.15);

	Pen.fillOval(Rect.aboutPoint(Point(
			sin(40*(sin(~frame)*0.1+0.1))*8+500,
		sin(20*(sin(~frame)*0.1+0.1))*8+700),
		sin(100*(cos(~frame)*0.1+0.1))*4+350,
		cos(80*(cos(~frame)*0.1+0.1))*4+200));
	Pen.fill;

	Pen.rotate(~u3rndRotate);
	Pen.skew(~rndSkew2,~rndSkew3);
	Pen.strokeColor = ~strkCol;
	Pen.fillColor = ~rndCol3;


//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Lid.

	Pen.skew(-1,0);

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;

	Pen.moveTo(cos(80*(cos(~frame)*0.1+0.1))*4+200@cos(80*(cos(~frame)*0.1+0.1))*4+150);
	Pen.curveTo(
	Point(
		sin(40*(cos(~frame)*0.1+0.1))*16+1150,
		cos(20*(cos(~frame)*0.1+0.1))*4+400),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*63+1050,
			cos(80*(cos(~frame)*0.1+0.1))*8+380),
	Point(
	cos(100*(cos(~frame)*0.1+0.1))*32+1200,
	sin(80*(cos(~frame)*0.1+0.1))*8+ 200),
	);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

	Pen.lineTo(sin(80*(cos(~frame)*0.1+0.1))*4+150@cos(80*(cos(~frame)*0.1+0.1))*4+150);
	Pen.lineTo(cos(80*(cos(~frame)*0.1+0.1))*4+200@cos(80*(cos(~frame)*0.1+0.1))*4+150);
		Pen.fillStroke;

	Pen.moveTo(sin(100*(cos(~frame)*0.05+0.1))*4+186@cos(80*(cos(~frame)*0.1+0.1))*4+400);

		Pen.lineDash=~rndStrk2;
		Pen.width = ~width2;

	Pen.curveTo(
	Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1300,
		sin(20*(sin(~frame)*0.1+0.1))*4+550),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*63+1450,
			cos(80*(cos(~frame)*0.1+0.1))*8+500),
	Point(
	cos(100*(cos(~frame)*0.1+0.1))*32+1100,
	sin(80*(cos(~frame)*0.1+0.1))*8+ 500),
	);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+150@
		sin(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.05+0.1))*4+186@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

		Pen.fillStroke;
		Pen.lineDash=~rndStrk3;
		Pen.width = ~width3;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+470);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+132@
		cos(80*(cos(~frame)*0.1+0.1))*4+615);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+133@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+146@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+149@
		cos(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+133@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

		Pen.lineDash=~rndStrk2;
		Pen.width = ~width1;

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+132@
		cos(80*(cos(~frame)*0.1+0.1))*4+615);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+180@
		cos(80*(cos(~frame)*0.1+0.1))*4+610);

		Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+185@
		cos(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+150@
		sin(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.fillStroke;
	Pen.lineDash= FloatArray[1,1,1,2,1,1,1,1,1,2];
	Pen.width = 15;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+146@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.stroke;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+470);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		sin(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+95@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+95@
		cos(80*(cos(~frame)*0.1+0.1))*4+490);

	Pen.fillStroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+135@
		cos(80*(cos(~frame)*0.1+0.1))*4+610);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+135@
		cos(80*(cos(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+140@
		cos(80*(sin(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+140@
		sin(80*(cos(~frame)*0.1+0.1))*4+600);

	Pen.fillStroke;

	Pen.width = ~width3;
	Pen.lineDash=~rndStrk1;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+180@
		cos(80*(cos(~frame)*0.1+0.1))*4+610);


	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+177@
		cos(80*(cos(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+172@
		cos(80*(cos(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+175@
		cos(80*(cos(~frame)*0.1+0.1))*4+600);

	Pen.fillStroke;

};


/////////////////////////////////////////////////////////////////////////////////////
// Drums.
/////////////////////////////////////////////////////////////////////////////////////

~u4 = UserView(w, Rect(0, 0, 1920, 1080));
~u4.animate = true;
~u4.frameRate = 60;
~u4.drawFunc = {
	// ~u1.background = Color.new255(125, 231, 213); /*(sin(~u1.frame*0.1)*0.2+0.6,sin(~u1.frame*0.11)*0.2+0.6,sin(~u1.frame*0.12 )*0.2+0.6);*/

	~frame= ~u1.frame+40*0.123; //Right phase and speed for the animations we need.

	Pen.strokeColor = ~strkCol;
	Pen.translate(~u4rndTrnslx,~u4rndTrnsly);

	Pen.fillColor = Color(1,1,1,0.15);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*8+400,
		sin(20*(sin(~frame)*0.1+0.1))*8+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+350,
		cos(80*(cos(~frame)*0.1+0.1))*4+160));
	Pen.fill;

	Pen.fillColor = ~rndCol4;
	Pen.rotate(~u4rndRotate);
	Pen.skew(~rndSkew1,~rndSkew3);
	Pen.scale(~u4rndScale,~u4rndScale);

//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//BD Feet

	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+ -10 @
		sin(20*(sin(~frame)*0.1+0.1))*2+550,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.2pi, 0.15pi);

	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+ -90 @
		sin(20*(sin(~frame)*0.1+0.1))*2+560,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.7pi, 0.15pi);

	Pen.fillStroke;

	//BigTom

    Pen.translate(10,-50);

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width1;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -18@
		cos(80*(cos(~frame)*0.1+0.1))*4+410);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -65@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 600);

	Pen.curveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -102@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 600,
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 260,
	cos(80*(cos(~frame)*0.1+0.1))*2+620),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 260,
	cos(80*(cos(~frame)*0.1+0.1))*2+620));

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -58@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 410);

	Pen.fillStroke;

	Pen.width = ~width2;

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+260,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
	sin(100*(cos(~frame)*0.1+0.1))*16+80,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+260,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
	sin(100*(cos(~frame)*0.1+0.1))*16+80,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	//Snare

		Pen.lineDash=~rndStrk1;
	Pen.width = ~width3;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 65@
		cos(80*(cos(~frame)*0.1+0.1))*4+380);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 40@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 480);

	Pen.curveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 30@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 400,
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 500,
	cos(80*(cos(~frame)*0.1+0.1))*2+540),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 500,
	cos(80*(cos(~frame)*0.1+0.1))*2+520));

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 18@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 410);

	Pen.fillStroke;

	Pen.width = ~width2;

	Pen.rotate(1.95pi,500,380);

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+500,
		sin(20*(sin(~frame)*0.1+0.1))*4+400),
	sin(100*(cos(~frame)*0.1+0.1))*16+140,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+500,
		sin(20*(sin(~frame)*0.1+0.1))*4+400),
	sin(100*(cos(~frame)*0.1+0.1))*16+140,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	Pen.rotate(-1.95pi,500,380);

    Pen.translate(-10,50);

	//BassDrum

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width2;
	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+440,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
		sin(100*(cos(~frame)*0.1+0.1))*4+120,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+440,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
		sin(100*(cos(~frame)*0.1+0.1))*4+120,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 90@
		sin(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 33@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 13@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 33@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 40@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.stroke;

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 90@
		sin(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 50@
		sin(80*(cos(~frame)*0.15+0.1))*6+ 290);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 95@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 270);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 55@
		sin(80*(cos(~frame)*0.1+0.1))*8+ 280);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 90@
		sin(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.fillStroke;

	Pen.scale(1.2,1.2);

	Pen.translate(-400,-50);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 90@
		cos(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 33@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 13@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 33@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 40@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.stroke;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 90@
		cos(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 35@
		sin(80*(cos(~frame)*0.2+0.2))*8+ 290);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 95@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 270);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 55@
		sin(80*(cos(~frame)*0.2+0.1))*8+ 280);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 90@
		cos(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.fillStroke;

	};
	};
);

(
/////////////////////////////////////////////////////////////////////////////////////
// Scene 5c2
/////////////////////////////////////////////////////////////////////////////////////
~scene5c2.value;
~scene5c2 =
{
if(~u1.isNil,{ nil },   {~u1.close });
if(~u2.isNil,{ nil },   {~u2.close });
if(~u3.isNil,{ nil },   {~u3.close });
if(~u4.isNil,{ nil },   {~u4.close });
~rndStrk1 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk2 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk3 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~width1 = rrand(2,10);
~width2 = rrand(2,15);
~width3 = rrand(2,15);

	~u1rndScale = rrand(0.7,0.9);
~u2rndScale = 0.7;
~u3rndScale = 0.7;
~u4rndScale = 1;

	~u1rndTrnslx = rrand(-60,60);
~u2rndTrnslx = rrand(-550,-550);
~u3rndTrnslx = rrand(1750,1750);
~u4rndTrnslx = rrand(1150,1150);

~u1rndTrnsly = -100;
~u2rndTrnsly = rrand(-50,0);
~u3rndTrnsly = 700;
~u4rndTrnsly = -150;

~rndSkew1 = rrand(-0.1,0.1);
~rndSkew2 = rrand(-0.1,0.1);
~rndSkew3 = rrand(-0.1,0.1);
~u1rndRotate = rrand(-0.3,0.2);
~u2rndRotate = rrand(-0.01,0.05);
~u3rndRotate = rrand(-0.03,0.02);
~u4rndRotate = rrand(-0.03,0.02);
~strkCol = Color.new255(rrand(50,90), rrand(50,90), rrand(50,90));
~rndCol1 = Color.yellow;
~rndCol2 = Color.cyan;
~rndCol3 = Color.cyan;
~rndCol4 = Color.cyan;
~rndStrCurve1 = rrand(800,1050);
~rndStrCurve2 = rrand(800,1050);

/////////////////////////////////////////////////////////////////////////////////////
// Sax.
/////////////////////////////////////////////////////////////////////////////////////

~u1 = UserView(w, Rect(0, 0, 1920, 1080));
~u1.animate = true;
~u1.frameRate = 60;
~u1.drawFunc = {
~frame= ~u1.frame+40*0.123;
~u1.background = Color(sin(~u1.frame*0.1)*0.1+0.7,sin(~u1.frame*0.12)*0.2+0.4,sin(~u1.frame*0.14 )*0.1+0.1);

	//Background.

		Pen.fillColor = Color(0.8,0.5,0.5);

	Pen.scale(~u1rndScale,~u1rndScale);
	Pen.translate(~u1rndTrnslx,~u1rndTrnsly);
		Pen.skew(~rndSkew1);

	//Mouthpiece

	Pen.strokeColor = Color(0.2,0.2,0.2);
	Pen.fillColor = ~rndCol1;


	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+220 @
		sin(20*(sin(~frame)*0.1+0.1))*2+250,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	1.9pi, 0.3pi);
	Pen.fillStroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+340 @
		sin(20*(sin(~frame)*0.1+0.1))*2+160,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
		cos(80*(cos(~frame)*0.1+0.1))*4+150,
	2.4pi, 0.3pi);
	Pen.fillStroke;

	Pen.width = ~width3;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+240 @
		sin(20*(sin(~frame)*0.1+0.1))*2+380,
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
		cos(80*(cos(~frame)*0.1+0.1))*4+130,
	1.5pi, 0.5pi);
	Pen.fillStroke;

	//Body1

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*32+200,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.fillColor = Color(0.2,0.2,0.2);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+70,
	cos(80*(cos(~frame)*0.1+0.1))*4+90));

	Pen.fillColor = ~rndCol1;

	//Button1

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));

//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Body1

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*32+200,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	//Button1

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));
};

/////////////////////////////////////////////////////////////////////////////////////
// Bass
/////////////////////////////////////////////////////////////////////////////////////

~u2 = UserView(w, Rect(0, 0, 1920, 1080));
~u2.animate = true;
~u2.frameRate = 60;
~u2.drawFunc = {

~frame= ~u1.frame+40*0.123; //Right phase and speed for the animations we need.

		Pen.rotate(~u2rndRotate);
	Pen.scale(~u2rndScale,~u2rndScale);
	Pen.translate(~u2rndTrnslx,~u2rndTrnsly);

	//Neck

	Pen.strokeColor = ~strkCol;
	Pen.fillColor = ~rndCol2;
	Pen.skew(~rndSkew1,~rndSkew2);

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+290),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: -0.2, x: 930, y: 690); //ROTATE

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+340),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+380),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body1

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+700),
	sin(100*(cos(~frame)*0.1+0.1))*4+130,
	cos(80*(cos(~frame)*0.1+0.1))*16+100));

		Pen.fillColor = Color(0,0.7,0.75);

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+580),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+200));

			Pen.fillColor = ~rndCol2;

	//Body2

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+970),
	sin(100*(cos(~frame)*0.1+0.1))*4+200,
	cos(80*(cos(~frame)*0.1+0.1))*16+180));

//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Neck.
	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+290),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: -0.2, x: 930, y: 690); //ROTATE

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+340),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+380),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+580),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+200));

	//Body1

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+700),
	sin(100*(cos(~frame)*0.1+0.1))*8+130,
	cos(80*(cos(~frame)*0.1+0.1))*16+100));

	//Body2

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+970),
	sin(100*(cos(~frame)*0.1+0.1))*2+200,
	cos(80*(cos(~frame)*0.1+0.1))*16+180));

	//Soundholes.
		Pen.fillColor = ~strkCol;
	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ 180 @
	sin(20*(sin(~frame)*0.1+0.1))*2+880,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+150,
	0.8pi, 0.25pi);

		Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -70 @
	sin(20*(sin(~frame)*0.1+0.1))*2+850,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+150,
	2pi, 0.25pi);

	Pen.fillStroke;


	//Bridge and tailpiece.

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -60 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1100,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+150,
	1.4pi, 0.25pi);
	Pen.stroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -120 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1200,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.4pi, 0.25pi);
	Pen.stroke;

	Pen.fillColor = ~rndCol2;
	Pen.width = ~width3;
	Pen.lineDash=~rndStrk3;
	Pen.addWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -155 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1240,
	sin(100*(cos(~frame)*0.1+0.1))*4+100,
	1.5pi, 0.15pi);
	Pen.fillStroke;

	//Soundholes

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -120 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1200,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.4pi, 0.25pi);
	Pen.fillStroke;

	//String.

	Pen.width = 15;
	Pen.lineDash=~rndStrk1;
	Pen.moveTo(940@310);
	Pen.curveTo(
	Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+1050),
	Point(
	sin(200*(cos(~frame)*0.1+0.1))*63+~rndStrCurve1,
			cos(80*(cos(~frame)*0.1+0.1))*8+600),
	Point(
	cos(100*(cos(~frame)*0.1+0.1))*32+~rndStrCurve2,
	sin(80*(cos(~frame)*0.1+0.1))*8+800),
	);

	Pen.stroke;
};

/////////////////////////////////////////////////////////////////////////////////////
// Keys
/////////////////////////////////////////////////////////////////////////////////////

~u3 = UserView(w, Rect(0, 0, 1920, 1080));
~u3.animate = true;
~u3.frameRate = 60;
~u3.drawFunc = {
	// ~u1.background = Color.new255(125, 231, 213); /*(sin(~u1.frame*0.1)*0.2+0.6,sin(~u1.frame*0.11)*0.2+0.6,sin(~u1.frame*0.12 )*0.2+0.6);*/

	~frame= ~u1.frame+40*0.123; //Right phase and speed for the animations we need.

	Pen.rotate(~u3rndRotate);
	Pen.scale(~u3rndScale,~u3rndScale);
	Pen.translate(~u3rndTrnslx,~u3rndTrnsly);

	Pen.strokeColor = ~strkCol;
	Pen.fillColor = ~rndCol3;
	Pen.skew(~rndSkew2,~rndSkew3);


//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Lid.

	Pen.skew(-1,0);

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;

	Pen.moveTo(cos(80*(cos(~frame)*0.1+0.1))*4+200@cos(80*(cos(~frame)*0.1+0.1))*4+150);
	Pen.curveTo(
	Point(
		sin(40*(cos(~frame)*0.1+0.1))*16+1150,
		cos(20*(cos(~frame)*0.1+0.1))*4+400),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*63+1050,
			cos(80*(cos(~frame)*0.1+0.1))*8+380),
	Point(
	cos(100*(cos(~frame)*0.1+0.1))*32+1200,
	sin(80*(cos(~frame)*0.1+0.1))*8+ 200),
	);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

	Pen.lineTo(sin(80*(cos(~frame)*0.1+0.1))*4+150@cos(80*(cos(~frame)*0.1+0.1))*4+150);
	Pen.lineTo(cos(80*(cos(~frame)*0.1+0.1))*4+200@cos(80*(cos(~frame)*0.1+0.1))*4+150);
		Pen.fillStroke;

	Pen.moveTo(sin(100*(cos(~frame)*0.05+0.1))*4+186@cos(80*(cos(~frame)*0.1+0.1))*4+400);

		Pen.lineDash=~rndStrk2;
		Pen.width = ~width2;

	Pen.curveTo(
	Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1300,
		sin(20*(sin(~frame)*0.1+0.1))*4+550),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*63+1450,
			cos(80*(cos(~frame)*0.1+0.1))*8+500),
	Point(
	cos(100*(cos(~frame)*0.1+0.1))*32+1100,
	sin(80*(cos(~frame)*0.1+0.1))*8+ 500),
	);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+150@
		sin(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.05+0.1))*4+186@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

		Pen.fillStroke;
		Pen.lineDash=~rndStrk3;
		Pen.width = ~width3;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+470);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+132@
		cos(80*(cos(~frame)*0.1+0.1))*4+615);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+133@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+146@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+149@
		cos(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+133@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

		Pen.lineDash=~rndStrk2;
		Pen.width = ~width1;

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+132@
		cos(80*(cos(~frame)*0.1+0.1))*4+615);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+180@
		cos(80*(cos(~frame)*0.1+0.1))*4+610);

		Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+185@
		cos(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+150@
		sin(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.fillStroke;
	Pen.lineDash= FloatArray[1,1,1,2,1,1,1,1,1,2];
	Pen.width = 15;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+146@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.stroke;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+470);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		sin(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+95@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+95@
		cos(80*(cos(~frame)*0.1+0.1))*4+490);

	Pen.fillStroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+135@
		cos(80*(cos(~frame)*0.1+0.1))*4+610);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+135@
		cos(80*(cos(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+140@
		cos(80*(sin(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+140@
		sin(80*(cos(~frame)*0.1+0.1))*4+600);

	Pen.fillStroke;

	Pen.width = ~width3;
	Pen.lineDash=~rndStrk1;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+180@
		cos(80*(cos(~frame)*0.1+0.1))*4+610);


	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+177@
		cos(80*(cos(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+172@
		cos(80*(cos(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+175@
		cos(80*(cos(~frame)*0.1+0.1))*4+600);

	Pen.fillStroke;

};


/////////////////////////////////////////////////////////////////////////////////////
// Drums.
/////////////////////////////////////////////////////////////////////////////////////

~u4 = UserView(w, Rect(0, 0, 1920, 1080));
~u4.animate = true;
~u4.frameRate = 60;
~u4.drawFunc = {
	// ~u1.background = Color.new255(125, 231, 213); /*(sin(~u1.frame*0.1)*0.2+0.6,sin(~u1.frame*0.11)*0.2+0.6,sin(~u1.frame*0.12 )*0.2+0.6);*/

	~frame= ~u1.frame+40*0.123; //Right phase and speed for the animations we need.

	Pen.rotate(~u4rndRotate);
	Pen.scale(~u4rndScale,~u4rndScale);
	Pen.translate(~u4rndTrnslx,~u4rndTrnsly);

	Pen.strokeColor = ~strkCol;
	Pen.fillColor = ~rndCol4;
	Pen.skew(~rndSkew1,~rndSkew3);

//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//BD Feet

	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+ -10 @
		sin(20*(sin(~frame)*0.1+0.1))*2+550,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.2pi, 0.15pi);

	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+ -90 @
		sin(20*(sin(~frame)*0.1+0.1))*2+560,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.7pi, 0.15pi);

	Pen.fillStroke;

	//BigTom

    Pen.translate(10,-50);

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width1;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -18@
		cos(80*(cos(~frame)*0.1+0.1))*4+410);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -65@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 600);

	Pen.curveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -102@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 600,
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 260,
	cos(80*(cos(~frame)*0.1+0.1))*2+620),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 260,
	cos(80*(cos(~frame)*0.1+0.1))*2+620));

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -58@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 410);

	Pen.fillStroke;

	Pen.width = ~width2;

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+260,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
	sin(100*(cos(~frame)*0.1+0.1))*16+80,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+260,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
	sin(100*(cos(~frame)*0.1+0.1))*16+80,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	//Snare

		Pen.lineDash=~rndStrk1;
	Pen.width = ~width3;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 65@
		cos(80*(cos(~frame)*0.1+0.1))*4+380);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 40@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 480);

	Pen.curveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 30@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 400,
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 500,
	cos(80*(cos(~frame)*0.1+0.1))*2+540),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 500,
	cos(80*(cos(~frame)*0.1+0.1))*2+520));

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 18@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 410);

	Pen.fillStroke;

	Pen.width = ~width2;

	Pen.rotate(1.95pi,500,380);

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+500,
		sin(20*(sin(~frame)*0.1+0.1))*4+400),
	sin(100*(cos(~frame)*0.1+0.1))*16+140,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+500,
		sin(20*(sin(~frame)*0.1+0.1))*4+400),
	sin(100*(cos(~frame)*0.1+0.1))*16+140,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	Pen.rotate(-1.95pi,500,380);

    Pen.translate(-10,50);

	//BassDrum

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width2;
	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+440,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
		sin(100*(cos(~frame)*0.1+0.1))*4+120,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+440,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
		sin(100*(cos(~frame)*0.1+0.1))*4+120,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 90@
		sin(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 33@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 13@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 33@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 40@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.stroke;

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 90@
		sin(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 50@
		sin(80*(cos(~frame)*0.15+0.1))*6+ 290);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 95@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 270);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 55@
		sin(80*(cos(~frame)*0.1+0.1))*8+ 280);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 90@
		sin(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.fillStroke;

	Pen.scale(1.2,1.2);

	Pen.translate(-400,-50);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 90@
		cos(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 33@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 13@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 33@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 40@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.stroke;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 90@
		cos(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 35@
		sin(80*(cos(~frame)*0.2+0.2))*8+ 290);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 95@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 270);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 55@
		sin(80*(cos(~frame)*0.2+0.1))*8+ 280);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 90@
		cos(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.fillStroke;

	};
	};
);

(
/////////////////////////////////////////////////////////////////////////////////////
// Scene 5d
/////////////////////////////////////////////////////////////////////////////////////
~scene5d.value;
~scene5d =
{
if(~u1.isNil,{ nil },   {~u1.close });
if(~u2.isNil,{ nil },   {~u2.close });
if(~u3.isNil,{ nil },   {~u3.close });
if(~u4.isNil,{ nil },   {~u4.close });
~rndStrk1 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk2 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk3 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~width1 = rrand(2,10);
~width2 = rrand(2,15);
~width3 = rrand(2,15);

	~u1rndScale = rrand(0.7,0.9);
~u2rndScale = 0.7;
~u3rndScale = 0.7;
~u4rndScale = 1;
~backrndX = rrand(1700,1900);
~backrndY = rrand(400,600);

	~u1rndTrnslx = rrand(-60,60);
~u2rndTrnslx = rrand(-550,-550);
~u3rndTrnslx = rrand(1750,1750);
~u4rndTrnslx = rrand(1150,1150);

~u1rndTrnsly = -100;
~u2rndTrnsly = rrand(-50,0);
~u3rndTrnsly = 700;
~u4rndTrnsly = -150;

~rndSkew1 = rrand(-0.1,0.1);
~rndSkew2 = rrand(-0.1,0.1);
~rndSkew3 = rrand(-0.1,0.1);
~u1rndRotate = rrand(-0.3,0.2);
~u2rndRotate = rrand(-0.01,0.05);
~u3rndRotate = rrand(-0.03,0.02);
~u4rndRotate = rrand(-0.03,0.02);
~strkCol = Color.new255(rrand(50,90), rrand(50,90), rrand(50,90));
~rndCol1 = Color.yellow;
~rndCol2 = Color.cyan;
~rndCol3 = Color.cyan;
~rndCol4 = Color.cyan;
~rndStrCurve1 = rrand(800,1050);
~rndStrCurve2 = rrand(800,1050);

/////////////////////////////////////////////////////////////////////////////////////
// Sax.
/////////////////////////////////////////////////////////////////////////////////////

~u1 = UserView(w, Rect(0, 0, 1920, 1080));
~u1.animate = true;
~u1.frameRate = 60;
~u1.background = Color.rand(0.3,0.5);
~u1.drawFunc = {

	~frame= ~u1.frame+40*0.123; //Right phase and speed for the animations we need.

	//Background.

		Pen.fillColor = Color(0.2,0.2,0.2,0.3);

		Pen.moveTo(Point(~backrndX, 0));
		Pen.lineTo(Point(0,~backrndY));
		Pen.lineTo(Point(0,1080));
		Pen.lineTo(Point(1920,1080));
		Pen.lineTo(Point(1920,0));
		Pen.moveTo(Point(1700, 0));
		Pen.fill;

	//Spotlight

	Pen.scale(~u1rndScale,~u1rndScale);
	Pen.translate(~u1rndTrnslx,~u1rndTrnsly);
	Pen.skew(~rndSkew1);

	Pen.fillColor = Color(1,1,1,0.15);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*8+920,
		sin(20*(sin(~frame)*0.1+0.1))*8+1100),
		sin(100*(cos(~frame)*0.1+0.1))*4+350,
		cos(80*(cos(~frame)*0.1+0.1))*4+160));
	Pen.fill;

	//Mouthpiece

	Pen.strokeColor = Color(0.2,0.2,0.2);
	Pen.fillColor = ~rndCol1;


	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+220 @
		sin(20*(sin(~frame)*0.1+0.1))*2+250,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	1.9pi, 0.3pi);
	Pen.fillStroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+340 @
		sin(20*(sin(~frame)*0.1+0.1))*2+160,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
		cos(80*(cos(~frame)*0.1+0.1))*4+150,
	2.4pi, 0.3pi);
	Pen.fillStroke;

	Pen.width = ~width3;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+240 @
		sin(20*(sin(~frame)*0.1+0.1))*2+380,
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
		cos(80*(cos(~frame)*0.1+0.1))*4+130,
	1.5pi, 0.5pi);
	Pen.fillStroke;

	//Body1

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*8+200,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.fillColor = Color(0.2,0.2,0.2);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+70,
	cos(80*(cos(~frame)*0.1+0.1))*4+90));

	Pen.fillColor = ~rndCol1;

	//Button1

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));

//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Body1

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*8+200,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	//Button1

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));
};

/////////////////////////////////////////////////////////////////////////////////////
// Bass
/////////////////////////////////////////////////////////////////////////////////////

~u2 = UserView(w, Rect(0, 0, 1920, 1080));
~u2.animate = true;
~u2.frameRate = 60;
~u2.drawFunc = {

~frame= ~u1.frame+40*0.123; //Right phase and speed for the animations we need.

	Pen.scale(~u2rndScale,~u2rndScale);
	Pen.translate(~u2rndTrnslx,~u2rndTrnsly);
	Pen.skew(~rndSkew1,~rndSkew2);

	//Spotlight

	Pen.fillColor = Color(1,1,1,0.15);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*8+850,
		sin(20*(sin(~frame)*0.1+0.1))*8+1200),
		sin(100*(cos(~frame)*0.1+0.1))*4+300,
		cos(80*(cos(~frame)*0.1+0.1))*4+120));
	Pen.fill;

	//Neck

	Pen.strokeColor = ~strkCol;
	Pen.fillColor = ~rndCol2;
	Pen.skew(~rndSkew1,~rndSkew2);

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+290),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: -0.2, x: 930, y: 690); //ROTATE

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+340),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+380),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body1

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+700),
	sin(100*(cos(~frame)*0.1+0.1))*4+130,
	cos(80*(cos(~frame)*0.1+0.1))*16+100));

		Pen.fillColor = Color(0,0.7,0.75);

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+580),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+200));

			Pen.fillColor = ~rndCol2;

	//Body2

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+970),
	sin(100*(cos(~frame)*0.1+0.1))*4+200,
	cos(80*(cos(~frame)*0.1+0.1))*16+180));

//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Neck.
	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+290),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: -0.2, x: 930, y: 690); //ROTATE

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+340),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+380),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+580),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+200));

	//Body1

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+700),
	sin(100*(cos(~frame)*0.1+0.1))*8+130,
	cos(80*(cos(~frame)*0.1+0.1))*16+100));

	//Body2

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+970),
	sin(100*(cos(~frame)*0.1+0.1))*2+200,
	cos(80*(cos(~frame)*0.1+0.1))*16+180));

	//Soundholes.
		Pen.fillColor = ~strkCol;
	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ 180 @
	sin(20*(sin(~frame)*0.1+0.1))*2+880,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+150,
	0.8pi, 0.25pi);

		Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -70 @
	sin(20*(sin(~frame)*0.1+0.1))*2+850,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+150,
	2pi, 0.25pi);

	Pen.fillStroke;


	//Bridge and tailpiece.

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -60 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1100,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+150,
	1.4pi, 0.25pi);
	Pen.stroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -120 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1200,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.4pi, 0.25pi);
	Pen.stroke;

	Pen.fillColor = ~rndCol2;
	Pen.width = ~width3;
	Pen.lineDash=~rndStrk3;
	Pen.addWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -155 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1240,
	sin(100*(cos(~frame)*0.1+0.1))*4+100,
	1.5pi, 0.15pi);
	Pen.fillStroke;

	//Soundholes

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -120 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1200,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.4pi, 0.25pi);
	Pen.fillStroke;

	//String.

	Pen.width = 15;
	Pen.lineDash=~rndStrk1;
	Pen.moveTo(940@310);
	Pen.curveTo(
	Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+1050),
	Point(
	sin(200*(cos(~frame)*0.1+0.1))*63+~rndStrCurve1,
			cos(80*(cos(~frame)*0.1+0.1))*8+600),
	Point(
	cos(100*(cos(~frame)*0.1+0.1))*32+~rndStrCurve2,
	sin(80*(cos(~frame)*0.1+0.1))*8+800),
	);

	Pen.stroke;
};

/////////////////////////////////////////////////////////////////////////////////////
// Keys
/////////////////////////////////////////////////////////////////////////////////////

~u3 = UserView(w, Rect(0, 0, 1920, 1080));
~u3.animate = true;
~u3.frameRate = 60;
~u3.drawFunc = {

	~frame= ~u1.frame+40*0.123;

	//Spotlight

	Pen.scale(~u3rndScale,~u3rndScale);
	Pen.translate(~u3rndTrnslx,~u3rndTrnsly);

	Pen.fillColor = Color(1,1,1,0.15);

	Pen.fillOval(Rect.aboutPoint(Point(
			sin(40*(sin(~frame)*0.1+0.1))*8+500,
		sin(20*(sin(~frame)*0.1+0.1))*8+700),
		sin(100*(cos(~frame)*0.1+0.1))*4+350,
		cos(80*(cos(~frame)*0.1+0.1))*4+200));
	Pen.fill;

	Pen.rotate(~u3rndRotate);
	Pen.skew(~rndSkew2,~rndSkew3);
	Pen.strokeColor = ~strkCol;
	Pen.fillColor = ~rndCol3;


//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Lid.

	Pen.skew(-1,0);

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;

	Pen.moveTo(cos(80*(cos(~frame)*0.1+0.1))*4+200@cos(80*(cos(~frame)*0.1+0.1))*4+150);
	Pen.curveTo(
	Point(
		sin(40*(cos(~frame)*0.1+0.1))*16+1150,
		cos(20*(cos(~frame)*0.1+0.1))*4+400),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*63+1050,
			cos(80*(cos(~frame)*0.1+0.1))*8+380),
	Point(
	cos(100*(cos(~frame)*0.1+0.1))*32+1200,
	sin(80*(cos(~frame)*0.1+0.1))*8+ 200),
	);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

	Pen.lineTo(sin(80*(cos(~frame)*0.1+0.1))*4+150@cos(80*(cos(~frame)*0.1+0.1))*4+150);
	Pen.lineTo(cos(80*(cos(~frame)*0.1+0.1))*4+200@cos(80*(cos(~frame)*0.1+0.1))*4+150);
		Pen.fillStroke;

	Pen.moveTo(sin(100*(cos(~frame)*0.05+0.1))*4+186@cos(80*(cos(~frame)*0.1+0.1))*4+400);

		Pen.lineDash=~rndStrk2;
		Pen.width = ~width2;

	Pen.curveTo(
	Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1300,
		sin(20*(sin(~frame)*0.1+0.1))*4+550),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*63+1450,
			cos(80*(cos(~frame)*0.1+0.1))*8+500),
	Point(
	cos(100*(cos(~frame)*0.1+0.1))*32+1100,
	sin(80*(cos(~frame)*0.1+0.1))*8+ 500),
	);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+150@
		sin(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.05+0.1))*4+186@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

		Pen.fillStroke;
		Pen.lineDash=~rndStrk3;
		Pen.width = ~width3;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+470);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+132@
		cos(80*(cos(~frame)*0.1+0.1))*4+615);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+133@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+146@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+149@
		cos(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+133@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

		Pen.lineDash=~rndStrk2;
		Pen.width = ~width1;

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+132@
		cos(80*(cos(~frame)*0.1+0.1))*4+615);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+180@
		cos(80*(cos(~frame)*0.1+0.1))*4+610);

		Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+185@
		cos(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+150@
		sin(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.fillStroke;
	Pen.lineDash= FloatArray[1,1,1,2,1,1,1,1,1,2];
	Pen.width = 15;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+146@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.stroke;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+470);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		sin(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+95@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+95@
		cos(80*(cos(~frame)*0.1+0.1))*4+490);

	Pen.fillStroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+135@
		cos(80*(cos(~frame)*0.1+0.1))*4+610);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+135@
		cos(80*(cos(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+140@
		cos(80*(sin(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+140@
		sin(80*(cos(~frame)*0.1+0.1))*4+600);

	Pen.fillStroke;

	Pen.width = ~width3;
	Pen.lineDash=~rndStrk1;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+180@
		cos(80*(cos(~frame)*0.1+0.1))*4+610);


	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+177@
		cos(80*(cos(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+172@
		cos(80*(cos(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+175@
		cos(80*(cos(~frame)*0.1+0.1))*4+600);

	Pen.fillStroke;

};


//////////////////////////////////////////////////////////////////////////////////////
// Drums.
///////////////////////////////////////////////////////////////////////////////////////

~u4 = UserView(w, Rect(0, 0, 1920, 1080));
~u4.animate = true;
~u4.frameRate = 60;
~u4.drawFunc = {
	// ~u1.background = Color.new255(125, 231, 213); /*(sin(~u1.frame*0.1)*0.2+0.6,sin(~u1.frame*0.11)*0.2+0.6,sin(~u1.frame*0.12 )*0.2+0.6);*/

	~frame= ~u1.frame+40*0.123; //Right phase and speed for the animations we need.

	Pen.strokeColor = ~strkCol;
	Pen.translate(~u4rndTrnslx,~u4rndTrnsly);

	Pen.fillColor = Color(1,1,1,0.15);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*8+400,
		sin(20*(sin(~frame)*0.1+0.1))*8+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+350,
		cos(80*(cos(~frame)*0.1+0.1))*4+160));
	Pen.fill;

	Pen.fillColor = ~rndCol4;
	Pen.rotate(~u4rndRotate);
	Pen.skew(~rndSkew1,~rndSkew3);
	Pen.scale(~u4rndScale,~u4rndScale);

//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//BD Feet

	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+ -10 @
		sin(20*(sin(~frame)*0.1+0.1))*2+550,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.2pi, 0.15pi);

	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+ -90 @
		sin(20*(sin(~frame)*0.1+0.1))*2+560,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.7pi, 0.15pi);

	Pen.fillStroke;

	//BigTom

    Pen.translate(10,-50);

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width1;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -18@
		cos(80*(cos(~frame)*0.1+0.1))*4+410);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -65@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 600);

	Pen.curveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -102@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 600,
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 260,
	cos(80*(cos(~frame)*0.1+0.1))*2+620),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 260,
	cos(80*(cos(~frame)*0.1+0.1))*2+620));

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -58@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 410);

	Pen.fillStroke;

	Pen.width = ~width2;

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+260,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
	sin(100*(cos(~frame)*0.1+0.1))*16+80,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+260,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
	sin(100*(cos(~frame)*0.1+0.1))*16+80,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	//Snare

		Pen.lineDash=~rndStrk1;
	Pen.width = ~width3;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 65@
		cos(80*(cos(~frame)*0.1+0.1))*4+380);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 40@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 480);

	Pen.curveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 30@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 400,
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 500,
	cos(80*(cos(~frame)*0.1+0.1))*2+540),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 500,
	cos(80*(cos(~frame)*0.1+0.1))*2+520));

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 18@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 410);

	Pen.fillStroke;

	Pen.width = ~width2;

	Pen.rotate(1.95pi,500,380);

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+500,
		sin(20*(sin(~frame)*0.1+0.1))*4+400),
	sin(100*(cos(~frame)*0.1+0.1))*16+140,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+500,
		sin(20*(sin(~frame)*0.1+0.1))*4+400),
	sin(100*(cos(~frame)*0.1+0.1))*16+140,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	Pen.rotate(-1.95pi,500,380);

    Pen.translate(-10,50);

	//BassDrum

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width2;
	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+440,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
		sin(100*(cos(~frame)*0.1+0.1))*4+120,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+440,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
		sin(100*(cos(~frame)*0.1+0.1))*4+120,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 90@
		sin(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 33@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 13@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 33@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 40@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.stroke;

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 90@
		sin(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 50@
		sin(80*(cos(~frame)*0.15+0.1))*6+ 290);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 95@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 270);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 55@
		sin(80*(cos(~frame)*0.1+0.1))*8+ 280);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 90@
		sin(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.fillStroke;

	Pen.scale(1.2,1.2);

	Pen.translate(-400,-50);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 90@
		cos(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 33@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 13@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 33@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 40@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.stroke;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 90@
		cos(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 35@
		sin(80*(cos(~frame)*0.2+0.2))*8+ 290);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 95@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 270);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 55@
		sin(80*(cos(~frame)*0.2+0.1))*8+ 280);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 90@
		cos(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.fillStroke;

	};
	};
);

(
/////////////////////////////////////////////////////////////////////////////////////
// Scene 6a
/////////////////////////////////////////////////////////////////////////////////////
~scene6a.value;
~scene6a =
{
if(~u1.isNil,{ nil },   {~u1.close });
if(~u2.isNil,{ nil },   {~u2.close });
if(~u3.isNil,{ nil },   {~u3.close });
if(~u4.isNil,{ nil },   {~u4.close });
~rndStrk1 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk2 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk3 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~width1 = rrand(2,10);
~width2 = rrand(2,15);
~width3 = rrand(2,15);

~u1rndScale = 0.9;

~u1rndTrnslx = 0;
~u1rndTrnsly = -100;

~x1 = -5200;
	~x2 = -5200;
	~x3 = -5200;
	~x4 = -5200;
	~x5 = -5200;
	~x6 = -5200;
~y = 1;
~spdx=60;
~spdy=100;


~rndSkew1 = rrand(-0.1,0.1);
~rndSkew2 = rrand(-0.1,0.1);
~rndSkew3 = rrand(-0.1,0.1);
~u1rndRotate = rrand(-0.3,0.2);
~strkCol = Color.new255(rrand(50,90), rrand(50,90), rrand(50,90));
~rndCol1 = Color.yellow;

~rndStrCurve1 = rrand(800,1050);
~rndStrCurve2 = rrand(800,1050);

/////////////////////////////////////////////////////////////////////////////////////
// Sax.
/////////////////////////////////////////////////////////////////////////////////////

~u1 = UserView(w, Rect(0, 0, 1920, 1080));
~u1.animate = true;
~u1.frameRate = 60;
~u1.background = Color(1,0.2,0);
~u1.drawFunc = {
~frame= ~u1.frame+40*0.123;

	//Background.
		Pen.fillColor = Color(0.2,0.5,0.5);
		Pen.use({
			~x1 = ~x1+~spdx;
			~x2 = ~x2+~spdx+20;
			~x3 = ~x3+~spdx+40;
			~x4 = ~x4+~spdx+60;
			~x5 = ~x5+~spdx+80;
			~x6 = ~x6+~spdx+100;
		Pen.fillRect(Rect.aboutPoint(Point(~x1,100),5000,100));
		Pen.fillRect(Rect.aboutPoint(Point(1920 - ~x2,300),5000,100));
		Pen.fillRect(Rect.aboutPoint(Point(~x3,500),5000,100));
		Pen.fillRect(Rect.aboutPoint(Point(1920 - ~x4,700),5000,100));
		Pen.fillRect(Rect.aboutPoint(Point(~x5,900),5000,100));
		Pen.fillRect(Rect.aboutPoint(Point(1920 - ~x6,1100),5000,100));
			Pen.fill;
		});

	Pen.scale(~u1rndScale,~u1rndScale);
	Pen.translate(~u1rndTrnslx,~u1rndTrnsly);

	//Mouthpiece

	Pen.strokeColor = Color(0.2,0.2,0.2);
	Pen.fillColor = ~rndCol1;


	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+220 @
		sin(20*(sin(~frame)*0.1+0.1))*2+250,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	1.9pi, 0.3pi);
	Pen.fillStroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+340 @
		sin(20*(sin(~frame)*0.1+0.1))*2+160,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
		cos(80*(cos(~frame)*0.1+0.1))*4+150,
	2.4pi, 0.3pi);
	Pen.fillStroke;

	Pen.width = ~width3;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+240 @
		sin(20*(sin(~frame)*0.1+0.1))*2+380,
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
		cos(80*(cos(~frame)*0.1+0.1))*4+130,
	1.5pi, 0.5pi);
	Pen.fillStroke;

	//Body1

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*32+200,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.fillColor = Color(0.2,0.2,0.2);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+70,
	cos(80*(cos(~frame)*0.1+0.1))*4+90));

	Pen.fillColor = ~rndCol1;

	//Button1

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));

//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Body1

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*32+200,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	//Button1

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));
};
	};
);

(
/////////////////////////////////////////////////////////////////////////////////////
// Scene 6b
/////////////////////////////////////////////////////////////////////////////////////
~scene6b.value;
~scene6b =
{
if(~u1.isNil,{ nil },   {~u1.close });
if(~u2.isNil,{ nil },   {~u2.close });
if(~u3.isNil,{ nil },   {~u3.close });
if(~u4.isNil,{ nil },   {~u4.close });
~rndStrk1 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk2 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk3 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~width1 = rrand(2,10);
~width2 = rrand(2,15);
~width3 = rrand(2,15);

~u1rndScale = 0.9;

~u1rndTrnslx = 10;
~u1rndTrnsly = -100;


~rndSkew1 = rrand(-0.1,0.1);
~rndSkew2 = rrand(-0.1,0.1);
~rndSkew3 = rrand(-0.1,0.1);
~u1rndRotate = rrand(-0.3,0.2);
~strkCol = Color.new255(rrand(50,90), rrand(50,90), rrand(50,90));
~rndCol1 = Color.yellow;
~rndCol2 = Color(rrand(0.4,0.8),rrand(0.4,0.5),rrand(0.4,0.5));

~rndStrCurve1 = rrand(800,1050);
~rndStrCurve2 = rrand(800,1050);

/////////////////////////////////////////////////////////////////////////////////////
// Sax.
/////////////////////////////////////////////////////////////////////////////////////

~u1 = UserView(w, Rect(0, 0, 1920, 1080));
~u1.animate = true;
~u1.frameRate = 60;
	~u1.background = Color(rrand(0.4,0.5),rrand(0.4,0.5),rrand(0.4,0.8));
~u1.drawFunc = {
~frame= ~u1.frame+40*0.123;

	//Background.

		Pen.use {

		Pen.fillColor = ~rndCol2;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(980,640));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,980,640);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(980,640));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,980,640);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(980,640));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,980,640);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(980,640));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,980,640);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(980,640));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,980,640);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(980,640));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,980,640);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(980,640));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,980,640);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(980,640));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,980,640);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(980,640));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,980,640);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(980,640));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,980,640);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(980,640));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,980,640);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(980,640));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,980,640);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(980,640));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,980,640);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(980,640));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,980,640);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(980,640));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.35,980,640);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(980,640));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

	};

	Pen.scale(~u1rndScale,~u1rndScale);
	Pen.translate(~u1rndTrnslx,~u1rndTrnsly);

	//Mouthpiece

	Pen.strokeColor = Color(0.2,0.2,0.2);
	Pen.fillColor = ~rndCol1;


	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+220 @
		sin(20*(sin(~frame)*0.1+0.1))*2+250,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	1.9pi, 0.3pi);
	Pen.fillStroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+340 @
		sin(20*(sin(~frame)*0.1+0.1))*2+160,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
		cos(80*(cos(~frame)*0.1+0.1))*4+150,
	2.4pi, 0.3pi);
	Pen.fillStroke;

	Pen.width = ~width3;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+240 @
		sin(20*(sin(~frame)*0.1+0.1))*2+380,
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
		cos(80*(cos(~frame)*0.1+0.1))*4+130,
	1.5pi, 0.5pi);
	Pen.fillStroke;

	//Body1

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		cos(100*(cos(~frame)*0.1+0.1))*32+200,
	sin(80*(cos(~frame)*0.01+0.1))*4+160));

	Pen.fillColor = Color(0.2,0.2,0.2);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+70,
	cos(80*(cos(~frame)*0.1+0.1))*4+90));

	Pen.fillColor = ~rndCol1;

	//Button1

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));

//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Body1

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		cos(100*(cos(~frame)*0.1+0.1))*8+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		cos(100*(cos(~frame)*0.1+0.1))*16+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		cos(100*(cos(~frame)*0.1+0.1))*8+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		cos(100*(cos(~frame)*0.1+0.1))*4+100,
	sin(80*(cos(~frame)*0.1+0.1))*16+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.lineDash=~rndStrk2;
	Pen.width = 20;

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*32+230,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	//Button1

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		cos(100*(cos(~frame)*0.1+0.1))*8+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		cos(100*(cos(~frame)*0.1+0.1))*8+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));

	//Button3

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		cos(100*(cos(~frame)*0.1+0.1))*16+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));
};
	};
);

(
/////////////////////////////////////////////////////////////////////////////////////
// Scene 7a
/////////////////////////////////////////////////////////////////////////////////////
~scene7a.value;
~scene7a =
{
if(~u1.isNil,{ nil },   {~u1.close });
if(~u2.isNil,{ nil },   {~u2.close });
if(~u3.isNil,{ nil },   {~u3.close });
if(~u4.isNil,{ nil },   {~u4.close });
~rndStrk1 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk2 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk3 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~width1 = rrand(2,10);
~width2 = rrand(2,15);
~width3 = rrand(2,15);

~u1rndScale = 0.9;

~u1rndTrnslx = 50;
~u1rndTrnsly = -100;

~x1 = -5200;
	~x2 = -5200;
	~x3 = -5200;
	~x4 = 100;
	~x5 = -5200;
	~x6 = -5200;
~y = 1;
~spdx=60;
~spdy=100;


~rndSkew1 = rrand(-0.1,0.1);
~rndSkew2 = rrand(-0.1,0.1);
~rndSkew3 = rrand(-0.1,0.1);
~u1rndRotate = rrand(-0.3,0.2);
~strkCol = Color.new255(rrand(50,90), rrand(50,90), rrand(50,90));
~rndCol1 = Color.yellow;

~rndStrCurve1 = rrand(800,1050);
~rndStrCurve2 = rrand(800,1050);

~backcol = Color(rrand(0.2,0.5),rrand(0.2,0.5),rrand(0.2,0.8));
~fillcol = Color(rrand(0.6,0.8),rrand(0.2,0.5),rrand(0.2,0.4));

/////////////////////////////////////////////////////////////////////////////////////
// Sax.
/////////////////////////////////////////////////////////////////////////////////////

~u1 = UserView(w, Rect(0, 0, 1920, 1080));
~u1.animate = true;
~u1.frameRate = 60;
~u1.background = ~backcol;
~u1.drawFunc = {
~frame= ~u1.frame+40*0.123;

	//Background.
		Pen.fillColor = ~fillcol;
		Pen.use({
			~x1 = ~x1+~spdx;
			~x2 = ~x2+~spdx+20;
			~x3 = ~x3+~spdx+40;
			~x5 = ~x5+~spdx;
		Pen.fillRect(Rect.aboutPoint(Point(~x1,100),5000,250));
		Pen.fillRect(Rect.aboutPoint(Point(3900 - ~x2,400),5000,250));
		Pen.fillRect(Rect.aboutPoint(Point(-5000 + ~x3,1000),5000,400));

		});

		~x5 = ~x5+~spdx-115;
	Pen.scale(~u1rndScale,~u1rndScale);
	Pen.translate(~x5 + 4800,~u1rndTrnsly);

	//Mouthpiece

	Pen.strokeColor = Color(0.2,0.2,0.2);
	Pen.fillColor = ~rndCol1;


	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+220 @
		sin(20*(sin(~frame)*0.1+0.1))*2+250,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	1.9pi, 0.3pi);
	Pen.fillStroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+340 @
		sin(20*(sin(~frame)*0.1+0.1))*2+160,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
		cos(80*(cos(~frame)*0.1+0.1))*4+150,
	2.4pi, 0.3pi);
	Pen.fillStroke;

	Pen.width = ~width3;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+240 @
		sin(20*(sin(~frame)*0.1+0.1))*2+380,
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
		cos(80*(cos(~frame)*0.1+0.1))*4+130,
	1.5pi, 0.5pi);
	Pen.fillStroke;

	//Body1

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*32+200,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.fillColor = Color(0.2,0.2,0.2);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+70,
	cos(80*(cos(~frame)*0.1+0.1))*4+90));

	Pen.fillColor = ~rndCol1;

	//Button1

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));

//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Body1

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*32+200,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	//Button1

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));
};
	};
);

(
/////////////////////////////////////////////////////////////////////////////////////
// Scene 7b
/////////////////////////////////////////////////////////////////////////////////////
~scene7b.value;
~scene7b =
{
if(~u1.isNil,{ nil },   {~u1.close });
if(~u2.isNil,{ nil },   {~u2.close });
if(~u3.isNil,{ nil },   {~u3.close });
if(~u4.isNil,{ nil },   {~u4.close });
~rndStrk1 = FloatArray[rrand(0,0.7), rrand(0,0.7), rrand(0,0.7), rrand(0,0.7)];
~rndStrk2 = FloatArray[rrand(0,0.7), rrand(0,0.7), rrand(0,0.7), rrand(0,0.7)];
~rndStrk3 = FloatArray[rrand(0,0.7), rrand(0,0.7), rrand(0,0.7), rrand(0,0.7)];
~width1 = rrand(2,10);
~width2 = rrand(2,15);
~width3 = rrand(2,15);

~u1rndScale = 0.9;

~u1rndTrnslx = 50;
~u1rndTrnsly = -100;

~x1 = -5200;
	~x2 = -5200;
	~x3 = -5200;
	~x4 = 100;
	~x5 = -5200;
	~x6 = -5200;
~y = 1;
~spdx=60;
~spdy=100;


~rndSkew1 = rrand(-0.1,0.1);
~rndSkew2 = rrand(-0.1,0.1);
~rndSkew3 = rrand(-0.1,0.1);
~u1rndRotate = rrand(-0.3,0.2);
~strkCol = Color.new255(rrand(50,90), rrand(50,90), rrand(50,90));
~rndCol1 = Color.yellow;
~rndCol2 = Color(rrand(0.3,0.9),rrand(0.3,0.5),rrand(0.3,0.5));

~rndStrCurve1 = rrand(800,1050);
~rndStrCurve2 = rrand(800,1050);

/////////////////////////////////////////////////////////////////////////////////////
// Sax.
/////////////////////////////////////////////////////////////////////////////////////

~u1 = UserView(w, Rect(0, 0, 1920, 1080));
~u1.animate = true;
~u1.frameRate = 60;
~u1.background = Color(rrand(0.4,0.5),rrand(0.4,0.5),rrand(0.4,0.8));
~u1.drawFunc = {
~frame= ~u1.frame+40*0.123;

	//Background.

		Pen.fillColor = ~rndCol2;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(980,640));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,980,640);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(980,640));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,980,640);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(980,640));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,980,640);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(980,640));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,980,640);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(980,640));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,980,640);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(980,640));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,980,640);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(980,640));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,980,640);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(980,640));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,980,640);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(980,640));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,980,640);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(980,640));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,980,640);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(980,640));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,980,640);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(980,640));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,980,640);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(980,640));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,980,640);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(980,640));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.4,980,640);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(980,640));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.35,980,640);

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
		Pen.moveTo(Point(980,640));
		Pen.lineTo(Point(-200,0));
		Pen.lineTo(Point(0,-200));
	Pen.fill;

		Pen.rotate(0.2,920,540);

	Pen.scale(~u1rndScale,~u1rndScale);
	Pen.translate(~u1rndTrnslx,~u1rndTrnsly);

	//Mouthpiece

	Pen.strokeColor = Color(0.2,0.2,0.2);
	Pen.fillColor = ~rndCol1;


	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+220 @
		sin(20*(sin(~frame)*0.1+0.1))*2+250,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	1.9pi, 0.3pi);
	Pen.fillStroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+340 @
		sin(20*(sin(~frame)*0.1+0.1))*2+160,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
		cos(80*(cos(~frame)*0.1+0.1))*4+150,
	2.4pi, 0.3pi);
	Pen.fillStroke;

	Pen.width = ~width3;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+240 @
		sin(20*(sin(~frame)*0.1+0.1))*2+380,
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
		cos(80*(cos(~frame)*0.1+0.1))*4+130,
	1.5pi, 0.5pi);
	Pen.fillStroke;

	//Body1

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		cos(100*(cos(~frame)*0.1+0.1))*32+200,
	sin(80*(cos(~frame)*0.01+0.1))*4+160));

	Pen.fillColor = Color(0.2,0.2,0.2);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+70,
	cos(80*(cos(~frame)*0.1+0.1))*4+90));

	Pen.fillColor = ~rndCol1;

	//Button1

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));

//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Body1

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		cos(100*(cos(~frame)*0.1+0.1))*8+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		cos(100*(cos(~frame)*0.1+0.1))*16+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		cos(100*(cos(~frame)*0.1+0.1))*8+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		cos(100*(cos(~frame)*0.1+0.1))*4+100,
	sin(80*(cos(~frame)*0.1+0.1))*16+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.lineDash=~rndStrk2;
	Pen.width = 20;

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*32+230,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	//Button1

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		cos(100*(cos(~frame)*0.1+0.1))*8+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		cos(100*(cos(~frame)*0.1+0.1))*8+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));

	//Button3

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		cos(100*(cos(~frame)*0.1+0.1))*16+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));

	//Waves

	Pen.lineDash=~rndStrk3;
		Pen.width = 10;
		Pen.strokeColor = Color.white;
		Pen.moveTo(Point(
			cos(40*(sin(~frame)*0.1+0.1))*4+1400,
			cos(20*(sin(~frame)*0.1+0.1))*4+740));
		Pen.curveTo(Point(
			sin(100*(cos(~frame)*0.1+0.1))*4+1400,
			sin(80*(cos(~frame)*0.1+0.1))*4+940),
			Point(
			sin(80*(cos(~frame)*0.1+0.1))*16+1450,
			840),Point(
			sin(80*(cos(~frame)*0.1+0.1))*16+1450,
			840));

			Pen.stroke;

	Pen.lineDash=~rndStrk2;
		Pen.width = 20;
		Pen.moveTo(Point(
			cos(40*(sin(~frame)*0.1+0.1))*4+1500,
			cos(20*(sin(~frame)*0.1+0.1))*4+640));
		Pen.curveTo(Point(
			sin(100*(cos(~frame)*0.1+0.1))*4+1500,
			sin(80*(cos(~frame)*0.1+0.1))*4+1040),
			Point(
			sin(80*(cos(~frame)*0.1+0.1))*16+1600,
			840),Point(
			sin(80*(cos(~frame)*0.1+0.1))*16+1600,
			840));

			Pen.stroke;
	};
};
);

(
/////////////////////////////////////////////////////////////////////////////////////
// Scene 7c
/////////////////////////////////////////////////////////////////////////////////////
~scene7c.value;
~scene7c =
{
if(~u1.isNil,{ nil },   {~u1.close });
if(~u2.isNil,{ nil },   {~u2.close });
if(~u3.isNil,{ nil },   {~u3.close });
if(~u4.isNil,{ nil },   {~u4.close });
~rndStrk1 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk2 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk3 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~width1 = rrand(2,10);
~width2 = rrand(2,15);
~width3 = rrand(2,15);

~u1rndScale = 0.9;

~u1rndTrnslx = 50;
~u1rndTrnsly = -100;

~x1 = -5200;
~x2 = -5200;
~x3 = -5200;
~x4 = 10;
~x5 = 5;
~x6 = -5200;
~y = 1;
~spdx=60;
~spdy=100;


~rndSkew1 = rrand(-0.1,0.1);
~rndSkew2 = rrand(-0.1,0.1);
~rndSkew3 = rrand(-0.1,0.1);
~u1rndRotate = rrand(-0.3,0.2);
~strkCol = Color.new255(rrand(50,90), rrand(50,90), rrand(50,90));
~rndCol1 = Color.yellow;

~rndStrCurve1 = rrand(800,1050);
~rndStrCurve2 = rrand(800,1050);

~fillcol =  Color(rrand(0.2,0.3),rrand(0.2,0.4),rrand(0.2,0.9));
~fillcol2 =  Color(rrand(0.2,0.9),rrand(0.2,0.3),rrand(0.2,0.9));

/////////////////////////////////////////////////////////////////////////////////////
// Sax.
/////////////////////////////////////////////////////////////////////////////////////

~u1 = UserView(w, Rect(0, 0, 1920, 1080));
~u1.animate = true;
~u1.clearOnRefresh = false;
~u1.frameRate = 60;
~u1.background = Color.clear;
~u1.drawFunc = {

~frame= ~u1.frame+40*0.123;

	//Background.

		Pen.fillColor = ~fillcol;
		Pen.use({
			~x4 = ~x4+~spdx;
		Pen.fillOval(Rect.aboutPoint(Point(920,540),~x4,~x4));
		});

		Pen.fillColor = ~fillcol2;
		Pen.use({
		~x5 = ~x5+~spdx-30;
		Pen.fillOval(Rect.aboutPoint(Point(920,540),~x5,~x5));
		});


	Pen.scale(~u1rndScale,~u1rndScale);
	Pen.translate(~u1rndTrnslx,~u1rndTrnsly);

	//Mouthpiece

	Pen.strokeColor = Color(0.2,0.2,0.2);
	Pen.fillColor = ~rndCol1;


	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+220 @
		sin(20*(sin(~frame)*0.1+0.1))*2+250,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	1.9pi, 0.3pi);
	Pen.fillStroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+340 @
		sin(20*(sin(~frame)*0.1+0.1))*2+160,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
		cos(80*(cos(~frame)*0.1+0.1))*4+150,
	2.4pi, 0.3pi);
	Pen.fillStroke;

	Pen.width = ~width3;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+240 @
		sin(20*(sin(~frame)*0.1+0.1))*2+380,
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
		cos(80*(cos(~frame)*0.1+0.1))*4+130,
	1.5pi, 0.5pi);
	Pen.fillStroke;

	//Body1

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*32+200,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.fillColor = Color(0.2,0.2,0.2);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+70,
	cos(80*(cos(~frame)*0.1+0.1))*4+90));

	Pen.fillColor = ~rndCol1;

	//Button1

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));

//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Body1

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*32+200,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	//Button1

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));

			//Waves
		Pen.width = 10;
		Pen.strokeColor = Color.white;
		Pen.moveTo(Point(
			cos(40*(sin(~frame)*0.1+0.1))*4+1400,
			cos(20*(sin(~frame)*0.1+0.1))*4+740));
		Pen.curveTo(Point(
			sin(100*(cos(~frame)*0.1+0.1))*4+1400,
			sin(80*(cos(~frame)*0.1+0.1))*4+940),
			Point(
			sin(80*(cos(~frame)*0.1+0.1))*16+1450,
			840),Point(
			sin(80*(cos(~frame)*0.1+0.1))*16+1450,
			840));

			Pen.stroke;

		Pen.width = 20;
		Pen.moveTo(Point(
			cos(40*(sin(~frame)*0.1+0.1))*4+1500,
			cos(20*(sin(~frame)*0.1+0.1))*4+640));
		Pen.curveTo(Point(
			sin(100*(cos(~frame)*0.1+0.1))*4+1500,
			sin(80*(cos(~frame)*0.1+0.1))*4+1040),
			Point(
			sin(80*(cos(~frame)*0.1+0.1))*16+1600,
			840),Point(
			sin(80*(cos(~frame)*0.1+0.1))*16+1600,
			840));

			Pen.stroke;
};
};
);

(
/////////////////////////////////////////////////////////////////////////////////////
// Scene 7d
/////////////////////////////////////////////////////////////////////////////////////
~scene7d.value;
~scene7d =
{
if(~u1.isNil,{ nil },   {~u1.close });
if(~u2.isNil,{ nil },   {~u2.close });
if(~u3.isNil,{ nil },   {~u3.close });
if(~u4.isNil,{ nil },   {~u4.close });
~rndStrk1 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk2 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk3 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~width1 = rrand(2,10);
~width2 = rrand(2,15);
~width3 = rrand(2,15);

~u1rndScale = 0.9;

~u1rndTrnslx = 50;
~u1rndTrnsly = -100;

~x1 = -5200;
	~x2 = -5200;
	~x3 = -5200;
	~x4 = 100;
	~x5 = -5200;
	~x6 = -5200;
~y = 1;
~spdx=10;
~spdy=100;


~rndSkew1 = rrand(-0.5,0.5);
~rndSkew2 = rrand(-0.5,0.5);
~rndSkew3 = rrand(-0.5,0.5);
~rndSkew4 = rrand(-0.1,0.1);
~u1rndRotate = rrand(-0.3,0.2);
~strkCol = Color.new255(rrand(50,90), rrand(50,90), rrand(50,90));
~rndCol1 = Color.yellow;

~rndStrCurve1 = rrand(800,1050);
~rndStrCurve2 = rrand(800,1050);

~fillcol=  Color(rrand(0.6,0.8),rrand(0.6,0.3),rrand(0.6,0.9));
~fillcol2=  Color(rrand(0.6,0.9),rrand(0.6,0.3),rrand(0.6,0.8));
~fillcol3=  Color(rrand(0.3,0.4),rrand(0.3,0.7),rrand(0.3,0.9));

/////////////////////////////////////////////////////////////////////////////////////
// Sax.
/////////////////////////////////////////////////////////////////////////////////////

~u1 = UserView(w, Rect(0, 0, 1920, 1080));
~u1.animate = true;
~u1.frameRate = 60;
~u1.background = Color(rrand(0.6,0.9),rrand(0.6,0.3),rrand(0.6,0.9));
~u1.drawFunc = {
~frame= ~u1.frame+40*0.123;

	//Background.

		Pen.use({

		Pen.fillColor = ~fillcol;

		Pen.use({
			~x4 = ~x4+~spdx;

		Pen.fillRect(Rect.aboutPoint(Point(920,540),~x4,~x4));
		Pen.fillRect(Rect.aboutPoint(Point(920,540),~x4 -20,~x4));
		});

		Pen.skew(~rndSkew2);
		Pen.fillColor = ~fillcol2;

		Pen.use({
			~x4 = ~x4+~spdx;
		Pen.fillRect(Rect.aboutPoint(Point(920,540),~x4 -300,~x4 -300));
		});

		Pen.skew(~rndSkew3);
		Pen.fillColor = ~fillcol3;

		Pen.use({
			~x4 = ~x4+~spdx;
		Pen.fillRect(Rect.aboutPoint(Point(920,540),~x4 -600,~x4 -600));
		});
		});

	//Mouthpiece

		~x5 = ~x5+~spdx-115;
	Pen.scale(~u1rndScale,~u1rndScale);
	Pen.translate(~u1rndTrnslx,~u1rndTrnsly);

	Pen.skew(~rndSkew4);

	Pen.strokeColor = Color(0.2,0.2,0.2);
	Pen.fillColor = ~rndCol1;


	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+220 @
		sin(20*(sin(~frame)*0.1+0.1))*2+250,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	1.9pi, 0.3pi);
	Pen.fillStroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+340 @
		sin(20*(sin(~frame)*0.1+0.1))*2+160,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
		cos(80*(cos(~frame)*0.1+0.1))*4+150,
	2.4pi, 0.3pi);
	Pen.fillStroke;

	Pen.width = ~width3;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+240 @
		sin(20*(sin(~frame)*0.1+0.1))*2+380,
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
		cos(80*(cos(~frame)*0.1+0.1))*4+130,
	1.5pi, 0.5pi);
	Pen.fillStroke;

	//Body1

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*32+200,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.fillColor = Color(0.2,0.2,0.2);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+70,
	cos(80*(cos(~frame)*0.1+0.1))*4+90));

	Pen.fillColor = ~rndCol1;

	//Button1

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));

//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Body1

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*32+200,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	//Button1

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));

	//Waves
		Pen.width = 10;
		Pen.strokeColor = Color.black;
		Pen.moveTo(Point(
			cos(40*(sin(~frame)*0.1+0.1))*4+1400,
			cos(20*(sin(~frame)*0.1+0.1))*4+740));
		Pen.curveTo(Point(
			sin(100*(cos(~frame)*0.1+0.1))*4+1400,
			sin(80*(cos(~frame)*0.1+0.1))*4+940),
			Point(
			sin(80*(cos(~frame)*0.1+0.1))*16+1450,
			840),Point(
			sin(80*(cos(~frame)*0.1+0.1))*16+1450,
			840));

			Pen.stroke;

		Pen.width = 20;
		Pen.moveTo(Point(
			cos(40*(sin(~frame)*0.1+0.1))*4+1500,
			cos(20*(sin(~frame)*0.1+0.1))*4+640));
		Pen.curveTo(Point(
			sin(100*(cos(~frame)*0.1+0.1))*4+1500,
			sin(80*(cos(~frame)*0.1+0.1))*4+1040),
			Point(
			sin(80*(cos(~frame)*0.1+0.1))*16+1600,
			840),Point(
			sin(80*(cos(~frame)*0.1+0.1))*16+1600,
			840));

			Pen.stroke;
};
};
);

(
/////////////////////////////////////////////////////////////////////////////////////
// Scene 7e
/////////////////////////////////////////////////////////////////////////////////////
~scene7e.value;
~scene7e =
{
if(~u1.isNil,{ nil },   {~u1.close });
if(~u2.isNil,{ nil },   {~u2.close });
if(~u3.isNil,{ nil },   {~u3.close });
if(~u4.isNil,{ nil },   {~u4.close });
~rndStrk1 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk2 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk3 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~width1 = rrand(2,10);
~width2 = rrand(2,15);
~width3 = rrand(2,15);

~u1rndScale = 0.9;

~u1rndTrnslx = 500;
~u1rndTrnsly = -100;

~x1 = -5200;
	~x2 = -5200;
	~x3 = -5200;
	~x4 = 100;
	~x5 = -5200;
	~x6 = -5200;
~y = 1;
~spdx=60;
~spdy=100;


~rndSkew1 = rrand(-0.1,0.1);
~rndSkew2 = rrand(-0.1,0.1);
~rndSkew3 = rrand(-0.1,0.1);
~u1rndRotate = rrand(-0.3,0.2);
~strkCol = Color.new255(rrand(50,90), rrand(50,90), rrand(50,90));
~rndCol1 = Color.yellow;

~rndStrCurve1 = rrand(800,1050);
~rndStrCurve2 = rrand(800,1050);

~backcol = Color(rrand(0.2,0.5),rrand(0.2,0.5),rrand(0.2,0.8));
~fillcol = Color(rrand(0.6,0.8),rrand(0.2,0.5),rrand(0.2,0.4));

/////////////////////////////////////////////////////////////////////////////////////
// Sax.
/////////////////////////////////////////////////////////////////////////////////////

~u1 = UserView(w, Rect(0, 0, 1920, 1080));
~u1.animate = true;
~u1.frameRate = 60;
~u1.background = ~backcol;
~u1.drawFunc = {
~frame= ~u1.frame+40*0.123;

	//Background.
		Pen.fillColor = ~fillcol;
		Pen.use({
			~x1 = ~x1+~spdx;
			~x2 = ~x2+~spdx+20;
			~x3 = ~x3+~spdx+40;
			~x5 = ~x5+~spdx;
		Pen.fillRect(Rect.aboutPoint(Point(~x1,100),5000,250));
		Pen.fillRect(Rect.aboutPoint(Point(3900 - ~x2,400),5000,250));
		Pen.fillRect(Rect.aboutPoint(Point(-5000 + ~x3,1000),5000,400));

		});

		~x5 = ~x5-~spdx-10;
	Pen.scale(~u1rndScale,~u1rndScale);
	Pen.translate(~x5 + 5800,~u1rndTrnsly);

	//Mouthpiece

	Pen.strokeColor = Color(0.2,0.2,0.2);
	Pen.fillColor = ~rndCol1;


	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+220 @
		sin(20*(sin(~frame)*0.1+0.1))*2+250,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	1.9pi, 0.3pi);
	Pen.fillStroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+340 @
		sin(20*(sin(~frame)*0.1+0.1))*2+160,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
		cos(80*(cos(~frame)*0.1+0.1))*4+150,
	2.4pi, 0.3pi);
	Pen.fillStroke;

	Pen.width = ~width3;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+240 @
		sin(20*(sin(~frame)*0.1+0.1))*2+380,
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
		cos(80*(cos(~frame)*0.1+0.1))*4+130,
	1.5pi, 0.5pi);
	Pen.fillStroke;

	//Body1

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*32+200,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.fillColor = Color(0.2,0.2,0.2);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+70,
	cos(80*(cos(~frame)*0.1+0.1))*4+90));

	Pen.fillColor = ~rndCol1;

	//Button1

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));

//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Body1

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*32+200,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	//Button1

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));
};
	};
);

(
/////////////////////////////////////////////////////////////////////////////////////
// Scene 8a
/////////////////////////////////////////////////////////////////////////////////////
~scene8a.value;
~scene8a =
{
if(~u1.isNil,{ nil },   {~u1.close });
if(~u2.isNil,{ nil },   {~u2.close });
if(~u3.isNil,{ nil },   {~u3.close });
if(~u4.isNil,{ nil },   {~u4.close });
~rndStrk1 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk2 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk3 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~width1 = rrand(2,10);
~width2 = rrand(2,15);
~width3 = rrand(2,15);

~u1rndScale = rrand(2,2.5);
~u2rndScale = 0.7;
~u3rndScale = 0.7;
~u4rndScale = 1;

~u1rndTrnslx = rrand(-860,-860);
~u2rndTrnslx = rrand(800,800);
~u3rndTrnslx = rrand(1750,1750);
~u4rndTrnslx = rrand(1150,1150);

~u1rndTrnsly = -600;
~u2rndTrnsly = rrand(-50,0);
~u3rndTrnsly = 700;
~u4rndTrnsly = -150;

if(~trnslx1.isNil,{~trnslx1=0},   {nil});
if(~trnslx1 > 1000 ,{~trnslx1=0},   {nil});
~trnslx1 = ~trnslx1+90;
if(~trnsly1.isNil,{~trnsly1=0},   {nil});
if(~trnsly1 < -700 ,{~trnsly1=0},   {nil});
~trnsly1 = ~trnsly1-20;

if(~trnslx2.isNil,{~trnslx2=0},   {nil});
if(~trnslx2 > 500 ,{~trnslx2=0},   {nil});
~trnslx2 = ~trnslx2+90;
if(~trnsly2.isNil,{~trnsly2=0},   {nil});
if(~trnsly2 > 500 ,{~trnsly2=0},   {nil});
~trnsly2 = ~trnsly2 + 25;

if(~trnslx3.isNil,{~trnslx3=0},   {nil});
if(~trnslx3 > 500 ,{~trnslx3=0},   {nil});
~trnslx3 = ~trnslx3+80;
if(~trnsly3.isNil,{~trnsly3=0},   {nil});
if(~trnsly3 > 500 ,{~trnsly3=0},   {nil});
~trnsly3 = ~trnsly3 + 15;

~backrndX = rrand(1700,1900);
~backrndY = rrand(400,600);

~rndSkew1 = rrand(-0.1,0.1);
~rndSkew2 = rrand(-0.1,0.1);
~rndSkew3 = rrand(-0.1,0.1);
~rndSkew4 = rrand(-0.3,0.3);
~rndSkew5 = rrand(-0.3,0.3);
~rndSkew6 = rrand(-0.3,0.3);
~u1rndRotate = rrand(-0.3,0.2);
~u2rndRotate = rrand(-0.01,0.05);
~u3rndRotate = rrand(-0.03,0.02);
~u4rndRotate = rrand(-0.03,0.02);
~strkCol = Color.new255(rrand(30,70), rrand(30,70), rrand(50,90));
~rndCol1 = Color(rrand(0.75,1),rrand(0.75,0.1),rrand(0.75,0.1));
~rndCol2 = Color(0,0.55,0.55);
~rndCol3 = Color(0,0.55,0.55);
~rndCol4 = Color(0,0.55,0.55);
~rndStrCurve1 = rrand(800,1050);
~rndStrCurve2 = rrand(800,1050);

/////////////////////////////////////////////////////////////////////////////////////
// Sax.
/////////////////////////////////////////////////////////////////////////////////////

~u1 = UserView(w, Rect(0, 0, 1920, 1080));
~u1.animate = true;
~u1.frameRate = 60;
~u1.background = Color(0.2,0.4,0.7);
~u1.drawFunc = {
	~frame= ~u1.frame+40*0.123;

	//Background.

		Pen.fillColor = Color(0.2,0.2,0.2,0.3);
		Pen.moveTo(Point(~backrndX, 0));
		Pen.lineTo(Point(0,~backrndY));
		Pen.lineTo(Point(0,1080));
		Pen.lineTo(Point(1920,1080));
		Pen.lineTo(Point(1920,0));
		Pen.moveTo(Point(1700, 0));
		Pen.fill;

	//Spotlight

	Pen.scale(~u1rndScale,~u1rndScale);
	Pen.translate(~u1rndTrnslx,~u1rndTrnsly);
	Pen.skew(~rndSkew1);

	Pen.fillColor = Color(1,1,1,0.15);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*8+920,
		sin(20*(sin(~frame)*0.1+0.1))*8+1100),
		sin(100*(cos(~frame)*0.1+0.1))*4+350,
		cos(80*(cos(~frame)*0.1+0.1))*4+160));
	Pen.fill;

	//Mouthpiece

	Pen.strokeColor = Color(0.2,0.2,0.2);
	Pen.fillColor = ~rndCol1;


	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+220 @
		sin(20*(sin(~frame)*0.1+0.1))*2+250,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	1.9pi, 0.3pi);
	Pen.fillStroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+340 @
		sin(20*(sin(~frame)*0.1+0.1))*2+160,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
		cos(80*(cos(~frame)*0.1+0.1))*4+150,
	2.4pi, 0.3pi);
	Pen.fillStroke;

	Pen.width = ~width3;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+240 @
		sin(20*(sin(~frame)*0.1+0.1))*2+380,
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
		cos(80*(cos(~frame)*0.1+0.1))*4+130,
	1.5pi, 0.5pi);
	Pen.fillStroke;

	//Body1

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*8+130,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.fillColor = Color(0.2,0.2,0.2);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+70,
	cos(80*(cos(~frame)*0.1+0.1))*4+90));

	Pen.fillColor = ~rndCol1;

	//Button1

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));

//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Body1

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.lineDash=~rndStrk2;

	Pen.width = ~width2;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*8+130,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.width = 3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		[sin(100*(cos(~frame)*0.1+0.1))*8+130, cos(100*(sin(~frame)*0.1+0.1))*8+140,
			sin(100*(cos(~frame)*0.1+0.1))*8+150, cos(100*(sin(~frame)*0.1+0.1))*8+160
		].choose,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	//Button1

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));
	};

/////////////////////////////////////////////////////////////////////////////////////
// Bass
/////////////////////////////////////////////////////////////////////////////////////

~u2 = UserView(w, Rect(0, 0, 1920, 1080));
~u2.animate = true;
~u2.frameRate = 60;
~u2.drawFunc = {
~frame= ~u1.frame+40*0.123;

	Pen.scale(~u2rndScale,~u2rndScale);
	Pen.translate(~u2rndTrnslx,~u2rndTrnsly);
	Pen.skew(~rndSkew1,~rndSkew2);

	//Spotlight

	Pen.fillColor = Color(1,1,1,0.15);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*8+850,
		sin(20*(sin(~frame)*0.1+0.1))*8+1200),
		sin(100*(cos(~frame)*0.1+0.1))*4+300,
		cos(80*(cos(~frame)*0.1+0.1))*4+120));
	Pen.fill;

	//Neck

	Pen.rotate(~u2rndRotate);

	Pen.strokeColor = ~strkCol;
	Pen.fillColor = ~rndCol2;

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+290),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: -0.2, x: 930, y: 690); //ROTATE

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+340),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+380),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body1

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+700),
	sin(100*(cos(~frame)*0.1+0.1))*4+130,
	cos(80*(cos(~frame)*0.1+0.1))*16+100));

		Pen.fillColor = Color(0,0.35,0.35);

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+580),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+200));

			Pen.fillColor = ~rndCol2;

	//Body2

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+970),
	sin(100*(cos(~frame)*0.1+0.1))*4+200,
	cos(80*(cos(~frame)*0.1+0.1))*16+180));

//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Neck.
	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+290),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: -0.2, x: 930, y: 690); //ROTATE

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+340),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+380),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+580),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+200));

	//Body1

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+700),
	sin(100*(cos(~frame)*0.1+0.1))*8+130,
	cos(80*(cos(~frame)*0.1+0.1))*16+100));

	//Body2

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+970),
	sin(100*(cos(~frame)*0.1+0.1))*2+200,
	cos(80*(cos(~frame)*0.1+0.1))*16+180));

	//Soundholes.
		Pen.fillColor = ~strkCol;
	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ 180 @
	sin(20*(sin(~frame)*0.1+0.1))*2+880,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+150,
	0.8pi, 0.25pi);

		Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -70 @
	sin(20*(sin(~frame)*0.1+0.1))*2+850,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+150,
	2pi, 0.25pi);

	Pen.fillStroke;


	//Bridge and tailpiece.

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -60 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1100,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+150,
	1.4pi, 0.25pi);
	Pen.stroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -120 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1200,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.4pi, 0.25pi);
	Pen.stroke;

	Pen.fillColor = ~rndCol2;
	Pen.width = ~width3;
	Pen.lineDash=~rndStrk3;
	Pen.addWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -155 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1240,
	sin(100*(cos(~frame)*0.1+0.1))*4+100,
	1.5pi, 0.15pi);
	Pen.fillStroke;

	//Soundholes

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -120 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1200,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.4pi, 0.25pi);
	Pen.fillStroke;

	//String.

	Pen.width = 15;
	Pen.lineDash=~rndStrk1;
	Pen.moveTo(940@310);
	Pen.curveTo(
	Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+1050),
	Point(
	sin(200*(cos(~frame)*0.1+0.1))*63+~rndStrCurve1,
			cos(80*(cos(~frame)*0.1+0.1))*8+600),
	Point(
	cos(100*(cos(~frame)*0.1+0.1))*32+~rndStrCurve2,
	sin(80*(cos(~frame)*0.1+0.1))*8+800),
	);

	Pen.stroke;
};

/////////////////////////////////////////////////////////////////////////////////////
//Keys
/////////////////////////////////////////////////////////////////////////////////////

~u3 = UserView(w, Rect(0, 0, 1920, 1080));
~u3.animate = true;
~u3.frameRate = 60;
~u3.drawFunc = {

	~frame= ~u1.frame+40*0.123;

	//Spotlight

	Pen.scale(~u3rndScale,~u3rndScale);
	Pen.translate(~u3rndTrnslx,~u3rndTrnsly);

	Pen.fillColor = Color(1,1,1,0.15);

	Pen.fillOval(Rect.aboutPoint(Point(
			sin(40*(sin(~frame)*0.1+0.1))*8+500,
		sin(20*(sin(~frame)*0.1+0.1))*8+700),
		sin(100*(cos(~frame)*0.1+0.1))*4+350,
		cos(80*(cos(~frame)*0.1+0.1))*4+200));
	Pen.fill;

	Pen.rotate(~u3rndRotate);
	Pen.skew(~rndSkew2,~rndSkew3);
	Pen.strokeColor = ~strkCol;
	Pen.fillColor = ~rndCol3;


//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Lid.

	Pen.skew(-1,0);

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;

	Pen.moveTo(cos(80*(cos(~frame)*0.1+0.1))*4+200@cos(80*(cos(~frame)*0.1+0.1))*4+150);
	Pen.curveTo(
	Point(
		sin(40*(cos(~frame)*0.1+0.1))*16+1150,
		cos(20*(cos(~frame)*0.1+0.1))*4+400),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*63+1050,
			cos(80*(cos(~frame)*0.1+0.1))*8+380),
	Point(
	cos(100*(cos(~frame)*0.1+0.1))*32+1200,
	sin(80*(cos(~frame)*0.1+0.1))*8+ 200),
	);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

	Pen.lineTo(sin(80*(cos(~frame)*0.1+0.1))*4+150@cos(80*(cos(~frame)*0.1+0.1))*4+150);
	Pen.lineTo(cos(80*(cos(~frame)*0.1+0.1))*4+200@cos(80*(cos(~frame)*0.1+0.1))*4+150);
		Pen.fillStroke;

	Pen.moveTo(sin(100*(cos(~frame)*0.05+0.1))*4+186@cos(80*(cos(~frame)*0.1+0.1))*4+400);

		Pen.lineDash=~rndStrk2;
		Pen.width = ~width2;

	Pen.curveTo(
	Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1300,
		sin(20*(sin(~frame)*0.1+0.1))*4+550),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*63+1450,
			cos(80*(cos(~frame)*0.1+0.1))*8+500),
	Point(
	cos(100*(cos(~frame)*0.1+0.1))*32+1100,
	sin(80*(cos(~frame)*0.1+0.1))*8+ 500),
	);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+150@
		sin(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.05+0.1))*4+186@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

		Pen.fillStroke;
		Pen.lineDash=~rndStrk3;
		Pen.width = ~width3;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+470);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+132@
		cos(80*(cos(~frame)*0.1+0.1))*4+615);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+133@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+146@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+149@
		cos(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+133@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

		Pen.lineDash=~rndStrk2;
		Pen.width = ~width1;

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+132@
		cos(80*(cos(~frame)*0.1+0.1))*4+615);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+180@
		cos(80*(cos(~frame)*0.1+0.1))*4+610);

		Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+185@
		cos(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+150@
		sin(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.fillStroke;
	Pen.lineDash= FloatArray[1,1,1,2,1,1,1,1,1,2];
	Pen.width = 15;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+146@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.stroke;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+470);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		sin(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+95@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+95@
		cos(80*(cos(~frame)*0.1+0.1))*4+490);

	Pen.fillStroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+135@
		cos(80*(cos(~frame)*0.1+0.1))*4+610);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+135@
		cos(80*(cos(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+140@
		cos(80*(sin(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+140@
		sin(80*(cos(~frame)*0.1+0.1))*4+600);

	Pen.fillStroke;

	Pen.width = ~width3;
	Pen.lineDash=~rndStrk1;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+180@
		cos(80*(cos(~frame)*0.1+0.1))*4+610);


	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+177@
		cos(80*(cos(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+172@
		cos(80*(cos(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+175@
		cos(80*(cos(~frame)*0.1+0.1))*4+600);

	Pen.fillStroke;

};


/////////////////////////////////////////////////////////////////////////////////////
//Drums.
/////////////////////////////////////////////////////////////////////////////////////

~u4 = UserView(w, Rect(0, 0, 1920, 1080));
~u4.animate = true;
~u4.frameRate = 60;
~u4.drawFunc = {

	~frame= ~u1.frame+40*0.123;

		Pen.use {
	Pen.strokeColor = ~strkCol;
	Pen.translate(~u4rndTrnslx,~u4rndTrnsly);

	Pen.fillColor = Color(1,1,1,0.15);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*8+400,
		sin(20*(sin(~frame)*0.1+0.1))*8+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+350,
		cos(80*(cos(~frame)*0.1+0.1))*4+160));
	Pen.fill;

	Pen.fillColor = ~rndCol4;
	Pen.rotate(~u4rndRotate);
	Pen.skew(~rndSkew1,~rndSkew3);
	Pen.scale(~u4rndScale,~u4rndScale);

//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//BD Feet

	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+ -10 @
		sin(20*(sin(~frame)*0.1+0.1))*2+550,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.2pi, 0.15pi);

	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+ -90 @
		sin(20*(sin(~frame)*0.1+0.1))*2+560,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.7pi, 0.15pi);

	Pen.fillStroke;

	//BigTom

    Pen.translate(10,-50);

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width1;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -18@
		cos(80*(cos(~frame)*0.1+0.1))*4+410);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -65@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 600);

	Pen.curveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -102@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 600,
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 260,
	cos(80*(cos(~frame)*0.1+0.1))*2+620),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 260,
	cos(80*(cos(~frame)*0.1+0.1))*2+620));

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -58@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 410);

	Pen.fillStroke;

	Pen.width = ~width2;

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+260,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
	sin(100*(cos(~frame)*0.1+0.1))*16+80,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+260,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
	sin(100*(cos(~frame)*0.1+0.1))*16+80,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	//Snare

		Pen.lineDash=~rndStrk1;
	Pen.width = ~width3;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 65@
		cos(80*(cos(~frame)*0.1+0.1))*4+380);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 40@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 480);

	Pen.curveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 30@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 400,
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 500,
	cos(80*(cos(~frame)*0.1+0.1))*2+540),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 500,
	cos(80*(cos(~frame)*0.1+0.1))*2+520));

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 18@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 410);

	Pen.fillStroke;

	Pen.width = ~width2;

	Pen.rotate(1.95pi,500,380);

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+500,
		sin(20*(sin(~frame)*0.1+0.1))*4+400),
	sin(100*(cos(~frame)*0.1+0.1))*16+140,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+500,
		sin(20*(sin(~frame)*0.1+0.1))*4+400),
	sin(100*(cos(~frame)*0.1+0.1))*16+140,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	Pen.rotate(-1.95pi,500,380);

    Pen.translate(-10,50);

	//BassDrum

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width2;
	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+440,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
		sin(100*(cos(~frame)*0.1+0.1))*4+120,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+440,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
		sin(100*(cos(~frame)*0.1+0.1))*4+120,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 90@
		sin(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 33@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 13@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 33@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 40@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.stroke;

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 90@
		sin(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 50@
		sin(80*(cos(~frame)*0.15+0.1))*6+ 290);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 95@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 270);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 55@
		sin(80*(cos(~frame)*0.1+0.1))*8+ 280);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 90@
		sin(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.fillStroke;

	Pen.scale(1.2,1.2);

	Pen.translate(-400,-50);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 90@
		cos(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 33@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 13@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 33@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 40@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.stroke;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 90@
		cos(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 35@
		sin(80*(cos(~frame)*0.2+0.2))*8+ 290);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 95@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 270);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 115@
		sin(80*(cos(~frame)*0.2+0.1))*4+ 280);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 90@
		cos(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.fillStroke;

};
			//Notes.

	Pen.use {

			Pen.translate(~trnslx1,~trnsly1);
			Pen.rotate(~rndSkew4, 800,300);
			Pen.lineDash = ~rndStrk1;
			Pen.width = ~width1;
			Pen.strokeColor = ~strkCol;
			Pen.fillColor = Color(0.9,0.8,0.8);
			Pen.moveTo(Point(700,500));
			Pen.lineTo(Point(730,550));
			Pen.lineTo(Point(800,530));
			Pen.lineTo(Point(810,500));
			Pen.lineTo(Point(820,280));
			Pen.lineTo(Point(860,280));
			Pen.lineTo(Point(900,240));
			Pen.lineTo(Point(820,240));
			Pen.lineTo(Point(780,480));
			Pen.lineTo(Point(740,480));
			Pen.lineTo(Point(700,500));
			Pen.lineTo(Point(700,500));
			Pen.fillStroke;

};

		Pen.translate(0,200);

	Pen.use {

			Pen.translate(~trnslx2,~trnsly2);
			Pen.rotate(~rndSkew5, 800,300);
			Pen.lineDash = ~rndStrk2;
			Pen.width = ~width1;
			Pen.strokeColor = ~strkCol;
			Pen.fillColor = Color(0.9,0.8,0.8);
			Pen.moveTo(Point(800,500));
			Pen.lineTo(Point(830,550));
			Pen.lineTo(Point(900,530));
			Pen.lineTo(Point(910,500));
			Pen.lineTo(Point(920,280));
			Pen.lineTo(Point(960,280));
			Pen.lineTo(Point(1000,240));
			Pen.lineTo(Point(920,240));
			Pen.lineTo(Point(880,480));
			Pen.lineTo(Point(840,480));
			Pen.lineTo(Point(800,500));
			Pen.lineTo(Point(800,500));
			Pen.fillStroke;

};

		Pen.translate(100,000);

			Pen.use {

			Pen.translate(~trnslx1);
			Pen.rotate(~rndSkew6, 800,300);
			Pen.lineDash = ~rndStrk3;
			Pen.width = ~width1;
			Pen.strokeColor = ~strkCol;
			Pen.fillColor = Color(0.9,0.8,0.8);
			Pen.moveTo(Point(800,500));
			Pen.lineTo(Point(830,550));
			Pen.lineTo(Point(900,530));
			Pen.lineTo(Point(910,500));
			Pen.lineTo(Point(920,280));
			Pen.lineTo(Point(960,280));
			Pen.lineTo(Point(1000,240));
			Pen.lineTo(Point(920,240));
			Pen.lineTo(Point(880,480));
			Pen.lineTo(Point(840,480));
			Pen.lineTo(Point(800,500));
			Pen.lineTo(Point(800,500));
			Pen.fillStroke;

};

		};
	};
);

(
/////////////////////////////////////////////////////////////////////////////////////
// Scene 8b
/////////////////////////////////////////////////////////////////////////////////////
~scene8b.value;
~scene8b =
{
if(~u1.isNil,{ nil },   {~u1.close });
if(~u2.isNil,{ nil },   {~u2.close });
if(~u3.isNil,{ nil },   {~u3.close });
if(~u4.isNil,{ nil },   {~u4.close });
~rndStrk1 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk2 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk3 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~width1 = rrand(2,10);
~width2 = rrand(2,15);
~width3 = rrand(2,15);

~u1rndScale = rrand(2,2.5);
~u2rndScale = 0.7;
~u3rndScale = 0.7;
~u4rndScale = 1;

~u1rndTrnslx = rrand(-860,-860);
~u2rndTrnslx = rrand(800,800);
~u3rndTrnslx = rrand(1750,1750);
~u4rndTrnslx = rrand(1150,1150);

~u1rndTrnsly = -600;
~u2rndTrnsly = rrand(-50,0);
~u3rndTrnsly = 700;
~u4rndTrnsly = -150;

if(~trnslx1.isNil,{~trnslx1=0},   {nil});
if(~trnslx1 > 1000 ,{~trnslx1=0},   {nil});
~trnslx1 = ~trnslx1+90;
if(~trnsly1.isNil,{~trnsly1=0},   {nil});
if(~trnsly1 < -700 ,{~trnsly1=0},   {nil});
~trnsly1 = ~trnsly1-20;

if(~trnslx2.isNil,{~trnslx2=0},   {nil});
if(~trnslx2 > 500 ,{~trnslx2=0},   {nil});
~trnslx2 = ~trnslx2+90;
if(~trnsly2.isNil,{~trnsly2=0},   {nil});
if(~trnsly2 > 500 ,{~trnsly2=0},   {nil});
~trnsly2 = ~trnsly2 + 25;

if(~trnslx3.isNil,{~trnslx3=0},   {nil});
if(~trnslx3 > 500 ,{~trnslx3=0},   {nil});
~trnslx3 = ~trnslx3+80;
if(~trnsly3.isNil,{~trnsly3=0},   {nil});
if(~trnsly3 > 500 ,{~trnsly3=0},   {nil});
~trnsly3 = ~trnsly3 + 15;

~backrndX = rrand(1700,1900);
~backrndY = rrand(400,600);

~rndSkew1 = rrand(-0.1,0.1);
~rndSkew2 = rrand(-0.1,0.1);
~rndSkew3 = rrand(-0.1,0.1);
~rndSkew4 = rrand(-0.3,0.3);
~rndSkew5 = rrand(-0.3,0.3);
~rndSkew6 = rrand(-0.3,0.3);
~u1rndRotate = rrand(-0.3,0.2);
~u2rndRotate = rrand(-0.01,0.05);
~u3rndRotate = rrand(-0.03,0.02);
~u4rndRotate = rrand(-0.03,0.02);
~strkCol = Color.new255(rrand(30,70), rrand(30,70), rrand(50,90));
~rndCol1 = Color(rrand(0.75,1),rrand(0.75,0.1),rrand(0.75,0.1));
~rndCol2 = Color(0,0.55,0.55);
~rndCol3 = Color(0,0.55,0.55);
~rndCol4 = Color(0,0.55,0.55);
~rndStrCurve1 = rrand(800,1050);
~rndStrCurve2 = rrand(800,1050);
~rndBC1=rrand(0.1,0.4);
~rndBC2=rrand(0.1,0.4);
~rndBC3=rrand(0.1,0.4);

/////////////////////////////////////////////////////////////////////////////////////
// Sax.
/////////////////////////////////////////////////////////////////////////////////////

~u1 = UserView(w, Rect(0, 0, 1920, 1080));
~u1.animate = true;
~u1.frameRate = 60;
	// ~u1.background = Color(0.2,0.4,0.7);
~u1.drawFunc = {
	~frame= ~u1.frame+40*0.123;
		~u1.background = Color(
			sin(~u1.frame*0.1)*0.1+ ~rndBC1,
			sin(~u1.frame*0.12)*0.2+ ~rndBC2,
			sin(~u1.frame*0.14 )*0.2+ ~rndBC3);

	//Background.

		Pen.fillColor = Color(0.2,0.2,0.2,0.3);
		Pen.moveTo(Point(~backrndX, 0));
		Pen.lineTo(Point(0,~backrndY));
		Pen.lineTo(Point(0,1080));
		Pen.lineTo(Point(1920,1080));
		Pen.lineTo(Point(1920,0));
		Pen.moveTo(Point(1700, 0));
		Pen.fill;

	//Spotlight

	Pen.scale(~u1rndScale,~u1rndScale);
	Pen.translate(~u1rndTrnslx,~u1rndTrnsly);
	Pen.skew(~rndSkew1);

	Pen.fillColor = Color(1,1,1,0.15);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*8+920,
		sin(20*(sin(~frame)*0.1+0.1))*8+1100),
		sin(100*(cos(~frame)*0.1+0.1))*4+350,
		cos(80*(cos(~frame)*0.1+0.1))*4+160));
	Pen.fill;

	//Mouthpiece

	Pen.strokeColor = Color(0.2,0.2,0.2);
	Pen.fillColor = ~rndCol1;


	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+220 @
		sin(20*(sin(~frame)*0.1+0.1))*2+250,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	1.9pi, 0.3pi);
	Pen.fillStroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+340 @
		sin(20*(sin(~frame)*0.1+0.1))*2+160,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
		cos(80*(cos(~frame)*0.1+0.1))*4+150,
	2.4pi, 0.3pi);
	Pen.fillStroke;

	Pen.width = ~width3;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+240 @
		sin(20*(sin(~frame)*0.1+0.1))*2+380,
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
		cos(80*(cos(~frame)*0.1+0.1))*4+130,
	1.5pi, 0.5pi);
	Pen.fillStroke;

	//Body1

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*8+130,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.fillColor = Color(0.2,0.2,0.2);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+70,
	cos(80*(cos(~frame)*0.1+0.1))*4+90));

	Pen.fillColor = ~rndCol1;

	//Button1

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));

//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Body1

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.lineDash=~rndStrk2;

	Pen.width = ~width2;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*8+130,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.width = 3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		[sin(100*(cos(~frame)*0.1+0.1))*8+130, cos(100*(sin(~frame)*0.1+0.1))*8+140,
			sin(100*(cos(~frame)*0.1+0.1))*8+150, cos(100*(sin(~frame)*0.1+0.1))*8+160
		].choose,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	//Button1

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));
	};

/////////////////////////////////////////////////////////////////////////////////////
// Bass
/////////////////////////////////////////////////////////////////////////////////////

~u2 = UserView(w, Rect(0, 0, 1920, 1080));
~u2.animate = true;
~u2.frameRate = 60;
~u2.drawFunc = {
~frame= ~u1.frame+40*0.123;

	Pen.scale(~u2rndScale,~u2rndScale);
	Pen.translate(~u2rndTrnslx,~u2rndTrnsly);
	Pen.skew(~rndSkew1,~rndSkew2);

	//Spotlight

	Pen.fillColor = Color(1,1,1,0.15);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*8+850,
		sin(20*(sin(~frame)*0.1+0.1))*8+1200),
		sin(100*(cos(~frame)*0.1+0.1))*4+300,
		cos(80*(cos(~frame)*0.1+0.1))*4+120));
	Pen.fill;

	//Neck

	Pen.rotate(~u2rndRotate);

	Pen.strokeColor = ~strkCol;
	Pen.fillColor = ~rndCol2;

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+290),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: -0.2, x: 930, y: 690); //ROTATE

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+340),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+380),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body1

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+700),
	sin(100*(cos(~frame)*0.1+0.1))*4+130,
	cos(80*(cos(~frame)*0.1+0.1))*16+100));

		Pen.fillColor = Color(0,0.35,0.35);

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+580),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+200));

			Pen.fillColor = ~rndCol2;

	//Body2

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+970),
	sin(100*(cos(~frame)*0.1+0.1))*4+200,
	cos(80*(cos(~frame)*0.1+0.1))*16+180));

//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Neck.
	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+290),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: -0.2, x: 930, y: 690); //ROTATE

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+340),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+380),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+580),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+200));

	//Body1

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+700),
	sin(100*(cos(~frame)*0.1+0.1))*8+130,
	cos(80*(cos(~frame)*0.1+0.1))*16+100));

	//Body2

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+970),
	sin(100*(cos(~frame)*0.1+0.1))*2+200,
	cos(80*(cos(~frame)*0.1+0.1))*16+180));

	//Soundholes.
		Pen.fillColor = ~strkCol;
	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ 180 @
	sin(20*(sin(~frame)*0.1+0.1))*2+880,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+150,
	0.8pi, 0.25pi);

		Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -70 @
	sin(20*(sin(~frame)*0.1+0.1))*2+850,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+150,
	2pi, 0.25pi);

	Pen.fillStroke;


	//Bridge and tailpiece.

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -60 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1100,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+150,
	1.4pi, 0.25pi);
	Pen.stroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -120 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1200,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.4pi, 0.25pi);
	Pen.stroke;

	Pen.fillColor = ~rndCol2;
	Pen.width = ~width3;
	Pen.lineDash=~rndStrk3;
	Pen.addWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -155 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1240,
	sin(100*(cos(~frame)*0.1+0.1))*4+100,
	1.5pi, 0.15pi);
	Pen.fillStroke;

	//Soundholes

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -120 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1200,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.4pi, 0.25pi);
	Pen.fillStroke;

	//String.

	Pen.width = 15;
	Pen.lineDash=~rndStrk1;
	Pen.moveTo(940@310);
	Pen.curveTo(
	Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+1050),
	Point(
	sin(200*(cos(~frame)*0.1+0.1))*63+~rndStrCurve1,
			cos(80*(cos(~frame)*0.1+0.1))*8+600),
	Point(
	cos(100*(cos(~frame)*0.1+0.1))*32+~rndStrCurve2,
	sin(80*(cos(~frame)*0.1+0.1))*8+800),
	);

	Pen.stroke;
};

/////////////////////////////////////////////////////////////////////////////////////
//Keys
/////////////////////////////////////////////////////////////////////////////////////

~u3 = UserView(w, Rect(0, 0, 1920, 1080));
~u3.animate = true;
~u3.frameRate = 60;
~u3.drawFunc = {

	~frame= ~u1.frame+40*0.123;

	//Spotlight

	Pen.scale(~u3rndScale,~u3rndScale);
	Pen.translate(~u3rndTrnslx,~u3rndTrnsly);

	Pen.fillColor = Color(1,1,1,0.15);

	Pen.fillOval(Rect.aboutPoint(Point(
			sin(40*(sin(~frame)*0.1+0.1))*8+500,
		sin(20*(sin(~frame)*0.1+0.1))*8+700),
		sin(100*(cos(~frame)*0.1+0.1))*4+350,
		cos(80*(cos(~frame)*0.1+0.1))*4+200));
	Pen.fill;

	Pen.rotate(~u3rndRotate);
	Pen.skew(~rndSkew2,~rndSkew3);
	Pen.strokeColor = ~strkCol;
	Pen.fillColor = ~rndCol3;


//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Lid.

	Pen.skew(-1,0);

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;

	Pen.moveTo(cos(80*(cos(~frame)*0.1+0.1))*4+200@cos(80*(cos(~frame)*0.1+0.1))*4+150);
	Pen.curveTo(
	Point(
		sin(40*(cos(~frame)*0.1+0.1))*16+1150,
		cos(20*(cos(~frame)*0.1+0.1))*4+400),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*63+1050,
			cos(80*(cos(~frame)*0.1+0.1))*8+380),
	Point(
	cos(100*(cos(~frame)*0.1+0.1))*32+1200,
	sin(80*(cos(~frame)*0.1+0.1))*8+ 200),
	);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

	Pen.lineTo(sin(80*(cos(~frame)*0.1+0.1))*4+150@cos(80*(cos(~frame)*0.1+0.1))*4+150);
	Pen.lineTo(cos(80*(cos(~frame)*0.1+0.1))*4+200@cos(80*(cos(~frame)*0.1+0.1))*4+150);
		Pen.fillStroke;

	Pen.moveTo(sin(100*(cos(~frame)*0.05+0.1))*4+186@cos(80*(cos(~frame)*0.1+0.1))*4+400);

		Pen.lineDash=~rndStrk2;
		Pen.width = ~width2;

	Pen.curveTo(
	Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1300,
		sin(20*(sin(~frame)*0.1+0.1))*4+550),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*63+1450,
			cos(80*(cos(~frame)*0.1+0.1))*8+500),
	Point(
	cos(100*(cos(~frame)*0.1+0.1))*32+1100,
	sin(80*(cos(~frame)*0.1+0.1))*8+ 500),
	);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+150@
		sin(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.05+0.1))*4+186@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

		Pen.fillStroke;
		Pen.lineDash=~rndStrk3;
		Pen.width = ~width3;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+400);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+470);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+132@
		cos(80*(cos(~frame)*0.1+0.1))*4+615);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+133@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+146@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+149@
		cos(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+133@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

		Pen.lineDash=~rndStrk2;
		Pen.width = ~width1;

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+132@
		cos(80*(cos(~frame)*0.1+0.1))*4+615);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+180@
		cos(80*(cos(~frame)*0.1+0.1))*4+610);

		Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+185@
		cos(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+150@
		sin(80*(cos(~frame)*0.1+0.1))*4+550);

	Pen.fillStroke;
	Pen.lineDash= FloatArray[1,1,1,2,1,1,1,1,1,2];
	Pen.width = 15;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+100@
		cos(80*(cos(~frame)*0.1+0.1))*4+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+146@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.stroke;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+90@
		cos(80*(cos(~frame)*0.1+0.1))*4+470);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+90@
		sin(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+95@
		cos(80*(cos(~frame)*0.1+0.1))*4+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+95@
		cos(80*(cos(~frame)*0.1+0.1))*4+490);

	Pen.fillStroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+135@
		cos(80*(cos(~frame)*0.1+0.1))*4+610);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+135@
		cos(80*(cos(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+140@
		cos(80*(sin(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+140@
		sin(80*(cos(~frame)*0.1+0.1))*4+600);

	Pen.fillStroke;

	Pen.width = ~width3;
	Pen.lineDash=~rndStrk1;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+180@
		cos(80*(cos(~frame)*0.1+0.1))*4+610);


	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+177@
		cos(80*(cos(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+172@
		cos(80*(cos(~frame)*0.1+0.1))*4+690);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+175@
		cos(80*(cos(~frame)*0.1+0.1))*4+600);

	Pen.fillStroke;

};


/////////////////////////////////////////////////////////////////////////////////////
//Drums.
/////////////////////////////////////////////////////////////////////////////////////

~u4 = UserView(w, Rect(0, 0, 1920, 1080));
~u4.animate = true;
~u4.frameRate = 60;
~u4.drawFunc = {

	~frame= ~u1.frame+40*0.123;

		Pen.use {
	Pen.strokeColor = ~strkCol;
	Pen.translate(~u4rndTrnslx,~u4rndTrnsly);

	Pen.fillColor = Color(1,1,1,0.15);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*8+400,
		sin(20*(sin(~frame)*0.1+0.1))*8+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+350,
		cos(80*(cos(~frame)*0.1+0.1))*4+160));
	Pen.fill;

	Pen.fillColor = ~rndCol4;
	Pen.rotate(~u4rndRotate);
	Pen.skew(~rndSkew1,~rndSkew3);
	Pen.scale(~u4rndScale,~u4rndScale);

//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//BD Feet

	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+ -10 @
		sin(20*(sin(~frame)*0.1+0.1))*2+550,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.2pi, 0.15pi);

	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+ -90 @
		sin(20*(sin(~frame)*0.1+0.1))*2+560,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.7pi, 0.15pi);

	Pen.fillStroke;

	//BigTom

    Pen.translate(10,-50);

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width1;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -18@
		cos(80*(cos(~frame)*0.1+0.1))*4+410);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -65@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 600);

	Pen.curveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -102@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 600,
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 260,
	cos(80*(cos(~frame)*0.1+0.1))*2+620),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 260,
	cos(80*(cos(~frame)*0.1+0.1))*2+620));

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -58@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 410);

	Pen.fillStroke;

	Pen.width = ~width2;

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+260,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
	sin(100*(cos(~frame)*0.1+0.1))*16+80,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+260,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
	sin(100*(cos(~frame)*0.1+0.1))*16+80,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	//Snare

		Pen.lineDash=~rndStrk1;
	Pen.width = ~width3;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 65@
		cos(80*(cos(~frame)*0.1+0.1))*4+380);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 40@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 480);

	Pen.curveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 30@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 400,
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 500,
	cos(80*(cos(~frame)*0.1+0.1))*2+540),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 500,
	cos(80*(cos(~frame)*0.1+0.1))*2+520));

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 18@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 410);

	Pen.fillStroke;

	Pen.width = ~width2;

	Pen.rotate(1.95pi,500,380);

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+500,
		sin(20*(sin(~frame)*0.1+0.1))*4+400),
	sin(100*(cos(~frame)*0.1+0.1))*16+140,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+500,
		sin(20*(sin(~frame)*0.1+0.1))*4+400),
	sin(100*(cos(~frame)*0.1+0.1))*16+140,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	Pen.rotate(-1.95pi,500,380);

    Pen.translate(-10,50);

	//BassDrum

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width2;
	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+440,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
		sin(100*(cos(~frame)*0.1+0.1))*4+120,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+440,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
		sin(100*(cos(~frame)*0.1+0.1))*4+120,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 90@
		sin(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 33@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 13@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 33@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 40@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.stroke;

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 90@
		sin(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 50@
		sin(80*(cos(~frame)*0.15+0.1))*6+ 290);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 95@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 270);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 55@
		sin(80*(cos(~frame)*0.1+0.1))*8+ 280);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 90@
		sin(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.fillStroke;

	Pen.scale(1.2,1.2);

	Pen.translate(-400,-50);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 90@
		cos(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 33@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 13@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 33@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 40@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.stroke;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 90@
		cos(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 35@
		sin(80*(cos(~frame)*0.2+0.2))*8+ 290);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 95@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 270);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 115@
		sin(80*(cos(~frame)*0.2+0.1))*4+ 280);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 90@
		cos(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.fillStroke;

};
			//Notes.

	Pen.use {

			Pen.translate(~trnslx1,~trnsly1);
			Pen.rotate(~rndSkew4, 800,300);
			Pen.lineDash = ~rndStrk1;
			Pen.width = ~width1;
			Pen.strokeColor = ~strkCol;
			Pen.fillColor = Color(0.9,0.8,0.8);
			Pen.moveTo(Point(700,500));
			Pen.lineTo(Point(730,550));
			Pen.lineTo(Point(800,530));
			Pen.lineTo(Point(810,500));
			Pen.lineTo(Point(820,280));
			Pen.lineTo(Point(860,280));
			Pen.lineTo(Point(900,240));
			Pen.lineTo(Point(820,240));
			Pen.lineTo(Point(780,480));
			Pen.lineTo(Point(740,480));
			Pen.lineTo(Point(700,500));
			Pen.lineTo(Point(700,500));
			Pen.fillStroke;

};

		Pen.translate(0,200);

	Pen.use {

			Pen.translate(~trnslx2,~trnsly2);
			Pen.rotate(~rndSkew5, 800,300);
			Pen.lineDash = ~rndStrk2;
			Pen.width = ~width1;
			Pen.strokeColor = ~strkCol;
			Pen.fillColor = Color(0.9,0.8,0.8);
			Pen.moveTo(Point(800,500));
			Pen.lineTo(Point(830,550));
			Pen.lineTo(Point(900,530));
			Pen.lineTo(Point(910,500));
			Pen.lineTo(Point(920,280));
			Pen.lineTo(Point(960,280));
			Pen.lineTo(Point(1000,240));
			Pen.lineTo(Point(920,240));
			Pen.lineTo(Point(880,480));
			Pen.lineTo(Point(840,480));
			Pen.lineTo(Point(800,500));
			Pen.lineTo(Point(800,500));
			Pen.fillStroke;

};

		Pen.translate(100,000);

			Pen.use {

			Pen.translate(~trnslx1);
			Pen.rotate(~rndSkew6, 800,300);
			Pen.lineDash = ~rndStrk3;
			Pen.width = ~width1;
			Pen.strokeColor = ~strkCol;
			Pen.fillColor = Color(0.9,0.8,0.8);
			Pen.moveTo(Point(800,500));
			Pen.lineTo(Point(830,550));
			Pen.lineTo(Point(900,530));
			Pen.lineTo(Point(910,500));
			Pen.lineTo(Point(920,280));
			Pen.lineTo(Point(960,280));
			Pen.lineTo(Point(1000,240));
			Pen.lineTo(Point(920,240));
			Pen.lineTo(Point(880,480));
			Pen.lineTo(Point(840,480));
			Pen.lineTo(Point(800,500));
			Pen.lineTo(Point(800,500));
			Pen.fillStroke;

};

		};
	};
);

(
/////////////////////////////////////////////////////////////////////////////////////
// Scene 9a
/////////////////////////////////////////////////////////////////////////////////////
~scene9a.value;
~scene9a =
{
if(~u1.isNil,{ nil },   {~u1.close });
if(~u2.isNil,{ nil },   {~u2.close });
if(~u3.isNil,{ nil },   {~u3.close });
if(~u4.isNil,{ nil },   {~u4.close });
~rndStrk1 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk2 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk3 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~width1 = rrand(2,10);
~width2 = rrand(2,15);
~width3 = rrand(2,15);

~u1rndScale = 0.6;
~u2rndScale = 0.7;
~u3rndScale = 2;
~u4rndScale = 1;

~u1rndTrnslx = rrand(1650,1700);
~u2rndTrnslx = rrand(800,800);
~u3rndTrnslx = -300;
~u4rndTrnslx = rrand(1150,1150);

~u1rndTrnsly = 600;
~u2rndTrnsly = rrand(-50,0);
~u3rndTrnsly = -250;
~u4rndTrnsly = -150;

if(~trnslx1.isNil,{~trnslx1=0},   {nil});
if(~trnslx1 > 1000 ,{~trnslx1=0},   {nil});
~trnslx1 = ~trnslx1+90;
if(~trnsly1.isNil,{~trnsly1=0},   {nil});
if(~trnsly1 < -700 ,{~trnsly1=0},   {nil});
~trnsly1 = ~trnsly1-20;

if(~trnslx2.isNil,{~trnslx2=0},   {nil});
if(~trnslx2 > 500 ,{~trnslx2=0},   {nil});
~trnslx2 = ~trnslx2+90;
if(~trnsly2.isNil,{~trnsly2=0},   {nil});
if(~trnsly2 > 500 ,{~trnsly2=0},   {nil});
~trnsly2 = ~trnsly2 + 25;

if(~trnslx3.isNil,{~trnslx3=0},   {nil});
if(~trnslx3 > 500 ,{~trnslx3=0},   {nil});
~trnslx3 = ~trnslx3+80;
if(~trnsly3.isNil,{~trnsly3=0},   {nil});
if(~trnsly3 > 500 ,{~trnsly3=0},   {nil});
~trnsly3 = ~trnsly3 + 15;

~backrndX = rrand(1700,1900);
~backrndY = rrand(400,600);

~rndSkew1 = rrand(-0.1,0.1);
~rndSkew2 = rrand(-0.1,0.1);
~rndSkew3 = rrand(-0.1,0.1);
~rndSkew4 = rrand(-0.3,0.3);
~rndSkew5 = rrand(-0.3,0.3);
~rndSkew6 = rrand(-0.3,0.3);
~u1rndRotate = rrand(-0.3,0.2);
~u2rndRotate = rrand(-0.01,0.05);
~u3rndRotate = rrand(-0.01,0.01);
~u4rndRotate = rrand(-0.03,0.02);
~strkCol = Color.new255(rrand(30,70), rrand(30,70), rrand(50,90));
~rndCol3 = Color(rrand(0.75,1),rrand(0.75,0.1),rrand(0.75,0.1));
~rndCol2 = Color(0,0.55,0.55);
~rndCol1 = Color(0,0.55,0.55);
~rndCol4 = Color(0,0.55,0.55);
~rndStrCurve1 = rrand(800,1050);
~rndStrCurve2 = rrand(800,1050);

~randpkeys1 = [
		FloatArray[1,1,1,2,1,1,1,1,1,2],
		FloatArray[1,1,2,2,1,1,1,1,1,2],
		FloatArray[1,2,1,1,2,1,1,1,1,2],
		FloatArray[1,1,1,1,2,1,1,2,1,1],
		FloatArray[2,1,2,1,1,2,1,1,1,1]].choose;

~randpkeys2 = [
		FloatArray[1,1,1,2,1,1,1,1,1,2],
		FloatArray[1,1,2,2,1,1,1,1,1,2],
		FloatArray[1,2,1,1,2,1,1,1,1,2],
		FloatArray[1,1,1,1,2,1,1,2,1,1],
		FloatArray[2,1,2,1,1,2,1,1,1,1]].choose;

/////////////////////////////////////////////////////////////////////////////////////
// Sax.
/////////////////////////////////////////////////////////////////////////////////////

~u1 = UserView(w, Rect(0, 0, 1920, 1080));
~u1.animate = true;
~u1.frameRate = 60;
~u1.background = Color(0.7,0.2,0.2);
~u1.drawFunc = {
	~frame= ~u1.frame+40*0.123;

	//Background.

		Pen.fillColor = Color(0.2,0.2,0.2,0.3);
		Pen.moveTo(Point(~backrndX, 0));
		Pen.lineTo(Point(0,~backrndY));
		Pen.lineTo(Point(0,1080));
		Pen.lineTo(Point(1920,1080));
		Pen.lineTo(Point(1920,0));
		Pen.moveTo(Point(1700, 0));
		Pen.fill;

	//Spotlight

	Pen.scale(~u1rndScale,~u1rndScale);
	Pen.translate(~u1rndTrnslx,~u1rndTrnsly);
	Pen.skew(~rndSkew1);

	Pen.fillColor = Color(1,1,1,0.15);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*8+920,
		sin(20*(sin(~frame)*0.1+0.1))*8+1100),
		sin(100*(cos(~frame)*0.1+0.1))*4+350,
		cos(80*(cos(~frame)*0.1+0.1))*4+160));
	Pen.fill;

	//Mouthpiece

	Pen.strokeColor = Color(0.2,0.2,0.2);
	Pen.fillColor = ~rndCol1;


	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+220 @
		sin(20*(sin(~frame)*0.1+0.1))*2+250,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	1.9pi, 0.3pi);
	Pen.fillStroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+340 @
		sin(20*(sin(~frame)*0.1+0.1))*2+160,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
		cos(80*(cos(~frame)*0.1+0.1))*4+150,
	2.4pi, 0.3pi);
	Pen.fillStroke;

	Pen.width = ~width3;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+240 @
		sin(20*(sin(~frame)*0.1+0.1))*2+380,
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
		cos(80*(cos(~frame)*0.1+0.1))*4+130,
	1.5pi, 0.5pi);
	Pen.fillStroke;

	//Body1

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*8+130,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.fillColor = Color(0.2,0.2,0.2);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+70,
	cos(80*(cos(~frame)*0.1+0.1))*4+90));

	Pen.fillColor = ~rndCol1;

	//Button1

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));

//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Body1

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*8+130,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	//Button1

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));
};

/////////////////////////////////////////////////////////////////////////////////////
// Bass
/////////////////////////////////////////////////////////////////////////////////////

~u2 = UserView(w, Rect(0, 0, 1920, 1080));
~u2.animate = true;
~u2.frameRate = 60;
~u2.drawFunc = {
~frame= ~u1.frame+40*0.123;

	Pen.scale(~u2rndScale,~u2rndScale);
	Pen.translate(~u2rndTrnslx,~u2rndTrnsly);
	Pen.skew(~rndSkew1,~rndSkew2);

	//Spotlight

	Pen.fillColor = Color(1,1,1,0.15);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*8+850,
		sin(20*(sin(~frame)*0.1+0.1))*8+1200),
		sin(100*(cos(~frame)*0.1+0.1))*4+300,
		cos(80*(cos(~frame)*0.1+0.1))*4+120));
	Pen.fill;

	//Neck

	Pen.rotate(~u2rndRotate);

	Pen.strokeColor = ~strkCol;
	Pen.fillColor = ~rndCol2;

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+290),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: -0.2, x: 930, y: 690); //ROTATE

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+340),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+380),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body1

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+700),
	sin(100*(cos(~frame)*0.1+0.1))*4+130,
	cos(80*(cos(~frame)*0.1+0.1))*16+100));

		Pen.fillColor = Color(0,0.35,0.35);

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+580),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+200));

			Pen.fillColor = ~rndCol2;

	//Body2

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+970),
	sin(100*(cos(~frame)*0.1+0.1))*4+200,
	cos(80*(cos(~frame)*0.1+0.1))*16+180));

//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Neck.
	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+290),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: -0.2, x: 930, y: 690); //ROTATE

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+340),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+380),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+580),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+200));

	//Body1

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+700),
	sin(100*(cos(~frame)*0.1+0.1))*8+130,
	cos(80*(cos(~frame)*0.1+0.1))*16+100));

	//Body2

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+970),
	sin(100*(cos(~frame)*0.1+0.1))*2+200,
	cos(80*(cos(~frame)*0.1+0.1))*16+180));

	//Soundholes.
		Pen.fillColor = ~strkCol;
	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ 180 @
	sin(20*(sin(~frame)*0.1+0.1))*2+880,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+150,
	0.8pi, 0.25pi);

		Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -70 @
	sin(20*(sin(~frame)*0.1+0.1))*2+850,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+150,
	2pi, 0.25pi);

	Pen.fillStroke;


	//Bridge and tailpiece.

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -60 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1100,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+150,
	1.4pi, 0.25pi);
	Pen.stroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -120 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1200,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.4pi, 0.25pi);
	Pen.stroke;

	Pen.fillColor = ~rndCol2;
	Pen.width = ~width3;
	Pen.lineDash=~rndStrk3;
	Pen.addWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -155 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1240,
	sin(100*(cos(~frame)*0.1+0.1))*4+100,
	1.5pi, 0.15pi);
	Pen.fillStroke;

	//Soundholes

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -120 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1200,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.4pi, 0.25pi);
	Pen.fillStroke;

	//String.

	Pen.width = 15;
	Pen.lineDash=~rndStrk1;
	Pen.moveTo(940@310);
	Pen.curveTo(
	Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+1050),
	Point(
	sin(200*(cos(~frame)*0.1+0.1))*63+~rndStrCurve1,
			cos(80*(cos(~frame)*0.1+0.1))*8+600),
	Point(
	cos(100*(cos(~frame)*0.1+0.1))*32+~rndStrCurve2,
	sin(80*(cos(~frame)*0.1+0.1))*8+800),
	);

	Pen.stroke;
};

/////////////////////////////////////////////////////////////////////////////////////
//Keys
/////////////////////////////////////////////////////////////////////////////////////

~u3 = UserView(w, Rect(0, 0, 1920, 1080));
~u3.animate = true;
~u3.frameRate = 60;
~u3.drawFunc = {

	~frame= ~u1.frame+40*0.123;

		Pen.translate(0,200);

	//Spotlight

	Pen.scale(~u3rndScale,~u3rndScale);
	Pen.translate(~u3rndTrnslx,~u3rndTrnsly);

	Pen.fillColor = Color(1,1,1,0.15);

	Pen.fillOval(Rect.aboutPoint(Point(
			sin(40*(sin(~frame)*0.1+0.1))*2+500,
		sin(20*(sin(~frame)*0.1+0.1))*2+700),
		sin(100*(cos(~frame)*0.1+0.1))*2+350,
		cos(80*(cos(~frame)*0.1+0.1))*2+200));
	Pen.fill;

	Pen.rotate(~u3rndRotate);
	Pen.skew(~rndSkew2,~rndSkew3);
	Pen.strokeColor = ~strkCol;
	Pen.fillColor = ~rndCol3;


//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Lid.

	Pen.skew(-1,0);

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1 / 2;

	Pen.moveTo(cos(80*(cos(~frame)*0.1+0.1))*2+350@cos(80*(cos(~frame)*0.1+0.1))*2+170);
	Pen.curveTo(
	Point(
		sin(40*(cos(~frame)*0.1+0.1))*2+1150,
		cos(20*(cos(~frame)*0.1+0.1))*2+400),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*2+1050,
			cos(80*(cos(~frame)*0.1+0.1))*2+380),
	Point(
	cos(100*(cos(~frame)*0.1+0.1))*2+1200,
	sin(80*(cos(~frame)*0.1+0.1))*2+ 200),
	);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+200@
		cos(80*(cos(~frame)*0.1+0.1))*2+400);

	Pen.lineTo(sin(80*(cos(~frame)*0.1+0.1))*2+260@cos(80*(cos(~frame)*0.1+0.1))*2+150);
	Pen.lineTo(cos(80*(cos(~frame)*0.1+0.1))*2+350@cos(80*(cos(~frame)*0.1+0.1))*2+170);
		Pen.fillStroke;

	Pen.moveTo(sin(100*(cos(~frame)*0.05+0.1))*2+376@cos(80*(cos(~frame)*0.1+0.1))*2+400);

		Pen.lineDash=~rndStrk2;
		Pen.width = ~width2 / 2;

	Pen.curveTo(
	Point(
		sin(40*(sin(~frame)*0.1+0.1))*2+1300,
		sin(20*(sin(~frame)*0.1+0.1))*2+550),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*2+1450,
			cos(80*(cos(~frame)*0.1+0.1))*2+500),
	Point(
	cos(100*(cos(~frame)*0.1+0.1))*2+1100,
	sin(80*(cos(~frame)*0.1+0.1))*2+ 500),
	);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+300@
		sin(80*(cos(~frame)*0.1+0.1))*2+550);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+200@
		cos(80*(cos(~frame)*0.1+0.1))*2+400);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.05+0.1))*2+200@
		cos(80*(cos(~frame)*0.1+0.1))*2+400);

		Pen.fillStroke;
		Pen.lineDash=~rndStrk3;
		Pen.width = ~width3 / 2;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+200@
		cos(80*(cos(~frame)*0.1+0.1))*2+400);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+190@
		cos(80*(cos(~frame)*0.1+0.1))*2+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+170@
		cos(80*(cos(~frame)*0.1+0.1))*2+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+167@
		cos(80*(cos(~frame)*0.1+0.1))*2+470);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+252@
		cos(80*(cos(~frame)*0.1+0.1))*2+615);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+256@
		cos(80*(cos(~frame)*0.1+0.1))*2+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+290@
		cos(80*(cos(~frame)*0.1+0.1))*2+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+300@
		cos(80*(cos(~frame)*0.1+0.1))*2+550);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+256@
		cos(80*(cos(~frame)*0.1+0.1))*2+590);

		Pen.lineDash=~rndStrk2;
		Pen.width = ~width1 / 2;

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+170@
		cos(80*(cos(~frame)*0.1+0.1))*2+450);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+252@
		cos(80*(cos(~frame)*0.1+0.1))*2+615);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+287@
		cos(80*(cos(~frame)*0.1+0.1))*2+615);

		Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+365@
		cos(80*(cos(~frame)*0.1+0.1))*2+610);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+375@
		sin(80*(cos(~frame)*0.1+0.1))*2+550);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+300@
		sin(80*(cos(~frame)*0.1+0.1))*2+550);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+290@
		sin(80*(cos(~frame)*0.1+0.1))*2+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+256@
		sin(80*(cos(~frame)*0.1+0.1))*2+590);

	Pen.fillStroke;

	Pen.width = 15;
		Pen.lineDash= ~randpkeys2;
	Pen.strokeColor= Color.white;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+180@
		cos(80*(cos(~frame)*0.1+0.1))*2+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+265@
		cos(80*(cos(~frame)*0.1+0.1))*2+590);

	Pen.stroke;

	Pen.lineDash= ~randpkeys1;
	Pen.strokeColor= ~strkCol;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+190@
		cos(80*(cos(~frame)*0.1+0.1))*2+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+276@
		cos(80*(cos(~frame)*0.1+0.1))*2+590);

	Pen.stroke;

	Pen.strokeColor= ~strkCol;

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2 / 2;

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*2+167@
		cos(80*(cos(~frame)*0.1+0.1))*2+470);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+150@
		sin(80*(cos(~frame)*0.1+0.1))*2+590);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*2+160@
		cos(80*(cos(~frame)*0.1+0.1))*2+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+175@
		cos(80*(cos(~frame)*0.1+0.1))*2+484);

	Pen.fillStroke;

	Pen.width = ~width2 / 2;
	Pen.lineDash=~rndStrk2;

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*2+250@
		cos(80*(cos(~frame)*0.1+0.1))*2+615);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+220@
		cos(80*(cos(~frame)*0.1+0.1))*2+790);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+230@
		cos(80*(sin(~frame)*0.1+0.1))*2+790);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*2+270@
		sin(80*(cos(~frame)*0.1+0.1))*2+615);

	Pen.fillStroke;

	Pen.width = ~width3 / 2;
	Pen.lineDash=~rndStrk1;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+365@
		cos(80*(cos(~frame)*0.1+0.1))*2+611);


	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+345@
		cos(80*(cos(~frame)*0.1+0.1))*2+720);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+335@
		cos(80*(cos(~frame)*0.1+0.1))*2+715);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*2+350@
		cos(80*(cos(~frame)*0.1+0.1))*2+611);

	Pen.fillStroke;

};


/////////////////////////////////////////////////////////////////////////////////////
//Drums.
/////////////////////////////////////////////////////////////////////////////////////

~u4 = UserView(w, Rect(0, 0, 1920, 1080));
~u4.animate = true;
~u4.frameRate = 60;
~u4.drawFunc = {

	~frame= ~u1.frame+40*0.123;

Pen.use {
	Pen.strokeColor = ~strkCol;
	Pen.translate(~u4rndTrnslx,~u4rndTrnsly);

	Pen.fillColor = Color(1,1,1,0.15);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*8+400,
		sin(20*(sin(~frame)*0.1+0.1))*8+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+350,
		cos(80*(cos(~frame)*0.1+0.1))*4+160));
	Pen.fill;

	Pen.fillColor = ~rndCol4;
	Pen.rotate(~u4rndRotate);
	Pen.skew(~rndSkew1,~rndSkew3);
	Pen.scale(~u4rndScale,~u4rndScale);

//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//BD Feet

	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+ -10 @
		sin(20*(sin(~frame)*0.1+0.1))*2+550,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.2pi, 0.15pi);

	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+ -90 @
		sin(20*(sin(~frame)*0.1+0.1))*2+560,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.7pi, 0.15pi);

	Pen.fillStroke;

	//BigTom

    Pen.translate(10,-50);

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width1;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -18@
		cos(80*(cos(~frame)*0.1+0.1))*4+410);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -65@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 600);

	Pen.curveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -102@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 600,
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 260,
	cos(80*(cos(~frame)*0.1+0.1))*2+620),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 260,
	cos(80*(cos(~frame)*0.1+0.1))*2+620));

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -58@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 410);

	Pen.fillStroke;

	Pen.width = ~width2;

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+260,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
	sin(100*(cos(~frame)*0.1+0.1))*16+80,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+260,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
	sin(100*(cos(~frame)*0.1+0.1))*16+80,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	//Snare

		Pen.lineDash=~rndStrk1;
	Pen.width = ~width3;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 65@
		cos(80*(cos(~frame)*0.1+0.1))*4+380);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 40@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 480);

	Pen.curveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 30@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 400,
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 500,
	cos(80*(cos(~frame)*0.1+0.1))*2+540),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 500,
	cos(80*(cos(~frame)*0.1+0.1))*2+520));

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 18@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 410);

	Pen.fillStroke;

	Pen.width = ~width2;

	Pen.rotate(1.95pi,500,380);

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+500,
		sin(20*(sin(~frame)*0.1+0.1))*4+400),
	sin(100*(cos(~frame)*0.1+0.1))*16+140,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+500,
		sin(20*(sin(~frame)*0.1+0.1))*4+400),
	sin(100*(cos(~frame)*0.1+0.1))*16+140,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	Pen.rotate(-1.95pi,500,380);

    Pen.translate(-10,50);

	//BassDrum

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width2;
	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+440,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
		sin(100*(cos(~frame)*0.1+0.1))*4+120,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+440,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
		sin(100*(cos(~frame)*0.1+0.1))*4+120,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 90@
		sin(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 33@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 13@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 33@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 40@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.stroke;

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 90@
		sin(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 50@
		sin(80*(cos(~frame)*0.15+0.1))*6+ 290);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 95@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 270);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 55@
		sin(80*(cos(~frame)*0.1+0.1))*8+ 280);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 90@
		sin(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.fillStroke;

	Pen.scale(1.2,1.2);

	Pen.translate(-400,-50);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 90@
		cos(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 33@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 13@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 33@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 40@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.stroke;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 90@
		cos(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 35@
		sin(80*(cos(~frame)*0.2+0.2))*8+ 290);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 95@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 270);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 55@
		sin(80*(cos(~frame)*0.2+0.1))*8+ 280);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 90@
		cos(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.fillStroke;

	};
					//Notes.

	Pen.use {

			Pen.translate(~trnslx1,~trnsly1);
			Pen.rotate(~rndSkew4, 800,300);
			Pen.lineDash = ~rndStrk1;
			Pen.width = ~width1;
			Pen.strokeColor = ~strkCol;
			Pen.fillColor = Color(0.9,0.8,0.8);
			Pen.moveTo(Point(700,500));
			Pen.lineTo(Point(730,550));
			Pen.lineTo(Point(800,530));
			Pen.lineTo(Point(810,500));
			Pen.lineTo(Point(820,280));
			Pen.lineTo(Point(860,280));
			Pen.lineTo(Point(900,240));
			Pen.lineTo(Point(820,240));
			Pen.lineTo(Point(780,480));
			Pen.lineTo(Point(740,480));
			Pen.lineTo(Point(700,500));
			Pen.lineTo(Point(700,500));
			Pen.fillStroke;

};

		Pen.translate(0,200);

	Pen.use {

			Pen.translate(~trnslx2,~trnsly2);
			Pen.rotate(~rndSkew5, 800,300);
			Pen.lineDash = ~rndStrk2;
			Pen.width = ~width1;
			Pen.strokeColor = ~strkCol;
			Pen.fillColor = Color(0.9,0.8,0.8);
			Pen.moveTo(Point(800,500));
			Pen.lineTo(Point(830,550));
			Pen.lineTo(Point(900,530));
			Pen.lineTo(Point(910,500));
			Pen.lineTo(Point(920,280));
			Pen.lineTo(Point(960,280));
			Pen.lineTo(Point(1000,240));
			Pen.lineTo(Point(920,240));
			Pen.lineTo(Point(880,480));
			Pen.lineTo(Point(840,480));
			Pen.lineTo(Point(800,500));
			Pen.lineTo(Point(800,500));
			Pen.fillStroke;

};

		Pen.translate(100,000);

			Pen.use {

			Pen.translate(~trnslx1);
			Pen.rotate(~rndSkew6, 800,300);
			Pen.lineDash = ~rndStrk3;
			Pen.width = ~width1;
			Pen.strokeColor = ~strkCol;
			Pen.fillColor = Color(0.9,0.8,0.8);
			Pen.moveTo(Point(800,500));
			Pen.lineTo(Point(830,550));
			Pen.lineTo(Point(900,530));
			Pen.lineTo(Point(910,500));
			Pen.lineTo(Point(920,280));
			Pen.lineTo(Point(960,280));
			Pen.lineTo(Point(1000,240));
			Pen.lineTo(Point(920,240));
			Pen.lineTo(Point(880,480));
			Pen.lineTo(Point(840,480));
			Pen.lineTo(Point(800,500));
			Pen.lineTo(Point(800,500));
			Pen.fillStroke;

};

	};
	};
);

(
/////////////////////////////////////////////////////////////////////////////////////
// Scene 9b
/////////////////////////////////////////////////////////////////////////////////////
~scene9b.value;
~scene9b =
{
if(~u1.isNil,{ nil },   {~u1.close });
if(~u2.isNil,{ nil },   {~u2.close });
if(~u3.isNil,{ nil },   {~u3.close });
if(~u4.isNil,{ nil },   {~u4.close });
~rndStrk1 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk2 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~rndStrk3 = FloatArray[rrand(1,5), rrand(1,5), rrand(1,5), rrand(1,5)];
~width1 = rrand(2,10);
~width2 = rrand(2,15);
~width3 = rrand(2,15);

~u1rndScale = 0.6;
~u2rndScale = 0.7;
~u3rndScale = 2;
~u4rndScale = 1;

~u1rndTrnslx = rrand(1650,1700);
~u2rndTrnslx = rrand(800,800);
~u3rndTrnslx = -300;
~u4rndTrnslx = rrand(1150,1150);

~u1rndTrnsly = 600;
~u2rndTrnsly = rrand(-50,0);
~u3rndTrnsly = -250;
~u4rndTrnsly = -150;

if(~trnslx1.isNil,{~trnslx1=0},   {nil});
if(~trnslx1 > 1000 ,{~trnslx1=0},   {nil});
~trnslx1 = ~trnslx1+90;
if(~trnsly1.isNil,{~trnsly1=0},   {nil});
if(~trnsly1 < -700 ,{~trnsly1=0},   {nil});
~trnsly1 = ~trnsly1-20;

if(~trnslx2.isNil,{~trnslx2=0},   {nil});
if(~trnslx2 > 500 ,{~trnslx2=0},   {nil});
~trnslx2 = ~trnslx2+90;
if(~trnsly2.isNil,{~trnsly2=0},   {nil});
if(~trnsly2 > 500 ,{~trnsly2=0},   {nil});
~trnsly2 = ~trnsly2 + 25;

if(~trnslx3.isNil,{~trnslx3=0},   {nil});
if(~trnslx3 > 500 ,{~trnslx3=0},   {nil});
~trnslx3 = ~trnslx3+80;
if(~trnsly3.isNil,{~trnsly3=0},   {nil});
if(~trnsly3 > 500 ,{~trnsly3=0},   {nil});
~trnsly3 = ~trnsly3 + 15;

~backrndX = rrand(1700,1900);
~backrndY = rrand(400,600);

~rndSkew1 = rrand(-0.1,0.1);
~rndSkew2 = rrand(-0.1,0.1);
~rndSkew3 = rrand(-0.1,0.1);
~rndSkew4 = rrand(-0.3,0.3);
~rndSkew5 = rrand(-0.3,0.3);
~rndSkew6 = rrand(-0.3,0.3);
~u1rndRotate = rrand(-0.3,0.2);
~u2rndRotate = rrand(-0.01,0.05);
~u3rndRotate = rrand(-0.01,0.01);
~u4rndRotate = rrand(-0.03,0.02);
~strkCol = Color.new255(rrand(30,70), rrand(30,70), rrand(50,90));
~rndCol3 = Color(rrand(0.75,1),rrand(0.75,0.1),rrand(0.75,0.1));
~rndCol2 = Color(0,0.55,0.55);
~rndCol1 = Color(0,0.55,0.55);
~rndCol4 = Color(0,0.55,0.55);
~rndStrCurve1 = rrand(800,1050);
~rndStrCurve2 = rrand(800,1050);

~randpkeys1 = [
		FloatArray[1,1,1,2,1,1,1,1,1,2],
		FloatArray[1,1,2,2,1,1,1,1,1,2],
		FloatArray[1,2,1,1,2,1,1,1,1,2],
		FloatArray[1,1,1,1,2,1,1,2,1,1],
		FloatArray[2,1,2,1,1,2,1,1,1,1]].choose;

~randpkeys2 = [
		FloatArray[1,1,1,2,1,1,1,1,1,2],
		FloatArray[1,1,2,2,1,1,1,1,1,2],
		FloatArray[1,2,1,1,2,1,1,1,1,2],
		FloatArray[1,1,1,1,2,1,1,2,1,1],
		FloatArray[2,1,2,1,1,2,1,1,1,1]].choose;

~rndBC1=rrand(0.1,0.4);
~rndBC2=rrand(0.1,0.4);
~rndBC3=rrand(0.1,0.4);

/////////////////////////////////////////////////////////////////////////////////////
// Sax.
/////////////////////////////////////////////////////////////////////////////////////

~u1 = UserView(w, Rect(0, 0, 1920, 1080));
~u1.animate = true;
~u1.frameRate = 60;
~u1.drawFunc = {
	~frame= ~u1.frame+40*0.123;
		~u1.background = Color(
			sin(~u1.frame*0.1)*0.1+ ~rndBC1,
			sin(~u1.frame*0.12)*0.2+ ~rndBC2,
			sin(~u1.frame*0.14 )*0.2+ ~rndBC3);

	//Background.

		Pen.fillColor = Color(0.2,0.2,0.2,0.3);
		Pen.moveTo(Point(~backrndX, 0));
		Pen.lineTo(Point(0,~backrndY));
		Pen.lineTo(Point(0,1080));
		Pen.lineTo(Point(1920,1080));
		Pen.lineTo(Point(1920,0));
		Pen.moveTo(Point(1700, 0));
		Pen.fill;

	//Spotlight

	Pen.scale(~u1rndScale,~u1rndScale);
	Pen.translate(~u1rndTrnslx,~u1rndTrnsly);
	Pen.skew(~rndSkew1);

	Pen.fillColor = Color(1,1,1,0.15);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*8+920,
		sin(20*(sin(~frame)*0.1+0.1))*8+1100),
		sin(100*(cos(~frame)*0.1+0.1))*4+350,
		cos(80*(cos(~frame)*0.1+0.1))*4+160));
	Pen.fill;

	//Mouthpiece

	Pen.strokeColor = Color(0.2,0.2,0.2);
	Pen.fillColor = ~rndCol1;


	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+220 @
		sin(20*(sin(~frame)*0.1+0.1))*2+250,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	1.9pi, 0.3pi);
	Pen.fillStroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk3;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+340 @
		sin(20*(sin(~frame)*0.1+0.1))*2+160,
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
		cos(80*(cos(~frame)*0.1+0.1))*4+150,
	2.4pi, 0.3pi);
	Pen.fillStroke;

	Pen.width = ~width3;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+240 @
		sin(20*(sin(~frame)*0.1+0.1))*2+380,
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
		cos(80*(cos(~frame)*0.1+0.1))*4+130,
	1.5pi, 0.5pi);
	Pen.fillStroke;

	//Body1

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*8+130,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.fillColor = Color(0.2,0.2,0.2);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+70,
	cos(80*(cos(~frame)*0.1+0.1))*4+90));

	Pen.fillColor = ~rndCol1;

	//Button1

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));

//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Body1

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body2

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+690),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+130));

	Pen.rotate(angle: -0.1, x: 930, y: 690); //ROTATE

	//Body3

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+920),
		sin(100*(cos(~frame)*0.1+0.1))*4+80,
	cos(80*(cos(~frame)*0.1+0.1))*4+140));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body4

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1050,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*4+100,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	Pen.rotate(angle: -0.3, x: 930, y: 690); //ROTATE

	//Body5

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1100,
		sin(20*(sin(~frame)*0.1+0.1))*4+850),
		sin(100*(cos(~frame)*0.1+0.1))*8+130,
	cos(80*(cos(~frame)*0.1+0.1))*4+160));

	//Button1

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1000,
		sin(20*(sin(~frame)*0.1+0.1))*4+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+30,
	cos(80*(cos(~frame)*0.1+0.1))*4+30));

	//Button2

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+650),
		sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	//Button3

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+840,
		sin(20*(sin(~frame)*0.1+0.1))*4+910),
		sin(100*(cos(~frame)*0.1+0.1))*4+60,
	cos(80*(cos(~frame)*0.1+0.1))*4+60));
};

/////////////////////////////////////////////////////////////////////////////////////
// Bass
/////////////////////////////////////////////////////////////////////////////////////

~u2 = UserView(w, Rect(0, 0, 1920, 1080));
~u2.animate = true;
~u2.frameRate = 60;
~u2.drawFunc = {
~frame= ~u1.frame+40*0.123;

	Pen.scale(~u2rndScale,~u2rndScale);
	Pen.translate(~u2rndTrnslx,~u2rndTrnsly);
	Pen.skew(~rndSkew1,~rndSkew2);

	//Spotlight

	Pen.fillColor = Color(1,1,1,0.15);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*8+850,
		sin(20*(sin(~frame)*0.1+0.1))*8+1200),
		sin(100*(cos(~frame)*0.1+0.1))*4+300,
		cos(80*(cos(~frame)*0.1+0.1))*4+120));
	Pen.fill;

	//Neck

	Pen.rotate(~u2rndRotate);

	Pen.strokeColor = ~strkCol;
	Pen.fillColor = ~rndCol2;

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+290),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: -0.2, x: 930, y: 690); //ROTATE

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+340),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+380),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	//Body1

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+700),
	sin(100*(cos(~frame)*0.1+0.1))*4+130,
	cos(80*(cos(~frame)*0.1+0.1))*16+100));

		Pen.fillColor = Color(0,0.35,0.35);

	Pen.fillRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+580),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+200));

			Pen.fillColor = ~rndCol2;

	//Body2

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+970),
	sin(100*(cos(~frame)*0.1+0.1))*4+200,
	cos(80*(cos(~frame)*0.1+0.1))*16+180));

//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Neck.
	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+930,
		sin(20*(sin(~frame)*0.1+0.1))*4+290),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: -0.2, x: 930, y: 690); //ROTATE

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+340),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+40));

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+1010,
		sin(20*(sin(~frame)*0.1+0.1))*4+380),
	sin(100*(cos(~frame)*0.1+0.1))*4+40,
	cos(80*(cos(~frame)*0.1+0.1))*4+20));

	Pen.rotate(angle: 0.2, x: 930, y: 690); //ROTATE

	Pen.strokeRect(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+950,
		sin(20*(sin(~frame)*0.1+0.1))*4+580),
	sin(100*(cos(~frame)*0.1+0.1))*4+20,
	cos(80*(cos(~frame)*0.1+0.1))*4+200));

	//Body1

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+700),
	sin(100*(cos(~frame)*0.1+0.1))*8+130,
	cos(80*(cos(~frame)*0.1+0.1))*16+100));

	//Body2

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+960,
		sin(20*(sin(~frame)*0.1+0.1))*4+970),
	sin(100*(cos(~frame)*0.1+0.1))*2+200,
	cos(80*(cos(~frame)*0.1+0.1))*16+180));

	//Soundholes.
		Pen.fillColor = ~strkCol;
	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ 180 @
	sin(20*(sin(~frame)*0.1+0.1))*2+880,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+150,
	0.8pi, 0.25pi);

		Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -70 @
	sin(20*(sin(~frame)*0.1+0.1))*2+850,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+150,
	2pi, 0.25pi);

	Pen.fillStroke;


	//Bridge and tailpiece.

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -60 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1100,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+150,
	1.4pi, 0.25pi);
	Pen.stroke;

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -120 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1200,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.4pi, 0.25pi);
	Pen.stroke;

	Pen.fillColor = ~rndCol2;
	Pen.width = ~width3;
	Pen.lineDash=~rndStrk3;
	Pen.addWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -155 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1240,
	sin(100*(cos(~frame)*0.1+0.1))*4+100,
	1.5pi, 0.15pi);
	Pen.fillStroke;

	//Soundholes

	Pen.width = ~width2;
	Pen.lineDash=~rndStrk2;
	Pen.addAnnularWedge(
	sin(40*(sin(~frame)*0.1+0.1))*2+ -120 @
	sin(20*(sin(~frame)*0.1+0.1))*2+1200,
	sin(100*(cos(~frame)*0.1+0.1))*4+170,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.4pi, 0.25pi);
	Pen.fillStroke;

	//String.

	Pen.width = 15;
	Pen.lineDash=~rndStrk1;
	Pen.moveTo(940@310);
	Pen.curveTo(
	Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+990,
		sin(20*(sin(~frame)*0.1+0.1))*4+1050),
	Point(
	sin(200*(cos(~frame)*0.1+0.1))*63+~rndStrCurve1,
			cos(80*(cos(~frame)*0.1+0.1))*8+600),
	Point(
	cos(100*(cos(~frame)*0.1+0.1))*32+~rndStrCurve2,
	sin(80*(cos(~frame)*0.1+0.1))*8+800),
	);

	Pen.stroke;
};

/////////////////////////////////////////////////////////////////////////////////////
//Keys
/////////////////////////////////////////////////////////////////////////////////////

~u3 = UserView(w, Rect(0, 0, 1920, 1080));
~u3.animate = true;
~u3.frameRate = 60;
~u3.drawFunc = {

	~frame= ~u1.frame+40*0.123;

		Pen.translate(0,200);

	//Spotlight

	Pen.scale(~u3rndScale,~u3rndScale);
	Pen.translate(~u3rndTrnslx,~u3rndTrnsly);

	Pen.fillColor = Color(1,1,1,0.15);

	Pen.fillOval(Rect.aboutPoint(Point(
			sin(40*(sin(~frame)*0.1+0.1))*2+500,
		sin(20*(sin(~frame)*0.1+0.1))*2+700),
		sin(100*(cos(~frame)*0.1+0.1))*2+350,
		cos(80*(cos(~frame)*0.1+0.1))*2+200));
	Pen.fill;

	Pen.rotate(~u3rndRotate);
	Pen.skew(~rndSkew2,~rndSkew3);
	Pen.strokeColor = ~strkCol;
	Pen.fillColor = ~rndCol3;


//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//Lid.

	Pen.skew(-1,0);

	Pen.lineDash=~rndStrk1;
	Pen.width = ~width1 / 2;

	Pen.moveTo(cos(80*(cos(~frame)*0.1+0.1))*2+350@cos(80*(cos(~frame)*0.1+0.1))*2+170);
	Pen.curveTo(
	Point(
		sin(40*(cos(~frame)*0.1+0.1))*2+1150,
		cos(20*(cos(~frame)*0.1+0.1))*2+400),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*2+1050,
			cos(80*(cos(~frame)*0.1+0.1))*2+380),
	Point(
	cos(100*(cos(~frame)*0.1+0.1))*2+1200,
	sin(80*(cos(~frame)*0.1+0.1))*2+ 200),
	);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+200@
		cos(80*(cos(~frame)*0.1+0.1))*2+400);

	Pen.lineTo(sin(80*(cos(~frame)*0.1+0.1))*2+260@cos(80*(cos(~frame)*0.1+0.1))*2+150);
	Pen.lineTo(cos(80*(cos(~frame)*0.1+0.1))*2+350@cos(80*(cos(~frame)*0.1+0.1))*2+170);
		Pen.fillStroke;

	Pen.moveTo(sin(100*(cos(~frame)*0.05+0.1))*2+376@cos(80*(cos(~frame)*0.1+0.1))*2+400);

		Pen.lineDash=~rndStrk2;
		Pen.width = ~width2 / 2;

	Pen.curveTo(
	Point(
		sin(40*(sin(~frame)*0.1+0.1))*2+1300,
		sin(20*(sin(~frame)*0.1+0.1))*2+550),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*2+1450,
			cos(80*(cos(~frame)*0.1+0.1))*2+500),
	Point(
	cos(100*(cos(~frame)*0.1+0.1))*2+1100,
	sin(80*(cos(~frame)*0.1+0.1))*2+ 500),
	);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+300@
		sin(80*(cos(~frame)*0.1+0.1))*2+550);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+200@
		cos(80*(cos(~frame)*0.1+0.1))*2+400);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.05+0.1))*2+200@
		cos(80*(cos(~frame)*0.1+0.1))*2+400);

		Pen.fillStroke;
		Pen.lineDash=~rndStrk3;
		Pen.width = ~width3 / 2;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+200@
		cos(80*(cos(~frame)*0.1+0.1))*2+400);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+190@
		cos(80*(cos(~frame)*0.1+0.1))*2+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+170@
		cos(80*(cos(~frame)*0.1+0.1))*2+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+167@
		cos(80*(cos(~frame)*0.1+0.1))*2+470);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+252@
		cos(80*(cos(~frame)*0.1+0.1))*2+615);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+256@
		cos(80*(cos(~frame)*0.1+0.1))*2+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+290@
		cos(80*(cos(~frame)*0.1+0.1))*2+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+300@
		cos(80*(cos(~frame)*0.1+0.1))*2+550);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+256@
		cos(80*(cos(~frame)*0.1+0.1))*2+590);

		Pen.lineDash=~rndStrk2;
		Pen.width = ~width1 / 2;

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+170@
		cos(80*(cos(~frame)*0.1+0.1))*2+450);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+252@
		cos(80*(cos(~frame)*0.1+0.1))*2+615);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+287@
		cos(80*(cos(~frame)*0.1+0.1))*2+615);

		Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+365@
		cos(80*(cos(~frame)*0.1+0.1))*2+610);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+375@
		sin(80*(cos(~frame)*0.1+0.1))*2+550);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+300@
		sin(80*(cos(~frame)*0.1+0.1))*2+550);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+290@
		sin(80*(cos(~frame)*0.1+0.1))*2+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+256@
		sin(80*(cos(~frame)*0.1+0.1))*2+590);

	Pen.fillStroke;

	Pen.width = 15;
		Pen.lineDash= ~randpkeys2;
	Pen.strokeColor= Color.white;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+180@
		cos(80*(cos(~frame)*0.1+0.1))*2+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+265@
		cos(80*(cos(~frame)*0.1+0.1))*2+590);

	Pen.stroke;

	Pen.lineDash= ~randpkeys1;
	Pen.strokeColor= ~strkCol;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+190@
		cos(80*(cos(~frame)*0.1+0.1))*2+450);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+276@
		cos(80*(cos(~frame)*0.1+0.1))*2+590);

	Pen.stroke;

	Pen.strokeColor= ~strkCol;

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width2 / 2;

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*2+167@
		cos(80*(cos(~frame)*0.1+0.1))*2+470);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+150@
		sin(80*(cos(~frame)*0.1+0.1))*2+590);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*2+160@
		cos(80*(cos(~frame)*0.1+0.1))*2+590);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+175@
		cos(80*(cos(~frame)*0.1+0.1))*2+484);

	Pen.fillStroke;

	Pen.width = ~width2 / 2;
	Pen.lineDash=~rndStrk2;

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*2+250@
		cos(80*(cos(~frame)*0.1+0.1))*2+615);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+220@
		cos(80*(cos(~frame)*0.1+0.1))*2+790);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+230@
		cos(80*(sin(~frame)*0.1+0.1))*2+790);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*2+270@
		sin(80*(cos(~frame)*0.1+0.1))*2+615);

	Pen.fillStroke;

	Pen.width = ~width3 / 2;
	Pen.lineDash=~rndStrk1;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+365@
		cos(80*(cos(~frame)*0.1+0.1))*2+611);


	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+345@
		cos(80*(cos(~frame)*0.1+0.1))*2+720);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*2+335@
		cos(80*(cos(~frame)*0.1+0.1))*2+715);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*2+350@
		cos(80*(cos(~frame)*0.1+0.1))*2+611);

	Pen.fillStroke;

};


/////////////////////////////////////////////////////////////////////////////////////
//Drums.
/////////////////////////////////////////////////////////////////////////////////////

~u4 = UserView(w, Rect(0, 0, 1920, 1080));
~u4.animate = true;
~u4.frameRate = 60;
~u4.drawFunc = {

	~frame= ~u1.frame+40*0.123;

Pen.use {
	Pen.strokeColor = ~strkCol;
	Pen.translate(~u4rndTrnslx,~u4rndTrnsly);

	Pen.fillColor = Color(1,1,1,0.15);

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*8+400,
		sin(20*(sin(~frame)*0.1+0.1))*8+480),
		sin(100*(cos(~frame)*0.1+0.1))*4+350,
		cos(80*(cos(~frame)*0.1+0.1))*4+160));
	Pen.fill;

	Pen.fillColor = ~rndCol4;
	Pen.rotate(~u4rndRotate);
	Pen.skew(~rndSkew1,~rndSkew3);
	Pen.scale(~u4rndScale,~u4rndScale);

//////////////////////////////////////////////////////////////////////////////////////Strokes.

	//BD Feet

	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+ -10 @
		sin(20*(sin(~frame)*0.1+0.1))*2+550,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.2pi, 0.15pi);

	Pen.width = ~width1;
	Pen.lineDash=~rndStrk1;
	Pen.addWedge(
		sin(40*(sin(~frame)*0.1+0.1))*2+ -90 @
		sin(20*(sin(~frame)*0.1+0.1))*2+560,
		sin(100*(cos(~frame)*0.1+0.1))*4+50,
	1.7pi, 0.15pi);

	Pen.fillStroke;

	//BigTom

    Pen.translate(10,-50);

	Pen.lineDash=~rndStrk2;
	Pen.width = ~width1;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -18@
		cos(80*(cos(~frame)*0.1+0.1))*4+410);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -65@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 600);

	Pen.curveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -102@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 600,
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 260,
	cos(80*(cos(~frame)*0.1+0.1))*2+620),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 260,
	cos(80*(cos(~frame)*0.1+0.1))*2+620));

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ -58@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 410);

	Pen.fillStroke;

	Pen.width = ~width2;

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+260,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
	sin(100*(cos(~frame)*0.1+0.1))*16+80,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+260,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
	sin(100*(cos(~frame)*0.1+0.1))*16+80,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	//Snare

		Pen.lineDash=~rndStrk1;
	Pen.width = ~width3;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 65@
		cos(80*(cos(~frame)*0.1+0.1))*4+380);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 40@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 480);

	Pen.curveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 30@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 400,
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 500,
	cos(80*(cos(~frame)*0.1+0.1))*2+540),
	Point(
	sin(100*(cos(~frame)*0.1+0.1))*16+ 500,
	cos(80*(cos(~frame)*0.1+0.1))*2+520));

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 18@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 410);

	Pen.fillStroke;

	Pen.width = ~width2;

	Pen.rotate(1.95pi,500,380);

	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+500,
		sin(20*(sin(~frame)*0.1+0.1))*4+400),
	sin(100*(cos(~frame)*0.1+0.1))*16+140,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+500,
		sin(20*(sin(~frame)*0.1+0.1))*4+400),
	sin(100*(cos(~frame)*0.1+0.1))*16+140,
	cos(80*(cos(~frame)*0.1+0.1))*2+10));

	Pen.rotate(-1.95pi,500,380);

    Pen.translate(-10,50);

	//BassDrum

	Pen.lineDash=~rndStrk3;
	Pen.width = ~width2;
	Pen.fillOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+440,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
		sin(100*(cos(~frame)*0.1+0.1))*4+120,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.strokeColor = ~strkCol;
	Pen.lineDash=~rndStrk2;
	Pen.width = ~width3;
	Pen.strokeOval(Rect.aboutPoint(Point(
		sin(40*(sin(~frame)*0.1+0.1))*4+440,
		sin(20*(sin(~frame)*0.1+0.1))*4+410),
		sin(100*(cos(~frame)*0.1+0.1))*4+120,
	cos(80*(cos(~frame)*0.1+0.1))*4+120));

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 90@
		sin(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 33@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 13@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 33@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 40@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.stroke;

	Pen.moveTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 90@
		sin(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 50@
		sin(80*(cos(~frame)*0.15+0.1))*6+ 290);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 95@
		sin(80*(cos(~frame)*0.1+0.1))*4+ 270);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 55@
		sin(80*(cos(~frame)*0.1+0.1))*8+ 280);

	Pen.lineTo(
		cos(100*(cos(~frame)*0.1+0.1))*4+ 90@
		sin(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.fillStroke;

	Pen.scale(1.2,1.2);

	Pen.translate(-400,-50);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 90@
		cos(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 33@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 13@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 33@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 520);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 40@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 540);

	Pen.stroke;

	Pen.moveTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 90@
		cos(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 35@
		sin(80*(cos(~frame)*0.2+0.2))*8+ 290);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 95@
		cos(80*(cos(~frame)*0.1+0.1))*4+ 270);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 55@
		sin(80*(cos(~frame)*0.2+0.1))*8+ 280);

	Pen.lineTo(
		sin(100*(cos(~frame)*0.1+0.1))*4+ 90@
		cos(80*(cos(~frame)*0.1+0.1))*4+290);

	Pen.fillStroke;

	};
					//Notes.

	Pen.use {

			Pen.translate(~trnslx1,~trnsly1);
			Pen.rotate(~rndSkew4, 800,300);
			Pen.lineDash = ~rndStrk1;
			Pen.width = ~width1;
			Pen.strokeColor = ~strkCol;
			Pen.fillColor = Color(0.9,0.8,0.8);
			Pen.moveTo(Point(700,500));
			Pen.lineTo(Point(730,550));
			Pen.lineTo(Point(800,530));
			Pen.lineTo(Point(810,500));
			Pen.lineTo(Point(820,280));
			Pen.lineTo(Point(860,280));
			Pen.lineTo(Point(900,240));
			Pen.lineTo(Point(820,240));
			Pen.lineTo(Point(780,480));
			Pen.lineTo(Point(740,480));
			Pen.lineTo(Point(700,500));
			Pen.lineTo(Point(700,500));
			Pen.fillStroke;

};

		Pen.translate(0,200);

	Pen.use {

			Pen.translate(~trnslx2,~trnsly2);
			Pen.rotate(~rndSkew5, 800,300);
			Pen.lineDash = ~rndStrk2;
			Pen.width = ~width1;
			Pen.strokeColor = ~strkCol;
			Pen.fillColor = Color(0.9,0.8,0.8);
			Pen.moveTo(Point(800,500));
			Pen.lineTo(Point(830,550));
			Pen.lineTo(Point(900,530));
			Pen.lineTo(Point(910,500));
			Pen.lineTo(Point(920,280));
			Pen.lineTo(Point(960,280));
			Pen.lineTo(Point(1000,240));
			Pen.lineTo(Point(920,240));
			Pen.lineTo(Point(880,480));
			Pen.lineTo(Point(840,480));
			Pen.lineTo(Point(800,500));
			Pen.lineTo(Point(800,500));
			Pen.fillStroke;

};

		Pen.translate(100,000);

			Pen.use {

			Pen.translate(~trnslx1);
			Pen.rotate(~rndSkew6, 800,300);
			Pen.lineDash = ~rndStrk3;
			Pen.width = ~width1;
			Pen.strokeColor = ~strkCol;
			Pen.fillColor = Color(0.9,0.8,0.8);
			Pen.moveTo(Point(800,500));
			Pen.lineTo(Point(830,550));
			Pen.lineTo(Point(900,530));
			Pen.lineTo(Point(910,500));
			Pen.lineTo(Point(920,280));
			Pen.lineTo(Point(960,280));
			Pen.lineTo(Point(1000,240));
			Pen.lineTo(Point(920,240));
			Pen.lineTo(Point(880,480));
			Pen.lineTo(Point(840,480));
			Pen.lineTo(Point(800,500));
			Pen.lineTo(Point(800,500));
			Pen.fillStroke;

};

	};
	};
);

(
/////////////////////////////////////////////////////////////////////////////////////
// Black scene. (useful for development)
/////////////////////////////////////////////////////////////////////////////////////
~sceneBlack.value;
~sceneBlack =
{
if(~u1.isNil,{ nil },   {~u1.close });
if(~u2.isNil,{ nil },   {~u2.close });
if(~u3.isNil,{ nil },   {~u3.close });
if(~u4.isNil,{ nil },   {~u4.close });
~u1 = UserView(w, Rect(0, 0, 1920, 1080));
~u1.animate = false;
~u1.frameRate = 60;
~u1.background = Color();
		};
);
);


/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
// Song Sequence.
/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////
// Music sequence
/////////////////////////////////////////////////////////////////////////////////////

(
Pseq([~melody1,~melody2a,~melody2c,~melody2b,~melody3,~melody3],inf).play(quant:1/8);
Pseq([~keys1,~keys1,~keys2,~keys2,~keys1,~keys2,~keys2],inf).play(quant:1/8);
~bass.play(quant:1/8);
Pseq([~rideIntro,~rideIntro,~ride2,~ride2,~ride1,~ride2,~ride1],inf).play(quant:1/8);
Pseq([~hatIntro, ~hatIntro,~hat,~hat,~hat,~hat,~hat],inf).play(quant:1/8);
Pseq([~crashIntro, ~crashIntro,~crash,~crash,~crash,~crash,~crash],inf).play(quant:1/8);
Pseq([~kickIntro, ~kickIntro,~kick,~kick,~kick,~kick,~kick],inf).play(quant:1/8);
Pseq([~snareIntro, ~snareIntro,~snare,~snare,~snare,~snare,~snare],inf).play(quant:1/8);
);

/////////////////////////////////////////////////////////////////////////////////////
// Visual main patterns.
/////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////
// Intro / Main theme.
/////////////////////////////////////////////////////////////////////////////////////

~whole=1.0;
~wholeAndHalf=1.5;
~half=0.5;
~quarter= 0.25;
~eight=0.125;
~threeeights=0.375;
~threequarts=0.75;
~fiveeights=0.625;
~fivequarts=1.25;
~visIntro = Routine({
    loop {

		// Theme 1st cycle.

		{~scene1a.(w)}.defer;
		~half.wait;
		{~scene1a.(w)}.defer;
		~half.wait;
		{~scene1a.(w)}.defer;
		~half.wait;
		{~scene1a.(w)}.defer;
		~half.wait;

		{~scene2.(w)}.defer;
		~quarter.wait;
		{~scene2.(w)}.defer;
		~quarter.wait;
		{~scene2.(w)}.defer;
		~quarter.wait;
		{~scene2.(w)}.defer;
		~quarter.wait;

		{~scene3.(w)}.defer;
		~half.wait;
		{~scene4.(w)}.defer;
		~half.wait;

		{~scene7a.(w)}.defer;
		~wholeAndHalf.wait;

		{~scene7b.value.(w)}.defer;
		~half.wait;

		{~scene2.(w)}.defer;
		~quarter.wait;
		{~scene2.(w)}.defer;
		~quarter.wait;
		{~scene2.(w)}.defer;
		~quarter.wait;
		{~scene2.(w)}.defer;
		~quarter.wait;

		{~scene5d.(w)}.defer;
		~quarter.wait;
		{~scene5b.(w)}.defer;
		~quarter.wait;
		{~scene5d.(w)}.defer;
		~quarter.wait;
		{~scene5b.(w)}.defer;
		~quarter.wait;

		{~scene6b.(w)}.defer;
		~quarter.wait;
		{~scene6b.(w)}.defer;
		~quarter.wait;
		{~scene5b.(w)}.defer;
		~quarter.wait;
		{~scene5b.(w)}.defer;
		~quarter.wait;

		{~scene5d.(w)}.defer;
		~quarter.wait;
		{~scene5b.(w)}.defer;
		~quarter.wait;
		{~scene5d.(w)}.defer;
		~quarter.wait;
		{~scene5b.(w)}.defer;
		~quarter.wait;

		{~scene6b.(w)}.defer;
		~quarter.wait;
		{~scene6b.(w)}.defer;
		~quarter.wait;
		{~scene5b.(w)}.defer;
		~quarter.wait;
		{~scene5b.(w)}.defer;
		~quarter.wait;

		{~scene7b.(w)}.defer;
		~quarter.wait;
		{~scene5b.(w)}.defer;
		~quarter.wait;
		{~scene7b.(w)}.defer;
		~quarter.wait;
		{~scene5b.(w)}.defer;
		~quarter.wait;

		{~scene7b.(w)}.defer;
		~quarter.wait;
		{~scene7b.(w)}.defer;
		~quarter.wait;
		{~scene7b.(w)}.defer;
		~quarter.wait;
		{~scene5b.(w)}.defer;
		~quarter.wait;

		{~scene7b.(w)}.defer;
		~quarter.wait;
		{~scene5b.(w)}.defer;
		~quarter.wait;
		{~scene7b.(w)}.defer;
		~quarter.wait;
		{~scene5b.(w)}.defer;
		~quarter.wait;

		{~scene7c.value.(w)}.defer;
		~whole.wait;

		{~scene5c.(w)}.defer;
		~half.wait;
		{~scene5c2.(w)}.defer;
		~half.wait;

		// Theme 2 cycle.

		{~scene1b.(w)}.defer;
		~half.wait;
		{~scene1b.(w)}.defer;
		~half.wait;
		{~scene1b.(w)}.defer;
		~half.wait;
		{~scene1b.(w)}.defer;
		~half.wait;

		{~scene2b.(w)}.defer;
		~quarter.wait;
		{~scene2b.(w)}.defer;
		~quarter.wait;
		{~scene2b.(w)}.defer;
		~quarter.wait;
		{~scene2b.(w)}.defer;
		~quarter.wait;

		{~scene6a.(w)}.defer;
		~half.wait;
		{~scene4.(w)}.defer;
		~half.wait;

		{~scene1c.(w)}.defer;
		~half.wait;
		{~scene1c.(w)}.defer;
		~half.wait;
		{~scene1c.(w)}.defer;
		~half.wait;
		{~scene1c.(w)}.defer;
		~half.wait;

		{~scene2.(w)}.defer;
		~quarter.wait;
		{~scene2.(w)}.defer;
		~quarter.wait;
		{~scene2.(w)}.defer;
		~quarter.wait;
		{~scene2.(w)}.defer;
		~quarter.wait;

		{~scene5d.(w)}.defer;
		~quarter.wait;
		{~scene5b.(w)}.defer;
		~quarter.wait;
		{~scene5d.(w)}.defer;
		~quarter.wait;
		{~scene5b.(w)}.defer;
		~quarter.wait;

		{~scene6b.(w)}.defer;
		~quarter.wait;
		{~scene6b.(w)}.defer;
		~quarter.wait;
		{~scene5b.(w)}.defer;
		~quarter.wait;
		{~scene5b.(w)}.defer;
		~quarter.wait;

		{~scene5d.(w)}.defer;
		~quarter.wait;
		{~scene5b.(w)}.defer;
		~quarter.wait;
		{~scene5d.(w)}.defer;
		~quarter.wait;
		{~scene5b.(w)}.defer;
		~quarter.wait;

		{~scene6b.(w)}.defer;
		~quarter.wait;
		{~scene6b.(w)}.defer;
		~quarter.wait;
		{~scene5b.(w)}.defer;
		~quarter.wait;
		{~scene5b.(w)}.defer;
		~quarter.wait;

		{~scene7b.(w)}.defer;
		~quarter.wait;
		{~scene5b.(w)}.defer;
		~quarter.wait;
		{~scene7b.(w)}.defer;
		~quarter.wait;
		{~scene5b.(w)}.defer;
		~quarter.wait;

		{~scene7b.(w)}.defer;
		~quarter.wait;
		{~scene7b.(w)}.defer;
		~quarter.wait;
		{~scene7b.(w)}.defer;
		~quarter.wait;
		{~scene5b.(w)}.defer;
		~quarter.wait;

		{~scene7b.(w)}.defer;
		~quarter.wait;
		{~scene5b.(w)}.defer;
		~quarter.wait;
		{~scene7b.(w)}.defer;
		~quarter.wait;
		{~scene5b.(w)}.defer;
		~quarter.wait;

		{~scene7d.(w)}.defer;
		~whole.wait;

		{~scene5c.(w)}.defer;
		~half.wait;
		{~scene5c2.(w)}.defer;
		~half.wait;
    };
});

/////////////////////////////////////////////////////////////////////////////////////
// Sax Solo
/////////////////////////////////////////////////////////////////////////////////////

(
~visSax1 = Routine({
    loop {

		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;

		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;

		{~scene8a.(w)}.defer;
		~half.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~half.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;

		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~half.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;

		{~scene8a.(w)}.defer;
		~half.wait;
		{~scene8a.(w)}.defer;
		~half.wait;
		{~scene8a.(w)}.defer;
		~half.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;

		{~scene8a.(w)}.defer;
		~half.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;

		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~half.wait;
		{~scene8a.(w)}.defer;
		~half.wait;

		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;

		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;

		{~scene8a.(w)}.defer;
		~half.wait;
		{~scene8a.(w)}.defer;
		~half.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~half.wait;

		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~half.wait;
		{~scene8a.(w)}.defer;
		~half.wait;

		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~half.wait;

		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		{~scene8a.(w)}.defer;
		~half.wait;
		{~scene8a.(w)}.defer;
		~half.wait;

		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;

		{~scene8a.(w)}.defer;
		~half.wait;
		{~scene8a.(w)}.defer;
		~half.wait;
		{~scene8a.(w)}.defer;
		~half.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;

		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
    };
});
);

(
~visSax2 = Routine({
    loop {

		{~scene8b.(w)}.defer;
		~half.wait;
		{~scene8b.(w)}.defer;
		~half.wait;
		{~scene8b.(w)}.defer;
		~half.wait;
		{~scene8b.(w)}.defer;
		~half.wait;

		{~scene8b.(w)}.defer;
		~half.wait;
		{~scene8b.(w)}.defer;
		~half.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;

		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;

		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;

		{~scene8b.(w)}.defer;
		~half.wait;
		{~scene8b.(w)}.defer;
		~half.wait;
		{~scene8b.(w)}.defer;
		~half.wait;
		{~scene8b.(w)}.defer;
		~half.wait;

		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;

		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~half.wait;
		{~scene8b.(w)}.defer;
		~half.wait;

		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~half.wait;
		{~scene8b.(w)}.defer;
		~half.wait;

		{~scene8b.(w)}.defer;
		~half.wait;
		{~scene8b.(w)}.defer;
		~half.wait;
		{~scene8b.(w)}.defer;
		~half.wait;
		{~scene8b.(w)}.defer;
		~half.wait;


		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~half.wait;
		{~scene8b.(w)}.defer;
		~half.wait;

		{~scene8b.(w)}.defer;
		~half.wait;
		{~scene8b.(w)}.defer;
		~half.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;

		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;

		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~half.wait;
		{~scene8b.(w)}.defer;
		~half.wait;

		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;

		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;

		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8a.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~half.wait;
		{~scene8b.(w)}.defer;
		~half.wait;
    };
});
);

(
~visSax3 = Routine({
    loop {

		{~scene8b.(w)}.defer;
		~half.wait;
		{~scene8b.(w)}.defer;
		~half.wait;
		{~scene8b.(w)}.defer;
		~half.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;

		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		{~scene8b.(w)}.defer;
		~half.wait;
		{~scene8b.(w)}.defer;
		~half.wait;

		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~half.wait;
		{~scene8b.(w)}.defer;
		~half.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;

		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;

		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~half.wait;
		{~scene8b.(w)}.defer;
		~half.wait;

		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;

		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;

		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~half.wait;
		{~scene8b.(w)}.defer;
		~half.wait;

		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~half.wait;
		{~scene8b.(w)}.defer;
		~half.wait;

		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;

		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;

		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~half.wait;
		{~scene8b.(w)}.defer;
		~half.wait;

		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;

		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~half.wait;
		{~scene8b.(w)}.defer;
		~half.wait;

		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;

		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
		{~scene8b.(w)}.defer;
		~quarter.wait;
    };
});
);

/////////////////////////////////////////////////////////////////////////////////////
// Piano solo
/////////////////////////////////////////////////////////////////////////////////////

(
~visPiano1 = Routine({
    loop {

		{~scene9a.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9a.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9a.(w)}.defer;
		~quarter.wait;
		{~scene9b.value.(w)}.defer;
		~quarter.wait;
		{~scene9a.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;

		{~scene9a.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9a.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9a.(w)}.defer;
		~quarter.wait;
		{~scene9b.value.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;

		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~half.wait;
		{~scene9b.value.(w)}.defer;
		~half.wait;

		{~scene9b.(w)}.defer;
		~half.wait;
		{~scene9b.value.(w)}.defer;
		~half.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;

		{~scene9b.(w)}.defer;
		~half.wait;
		{~scene9b.value.(w)}.defer;
		~half.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~half.wait;

		{~scene9a.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9a.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9a.(w)}.defer;
		~quarter.wait;
		{~scene9b.value.(w)}.defer;
		~quarter.wait;
		{~scene9a.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;

		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~half.wait;
		{~scene9b.(w)}.defer;
		~half.wait;

		{~scene9b.(w)}.defer;
		~half.wait;
		{~scene9b.(w)}.defer;
		~half.wait;
		{~scene9a.(w)}.defer;
		~quarter.wait;
		{~scene9a.value.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;

		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~half.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;

		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~half.wait;
		{~scene9b.(w)}.defer;
		~half.wait;

		{~scene9b.(w)}.defer;
		~half.wait;
		{~scene9b.(w)}.defer;
		~half.wait;
		{~scene9a.(w)}.defer;
		~quarter.wait;
		{~scene9b.value.(w)}.defer;
		~quarter.wait;
		{~scene9a.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;

		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~half.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;

		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.value.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;

		{~scene9a.(w)}.defer;
		~quarter.wait;
		{~scene9a.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~half.wait;
		{~scene9a.(w)}.defer;
		~quarter.wait;
		{~scene9a.value.(w)}.defer;
		~quarter.wait;
		{~scene9a.(w)}.defer;
		~quarter.wait;
		{~scene9a.(w)}.defer;
		~quarter.wait;

		{~scene9a.(w)}.defer;
		~quarter.wait;
		{~scene9a.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~half.wait;
		{~scene9b.(w)}.defer;
		~half.wait;
		{~scene9a.(w)}.defer;
		~quarter.wait;
		{~scene9a.(w)}.defer;
		~quarter.wait;

		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~half.wait;
		{~scene9b.(w)}.defer;
		~half.wait;
    };
});
);

(
~visPiano2 = Routine({
    loop {

		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.value.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;

		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.value.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;

		{~scene9b.(w)}.defer;
		~half.wait;
		{~scene9b.(w)}.defer;
		~half.wait;
		{~scene9b.(w)}.defer;
		~half.wait;
		{~scene9b.(w)}.defer;
		~half.wait;
		{~scene9b.(w)}.defer;
		~half.wait;
		{~scene9b.(w)}.defer;
		~half.wait;


		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.value.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;

		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.value.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;

		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~half.wait;
		{~scene9b.(w)}.defer;
		~half.wait;


		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~half.wait;
		{~scene9b.(w)}.defer;
		~half.wait;

		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.value.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;

		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.value.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;

		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.value.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;

		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.value.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;

		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~half.wait;
		{~scene9b.(w)}.defer;
		~half.wait;

		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~half.wait;
		{~scene9b.(w)}.defer;
		~half.wait;

		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.value.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;

		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.value.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;

		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.value.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
		{~scene9b.(w)}.defer;
		~quarter.wait;
    };
});
);

/////////////////////////////////////////////////////////////////////////////////////
// Visuals main sequence
/////////////////////////////////////////////////////////////////////////////////////
(
~visuals = Routine ({
	loop {
	~visPiano2.stop;
	~visIntro.reset;
	~visIntro.play(quant:1/8);
	32.wait;
	~visIntro.stop;
	~visSax1.reset;
	~visSax1.play(quant:1/8);
	16.wait;
	~visSax1.stop;
	~visSax2.reset;
	~visSax2.play(quant:1/8);
	16.wait;
	~visSax2.stop;
	~visSax3.reset;
	~visSax3.play(quant:1/8);
	16.wait;
	~visSax3.stop;
	~visPiano1.reset;
	~visPiano1.play(quant:1/8);
	16.wait;
	~visPiano1.stop;
	~visPiano2.reset;
	~visPiano2.play(quant:1/8);
	16.wait;
	};
}).play(quant: [0.3, 0, 0.3]);
);

)
Author
393 PM
  • Platform:
  • Category: Composition Video
  • Revision: 1.31
  • License: Academic Free License v3.0
  • Views: 668
  • Modified: 2 months ago
Chat about this patch on Discord!
Appreciate 1

Leave a Reply