From 64cd74eee3f4664c7b74e3e87f3667c54718278e Mon Sep 17 00:00:00 2001 From: Eugene Petkevich Date: Mon, 29 Jan 2024 20:14:13 +0100 Subject: [PATCH] livecoding experiments with behringer controller and splitter --- extensions/classes/patutils.sc | 2 +- ...1\213\320\262\321\203\320\264\321\217.scd" | 369 ++++++++++++++++++ 2 files changed, 370 insertions(+), 1 deletion(-) create mode 100644 "\320\232\320\260/\320\232\320\260\320\277\320\265\321\206 35.5.2.7 2024-01-29 \342\213\206 \323\240\321\213\320\262\321\203\320\264\321\217 \342\213\206 \321\201 \324\202\320\270\321\237\321\203\321\202\321\203/\323\240\321\213\320\262\321\203\320\264\321\217.scd" diff --git a/extensions/classes/patutils.sc b/extensions/classes/patutils.sc index 6eec0d4..3c893d4 100644 --- a/extensions/classes/patutils.sc +++ b/extensions/classes/patutils.sc @@ -1,5 +1,5 @@ + Pdefn { - swap {|newPattern| + swap {|newPattern=\fbs| var tempSource, keyName; keyName = (\Pdefn++this.key).asSymbol; if(newPattern.isNil) { diff --git "a/\320\232\320\260/\320\232\320\260\320\277\320\265\321\206 35.5.2.7 2024-01-29 \342\213\206 \323\240\321\213\320\262\321\203\320\264\321\217 \342\213\206 \321\201 \324\202\320\270\321\237\321\203\321\202\321\203/\323\240\321\213\320\262\321\203\320\264\321\217.scd" "b/\320\232\320\260/\320\232\320\260\320\277\320\265\321\206 35.5.2.7 2024-01-29 \342\213\206 \323\240\321\213\320\262\321\203\320\264\321\217 \342\213\206 \321\201 \324\202\320\270\321\237\321\203\321\202\321\203/\323\240\321\213\320\262\321\203\320\264\321\217.scd" new file mode 100644 index 0000000..ff2e0a2 --- /dev/null +++ "b/\320\232\320\260/\320\232\320\260\320\277\320\265\321\206 35.5.2.7 2024-01-29 \342\213\206 \323\240\321\213\320\262\321\203\320\264\321\217 \342\213\206 \321\201 \324\202\320\270\321\237\321\203\321\202\321\203/\323\240\321\213\320\262\321\203\320\264\321\217.scd" @@ -0,0 +1,369 @@ +~midiup.(); + +~dijutu = MidiBcr(false, \dijutu); + +History.clear.end; +History.start; + +( +s.recorder.filePrefix = "Ӡывудя_main_"; +s.record(bus: ~mainBus); + +~r = Recorder(s); +~r.filePrefix = "Ӡывудя_master_"; +~r.record(bus: a.h); +) + +( +s.stopRecording; +~r.stopRecording; +) + +( +~createGroupsBusses = { + ~instrumentGroup = Group(s); + ~effectGroup = Group.after(~instrumentGroup); + ~masterGroup = Group.after(~effectGroup); + + ~helagijoGroup = Group.tail(~instrumentGroup); + + ~reverbSynths = Array(~reverbNames.size); + ~reverbBusses = Array(~reverbNames.size); + ~reverbNames.do{|item| + ~reverbBusses = ~reverbBusses.add(Bus.audio(s, 2)); + ~reverbSynths = ~reverbSynths.add(Synth(item, [ + in: ~reverbBusses.last, + out: ~mainBus, + ], ~effectGroup, \addToTail)); + }; + + ~mainBus = Bus.audio(s, 2); + ~masterer = Synth(\masterer, ( + in: ~mainBus, + out: a.h, + amp: -60.dbamp, + lookAheadTime: 0.05, + ).asPairs, ~masterGroup); +}; +ServerTree.removeAll; +ServerTree.add(~createGroupsBusses); +) + +// finishing + +History.end; +History.saveCS(PathName(thisProcess.nowExecutingPath).parentPath+/+"history-cs.scd"); +History.saveStory(PathName(thisProcess.nowExecutingPath).parentPath+/+"history-story.scd"); + +// + +( +SynthDef(\lajyfika, { arg + out=0, + amp=1, + relAmp=1, // for controlling volume of a set of synths + pan=0, + t_trig=1, + gate=1, + freq=440, + freqStart=440, + freqEnd=440,doneAction=2, cut=800, rez=0.8, + modFreq=3, modAmp=0.01, release=1.0 + ; + var sig = 0; + var panDelay = 0.005; + var modFreqMul = SinOsc.kr(modFreq, 0, modAmp, 1); + var curFreq = EnvGen.ar(Env([freqStart, freq, freqEnd], [0.01, release], \exp, 1), gate); + sig = sig + Pulse.ar(curFreq * modFreqMul); + //sig = (sig*11.2).fold(-1, 1); + sig = RLPF.ar(sig, cut, rez); + sig = sig * EnvGen.ar(Env.asr(releaseTime: release), gate, doneAction: doneAction); + sig = Pan2.ar(sig, pan); + sig = [DelayN.ar(sig[0], panDelay, (panDelay*pan).clip(0, 1)), DelayN.ar(sig[1], panDelay, (panDelay.neg*pan).clip(0, 1))]; + Out.ar(out, sig * amp * relAmp); +}).add; +) + +( +~synthGen = {|n=25, prefix=\fokyxiqa, numHarm = 13| + var synthNames = Array(n); + n.do{|i| + var synthName = (prefix ++ i.asString).asSymbol; + synthNames = synthNames.add(synthName); + SynthDef(synthName, {| + freq = 440, + attack = 0.01, + release = 1.0, + distort = 0.0, + detuneMax = 0.15 + lowHarm = 2, + highHarm = 41, + harmMul = 1.3, + harmLen = 1.0, + amp = 1, + pan = 0, + out = 0 + | + var sig; + var partial, detune, distortMul, ampEnv; + detune = Rand(detuneMax.neg, detuneMax).midiratio; + sig = SinOsc.ar(freq * detune, 2pi.rand); + ampEnv = EnvGen.kr(Env.perc(attack, release), doneAction: 2); + sig = sig * ampEnv; + numHarm.do({ + var pfact = IRand(lowHarm, highHarm); + detune = Rand(detuneMax.neg, detuneMax).midiratio; + partial = SinOsc.ar(freq * detune * pfact, 2pi.rand); + partial = partial * EnvGen.kr( + Env.perc(attack, release), + levelScale: pfact.reciprocal * harmMul.rand, + timeScale: harmLen.rand * pfact.reciprocal, + ); + sig = sig + partial; + }); + distortMul = 1 + (distort * ampEnv); + sig = (sig * distortMul).clip(-2, 2); + sig = HPF.ar(sig, 20); + sig = LPF.ar(sig, 16000); + sig = Pan2.ar(sig, pan, amp); + Out.ar(out, sig); + }).add; + }; + synthNames; +}; + +~reverbGen = {|n=15, prefix=\fokyxiqa| + var synthNames = Array(n); + n.do{|i| + var synthName = (prefix ++ i.asString).asSymbol; + synthNames = synthNames.add(synthName); + SynthDef(synthName, {| + in, + mix = 0.2, + out = 0 + | + var sig = In.ar(in, 2); + var rev = JPverb.ar(sig, + t60: 5.0.rand, + damp: 1.0.rand, + size: 0.5+4.0.rand, + earlyDiff: 1.0.rand, + modDepth: 1.0.rand, + modFreq: 10.0.rand, + low: 1.0.rand, + mid: 1.0.rand, + high: 1.0.rand); + Out.ar(out, sig + (mix * rev)); + }).add; + }; + synthNames; +} +) + +( +~synthNames = ~synthGen.value(15); +~reverbNames = ~reverbGen.value(15, prefix: \jumisevu); +) + +( +~reverbSynths.do{|item| + item.set(\mix, 0.5); +}; +) + +TempoClock.tempo = 0.2; + +// + +~walomajuWeights = [1, 0, 0, 0, 0, 0, 0, 0]; +~walomajuPasses = 1; +~quqohecoWeights = [1, 0, 0, 0, 0, 0, 0, 0]; +~quqohecoPasses = 1; +~gyvekewiWeights = [1, 0, 0, 0, 0, 0, 0, 0]; +~gyvekewiPasses = 1; + +~updateBeat = {|name, weights, passes| + var beat = 1.split(passes, weights); + "beat = %\n".postf(beat); + Pdefn(name, Pseq(beat, inf)).quant_(1); +}; + +( +~dijutu.rot[0] = {|v, n| + ~walomajuWeights[n] = v; + ~walomajuWeights.postln; + ~updateBeat.(\fagiDur, ~walomajuWeights, ~walomajuPasses); +}; + +~dijutu.rot[1] = {|v, n| + ~quqohecoWeights[n] = v; + ~quqohecoWeights.postln; + ~updateBeat.(\quqoDur, ~quqohecoWeights, ~quqohecoPasses); +}; + +~dijutu.rot[2] = {|v, n| + ~gyvekewiWeights[n] = v; + ~gyvekewiWeights.postln; + ~updateBeat.(\gyvekewiDur, ~gyvekewiWeights, ~gyvekewiPasses); +}; + +~dijutu.rot[4] = {|v, n| + switch (n) + {0} { + ~walomajuPasses = v; + ~updateBeat.(\fagiDur, ~walomajuWeights, ~walomajuPasses); + } + {1} { + ~quqohecoPasses = v; + ~updateBeat.(\quqoDur, ~quqohecoWeights, ~quqohecoPasses); + } + {2} { + ~gyvekewiPasses = v; + ~updateBeat.(\gyvekewiDur, ~gyvekewiWeights, ~gyvekewiPasses); + } +}; +) + +Pdefn(\fagiDur).swap(\fbs); +Pdefn(\quqoDur).swap(\fbs); +Pdefn(\gyvekewiDur).swap(\fbs); + +( +Pdef(\tesaquvo, Pbind(*[ + group: ~instrumentGroup, + out: Prand(~reverbBusses, inf), + instrument: Prand(~synthNames, inf), + db: -35, + pan: Pwhite(0.2, 0.7) * [-1, 1], + trig: 1, + dur: Pdefn(\fagiDur), + attack: Pkey(\dur) / 3, + release: Pkey(\dur) * 4.5 * Pwhite(1.0, 2.0), + octave: 2, + note: Pshuf([5, 7, 9], inf), + detuneMax: 1, +])).quant_(1); +) +Pdef(\tesaquvo).play; + +( +Pdef(\comafahi, Pbind(*[ + group: ~instrumentGroup, + out: Prand(~reverbBusses, inf), + instrument: Prand(~synthNames, inf), + db: -35, + pan: Pwhite(0.2, 0.7), + trig: 1, + dur: Pdefn(\quqoDur), + attack: Pkey(\dur) / 2, + release: Pkey(\dur) * 2.5 * Pwhite(1.0, 2.0), + octave: 3, + note: Pshuf([2, 3, 5, 7, 9], inf), + detuneMax: 0.5, +])).quant_(1); +) +Pdef(\comafahi).play; + +( +Pdef(\gyvekewi, Pbind(*[ + group: ~instrumentGroup, + out: Prand(~reverbBusses, inf), + instrument: Prand(~synthNames, inf), + db: -45, + pan: Pwhite(0.2, 0.7), + trig: 1, + dur: Pdefn(\gyvekewiDur), + attack: Pkey(\dur) / 4, + release: Pkey(\dur) * 2.7 * Pwhite(1.0, 2.0), + octave: Prand([4, 5], inf), + note: Pshuf([2, 2, 3, 4, 5, 7, 7, 7, 9, 11], inf), + detuneMax: 0.2, +])).quant_(1); +) +Pdef(\gyvekewi).play; + +( +Pdef(\fedecyne, Pbind(*[ + instrument: \dyti, + db: -60, + octave: Prand([4, 5], inf), + note: Pshuf([6, 5, 3, 2, 2, 7, 7, 0], inf), + dur: Pdefn(\gyvekewiDur), + release: Pwhite(0.5, 1.2) * Pkey(\dur), + legato: Pwhite(0.6, 0.7), + cut: Pexprand(400, 3200), + rez: Pwhite(0.6, 0.9), + modFreqMin: 4, + modFreqMax: 11, + modAmp: Pwhite(0.005, 0.01) * 4, + pan: Pwhite(-0.2, 0.2), + group: ~instrumentGroup, + out: ~reverbBusses[0], +])).quant_(1).play; +) + +( +Pdef(\sijytufy, Pbind(*[ + group: ~instrumentGroup, + out: ~reverbBusses[1], + instrument: \lajyfika, + db: -65, + pan: Pwhite(-0.4, 0.4), + dur: Pdefn(\gyvekewiDur), + legato: 0.5, + release: Pkey(\dur), + octave: Prand([6], inf), + note: Pshuf([6, 5, 3, 2, 2, 7, 7, 0], inf), + freqStart: Pkey(\freq) / 4, + freqEnd: Pkey(\freq) / 2, + modFreq: Pwhite(8, 16), + modAmp: 0.01, + cut: Pkey(\freq), + rez: 0.9, +])).quant_(1).play; +) + +( +Pdef(\haqefuto, Pbind(*[ + group: ~instrumentGroup, + out: ~reverbBusses[2], + instrument: \lajyfika, + db: -70, + pan: Pwhite(-0.4, 0.4), + dur: Pdefn(\fagiDur), + legato: 0.7, + release: Pkey(\dur), + octave: Prand([7], inf), + note: Pshuf([6, 5, 3, 2, 2, 7, 7, 0], inf), + freqStart: Pkey(\freq) / 2, + freqEnd: Pkey(\freq) / 1, + modFreq: Pwhite(4, 8), + modAmp: Pwhite(0.01, 0.02), + cut: Pkey(\freq)*2, + rez: 0.9, +])).quant_(1).play; +) + +( +Pdef(\tifacuji, Pbind(*[ + group: ~instrumentGroup, + out: ~reverbBusses[3], + instrument: \lajyfika, + db: -75, + pan: Pwhite(-0.4, 0.4), + dur: Pdefn(\fagiDur), + legato: 0.1, + release: Pkey(\dur) * 2, + octave: Prand([8], inf), + note: Pshuf([6, 5, 3, 2, 2, 7, 7, 0], inf), + freqStart: Pkey(\freq) / 1, + freqEnd: Pkey(\freq) * 2, + modFreq: Pwhite(2, 4), + modAmp: 0.01, + cut: Pkey(\freq)*2, + rez: 0.9, +])).quant_(1).play; +) + +// + -- 2.17.1