How to better write jean claude risset/karlheinz stockhausen style code

how to better write jean claude risset/karlheinz stockhausen style code

/*
author: Tiago Morais Morgado
language: sc3.13
date: 28-1-23
*/

// Strukture Generator - WIP sound for kodenaam piece "kataclismo metastásico"

s.options.memSize=2**20; s.reboot;

(
~meinenKloud={Mix.fill(16,{
	var mouseATrig=MouseX.kr(0.1,100); var mouseBTrig=MouseY.kr(0.1,100);
	var mouseADur=MouseX.kr(0.1,10); var mouseBDur=MouseY.kr(0.1,10);
	var mouseAFreq=MouseX.kr(0.1,10); var mouseBFreq=MouseY.kr(0.1,10);

	var num1=3.14; var num2=3.14*0.5;

	var loNum=0.125; var hiNum=8;

	var tendencyMask1=XLine.kr(start:0.5,end:50,dur:300,mul:1,doneAction:2);
	var tendencyMask2=XLine.kr(start:0.25,end:25,dur:600,mul:1);
	var tendencyMask3=XLine.kr(start:0.125,end:12.5,dur:900,mul:1);

	var modRate1=TRand.kr(lo:num2,hi:num1,trig:Impulse.kr(freq:TRand.kr(lo:num2,hi:num1,trig:Impulse.kr(num2))));
	var modRate2=TRand.kr(lo:num2,hi:num1,trig:Impulse.kr(freq:TRand.kr(lo:num2,hi:num1,trig:Impulse.kr(num2))));
	var modRate3=TRand.kr(lo:num2,hi:num1,trig:Impulse.kr(freq:TRand.kr(lo:num2,hi:num1,trig:Impulse.kr(num2))));

	var lo1TM=loNum*tendencyMask1; var lo2TM=loNum*tendencyMask2; var lo3TM=loNum*tendencyMask3;
	var hi1TM=loNum*tendencyMask1; var hi2TM=loNum*tendencyMask2; var hi3TM=loNum*tendencyMask3;
	var mrTM1=modRate1*tendencyMask1; var mrTM2=modRate2*tendencyMask2; var mrTM3=modRate3*tendencyMask3;

	var mod1_1=TRand.kr(lo:lo1TM,hi:hi1TM,trig:Impulse.kr(freq:mrTM1));
	var mod2_1=TRand.kr(lo:lo2TM,hi:hi2TM,trig:Impulse.kr(freq:mrTM2));
	var mod3_1=TRand.kr(lo:lo3TM,hi:hi3TM,trig:Impulse.kr(freq:mrTM3));

	var mod1_2=TRand.kr(lo:lo1TM,hi:hi1TM,trig:Impulse.kr(freq:mrTM1));
	var mod2_2=TRand.kr(lo:lo2TM,hi:hi2TM,trig:Impulse.kr(freq:mrTM2));
	var mod3_2=TRand.kr(lo:lo3TM,hi:hi3TM,trig:Impulse.kr(freq:mrTM3));

	var dur1=rrand(0.25,4)*mod1_1*[mouseADur,mouseBDur].choose;
	var triggerRate1=rrand(0.25,4)*mod1_2*[mouseATrig,mouseBTrig].choose;

	var dur2=rrand(0.25,4)*mod2_1*[mouseADur,mouseBDur].choose;
	var triggerRate2=rrand(0.25,4)*mod2_2*[mouseATrig,mouseBTrig].choose;

	var dur3=rrand(0.25,4)*mod3_1*[mouseADur,mouseBDur].choose;
	var triggerRate3=rrand(0.25,4)*mod3_2*[mouseATrig,mouseBTrig].choose;

	var freqMulMouse1=[mouseAFreq,mouseBFreq].choose;
	var freqMulMouse2=[mouseAFreq,mouseBFreq].choose;
	var freqMulMouse3=[mouseAFreq,mouseBFreq].choose;

	var sig1 = GrainFM.ar(
		numChannels: 2,
		trigger: Impulse.ar(freq:triggerRate1),
		dur:dur1,
		carfreq:TRand.ar(lo:2200*freqMulMouse1,hi:8800*freqMulMouse1,
			trig:Impulse.ar(freq:triggerRate1))+[0,rrand(-1,1)],
		modfreq:TRand.ar(lo:2200*freqMulMouse1,hi:8800*freqMulMouse1,
			trig:Impulse.ar(freq:triggerRate1))+[0,rrand(-1,1)],
		index: 1,
		pan: WhiteNoise.ar(amp:0.6),
		envbufnum:-1,
		maxGrains: 2,
		mul:0.1);

	var sig2 = GrainFM.ar(
		numChannels: 2,
		trigger: Impulse.ar(freq:triggerRate2),
		dur:dur2,
		carfreq:TRand.ar(lo:220*freqMulMouse2,hi:880*freqMulMouse2,
			trig:Impulse.ar(freq:triggerRate2))+[0,rrand(-1,1)],
		modfreq:TRand.ar(lo:220*freqMulMouse2,hi:880*freqMulMouse2,
			trig:Impulse.ar(freq:triggerRate2))+[0,rrand(-1,1)],
		index: 1,
		pan: WhiteNoise.ar(amp:0.6),
		envbufnum:-1,
		maxGrains: 2,
		mul:0.1);

	var sig3 = GrainFM.ar(
		numChannels: 2,
		trigger: Impulse.ar(freq:triggerRate3),
		dur:dur3*mod3_1,
		carfreq:TRand.ar(lo:22*freqMulMouse3,hi:88*freqMulMouse3,
			trig:Impulse.ar(freq:triggerRate3))+[0,rrand(-1,1)],
		modfreq:TRand.ar(lo:22*freqMulMouse3,hi:88*freqMulMouse3,
			trig:Impulse.ar(freq:triggerRate3))+[0,rrand(-1,1)],
		index: 1,
		pan: WhiteNoise.ar(0.6),
		envbufnum:-1,
		maxGrains: 2,
		mul:0.1);

	var dry = sig1+sig2+sig3;
	var rev = FreeVerb.ar(in:dry);
	var del = CombC.ar(in:dry);
	var out = del+rev+dry;
	out = out * 0.3;
	out;
})}.play;
)
))
1 Like

Definitely use SynthDef so the Ugen graph function is compiled. This looks like it could be three Synths with the same Ugen graph function instead of one Synth running three of the same process.

Then make other Synths for your effects and use busses to route them.

**EDIT: you might also want to make a control bus for your mouse as well.

https://doc.sccode.org/Classes/SynthDef.html

https://doc.sccode.org/Tutorials/Getting-Started/11-Busses.html