1
0
Fork 0
Rhizosphere/rhizosphere.scd

495 lines
16 KiB
Markdown

(/*
Copyright (c) 2020 Luka Prinčič, All rights reserved.
This program is free software distributed under
GNU General Public Licence. See COPYING for more info.
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
// RHIZOSPHERE - STEKLENIK 2020 - CONA //////////////////////////////////////////////
██████╗ ██╗ ██╗██╗███████╗ ██████╗ ███████╗██████╗ ██╗ ██╗███████╗██████╗ ███████╗
██╔══██╗██║ ██║██║╚══███╔╝██╔═══██╗██╔════╝██╔══██╗██║ ██║██╔════╝██╔══██╗██╔════╝
██████╔╝███████║██║ ███╔╝ ██║ ██║███████╗██████╔╝███████║█████╗ ██████╔╝█████╗
██╔══██╗██╔══██║██║ ███╔╝ ██║ ██║╚════██║██╔═══╝ ██╔══██║██╔══╝ ██╔══██╗██╔══╝
██║ ██║██║ ██║██║███████╗╚██████╔╝███████║██║ ██║ ██║███████╗██║ ██║███████╗
╚═╝ ╚═╝╚═╝ ╚═╝╚═╝╚══════╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝
*/
Server.default.waitForBoot {
// library path
var libPath = PathName(thisProcess.nowExecutingPath.dirname +/+ "lib");
// for each files in that lib folder
libPath.filesDo({|afile|
// tell me what you're executing:
postln(" ." + afile.fileName);
// execute it:
this.executeFile(afile.fullPath);
});
s.meter;
s.plotTree;
});
s.meter;
s.plotTree;
// octoPan busses //////////////
(
"\n\n\n=============================================================".postln;
"\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>".postln;
"--- R H I Z O S P H E R E -----".postln;
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n".postln;
// free busses and panners when re-trying things?
~octoBus1.free; ~octoBus2.free; ~octoBus3.free; ~octoBus4.free;
~panBus1x.free; ~panBus1y.free; ~panBus1r.free;
~panBus2x.free; ~panBus2y.free; ~panBus2r.free;
~panBus3x.free; ~panBus3y.free; ~panBus3r.free;
~panBus4x.free; ~panBus4y.free; ~panBus4r.free;
~revBus.free;
// octoBus1 + panners and control busses:
~octoBus1 = Bus.audio(s,1);
~panBus1x = Bus.control(s,1);
~panBus1y = Bus.control(s,1);
~panBus1r = Bus.control(s,1);
~panBus1y.value = 0.14; // set a fixed value to a bus
~panBus1x.value = 0;
~panBus1r.value = 1;
// octoBus2 + panners and control busses:
~octoBus2 = Bus.audio(s,1);
~panBus2x = Bus.control(s,1);
~panBus2y = Bus.control(s,1);
~panBus2r = Bus.control(s,1);
~panBus2y.value = 0.14; // set a fixed value to a bus
~panBus2x.value = 0;
~panBus2r.value = 2;
// octoBus3 + panners and control busses:
~octoBus3 = Bus.audio(s,1);
~panBus3x = Bus.control(s,1);
~panBus3y = Bus.control(s,1);
~panBus3r = Bus.control(s,1);
~panBus3y.value = 0.14; // set a fixed value to a bus
~panBus3x.value = 0;
~panBus3r.value = 2;
// octoBus4 + panners and control busses:
~octoBus4 = Bus.audio(s,1);
~panBus4x = Bus.control(s,1);
~panBus4y = Bus.control(s,1);
~panBus4r = Bus.control(s,1);
~panBus4y.value = 0.14; // set a fixed value to a bus
~panBus4x.value = 0;
~panBus4r.value = 2;
// 8chan reverb bus
~revBus = Bus.audio(s,8);
">>> loaded all busses".postln;
"--- loading octoPanners ...".postln;
~octoPanner1 = Synth("octoPanner", [\inBus, ~octoBus1, \outBus, ~revBus], addAction: \addToTail);
~octoPanner1.map(\x, ~panBus1x);
~octoPanner1.map(\y, ~panBus1y);
~octoPanner1.map(\radius, ~panBus1r);
~octoPanner2 = Synth("octoPanner", [\inBus, ~octoBus2, \outBus, ~revBus], addAction: \addToTail);
~octoPanner2.map(\x, ~panBus2x);
~octoPanner2.map(\y, ~panBus2y);
~octoPanner2.map(\radius, ~panBus2r);
~octoPanner3 = Synth("octoPanner", [\inBus, ~octoBus3, \outBus, ~revBus], addAction: \addToTail);
~octoPanner3.map(\x, ~panBus3x);
~octoPanner3.map(\y, ~panBus3y);
~octoPanner3.map(\radius, ~panBus3r);
~octoPanner4 = Synth("octoPanner", [\inBus, ~octoBus4, \outBus, ~revBus], addAction: \addToTail);
~octoPanner4.map(\x, ~panBus4x);
~octoPanner4.map(\y, ~panBus4y);
~octoPanner4.map(\radius, ~panBus4r);
// 4 x stereo reverbs are fixed to outputs ([0,1][2,3][4,5][6,7]) not panners!
~reverb = Synth("reverBusser", [\inBus, ~revBus, \outBus, 0], addAction: \addToTail);
// some default oscilations of pan and reverb
">>> cleaning up panner_x and panner_y control synths...".postln;
~panner1y.free; ~panner2y.free; ~panner3y.free; ~panner4y.free;
~panner1x.free; ~panner2x.free; ~panner3x.free; ~panner4x.free;
// REVERBS
">>> cleaning up reverb busses and wet oscilators...".postln;
~reverb1wetBus.free; // ~wetOsc.free; // clean up
~reverb2wetBus.free; // ~wetOsc.free; // clean up
~reverb3wetBus.free; // ~wetOsc.free; // clean up
~reverb4wetBus.free; // ~wetOsc.free; // clean up
~wetOsc1.free; ~wetOsc2.free; ~wetOsc3.free; ~wetOsc4.free;
">>> setting up reverb control buses and param oscilators...".postln;
~reverb1wetBus = Bus.control(s, 1); // create control bus
~reverb.map(\verb1wet, ~reverb1wetBus); // map an argument to control bus
~reverb2wetBus = Bus.control(s, 1); // create control bus
~reverb.map(\verb2wet, ~reverb2wetBus); // map an argument to control bus
~reverb3wetBus = Bus.control(s, 1); // create control bus
~reverb.map(\verb3wet, ~reverb3wetBus); // map an argument to control bus
~reverb4wetBus = Bus.control(s, 1); // create control bus
~reverb.map(\verb4wet, ~reverb4wetBus); // map an argument to control bus
~wetOsc1 = SynthDef(\randomVerb1, {Out.kr(~reverb1wetBus, LFNoise2.kr(1).range(0, 0.8)) }).play;
~wetOsc2 = SynthDef(\randomVerb2, {Out.kr(~reverb2wetBus, LFNoise2.kr(1).range(0, 0.8)) }).play;
~wetOsc3 = SynthDef(\randomVerb3, {Out.kr(~reverb3wetBus, LFNoise2.kr(1).range(0, 0.8)) }).play;
~wetOsc4 = SynthDef(\randomVerb4, {Out.kr(~reverb4wetBus, LFNoise2.kr(1).range(0, 0.8)) }).play;
// ~wetOsc.free;
// ~reverb.set(\verb1wet, 0);
// ~reverb.set(\verb1wet, 1);
// ~reverb.set(\verb2wet, 1);
">>> finished loading all busses and control synths for panning etc ...".postln;
"".postln;
);
//////////////////////////////////////////////////////////////////////////////////
// P E R F O R M A N C E /////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
// PANNERS
// x=0:y=[ 0.00 / 0.28 / 0.57 / 0.85 ]
// x=1:y=[ 1.00 / 0.71 / 0.43 / 0.14 ]
( // free all control synths for panning
~panner1y.free;
~panner2y.free;
~panner3y.free;
~panner4y.free;
~panner1x.free;
~panner2x.free;
~panner3x.free;
~panner4x.free;
)
// fixed values
~panBus1x.value = 0;
~panBus1y.value = 0;
~panBus1r.value = 10;
~panner1y = SynthDef(\randomPan1y, { Out.kr(~panBus1y, LFNoise1.kr(2).range(0,1))}).play;
~panner1y = SynthDef(\oscPan1y, { Out.kr(~panBus1y, SinOsc.kr(2).range(1,0))}).play;
~panner1y.free
~panner1x = SynthDef(\pulsePan1x, { Out.kr(~panBus1x, LFPulse.kr(0.3).range(0,1))}).play;
~panner1x.free
//s.sendMsg(\n_free, 1598)
//
~panBus2x.value = 0;
~panBus2y.value = 0.28;
~panBus2r.value = 1;
~panner2y = SynthDef(\randomPan2y, { Out.kr(~panBus2y, LFNoise1.kr(2).range(0,1))}).play;
~panner2y = SynthDef(\oscPan2y, { Out.kr(~panBus2y, SinOsc.kr(2).range(1,0))}).play;
~panner2y.free
~panner2x = SynthDef(\pulsePan2x, { Out.kr(~panBus2x, LFPulse.kr(0.3).range(0,1))}).play;
~panner2x.free
//
~panBus3x.value = 1;
~panBus3y.value = 0.28;
~panBus3r.value = 1;
~panner3y = SynthDef(\randomPan3y, { Out.kr(~panBus3y, LFNoise1.kr(2).range(0,1))}).play;
~panner3y = SynthDef(\oscPan3y, { Out.kr(~panBus3y, SinOsc.kr(2).range(1,0))}).play;
~panner3y.free
~panner3x = SynthDef(\pulsePan3x, { Out.kr(~panBus3x, LFPulse.kr(0.3).range(0,1))}).play;
~panner3x.free
//
~panBus4x.value = 1;
~panBus4y.value = 0.28;
~panBus4r.value = 1;
~panner4y = SynthDef(\randomPan4y, { Out.kr(~panBus4y, LFNoise1.kr(2).range(0,1))}).play;
~panner4y = SynthDef(\oscPan4y, { Out.kr(~panBus4y, SinOsc.kr(2).range(1,0))}).play;
~panner4y.free
~panner4x = SynthDef(\pulsePan4x, { Out.kr(~panBus4x, LFPulse.kr(0.3).range(0,1))}).play;
~panner4x.free
//
// SYNTHS ////////////////////////////////////////////////////////////////////////////////
// noise Cracle
~noiseCr1 = Synth(\noiseCrackle, [\out, ~octoBus1, \fadeTime, 30, \lpfa, 1, \hpfa, 0 ]);
~noiseCr1.set(\rq, 0.98);
~noiseCr1.set(\lpfa, 1);
~noiseCr1.set(\hpfa, 0);
~noiseCr1.set(\gate, 0, \fadeTime, 1);
~noiseCr1.release(1)
~noiseCr1.free;
~noiseCr2 = Synth(\noiseCrackle, [\out, ~octoBus2, \fadeTime, 30, \lpfa, 1, \hpfa, 0 ]);
~noiseCr2.set(\gate, 0, \fadeTime, 1);
~noiseCr2.free;
~noiseCr3 = Synth(\noiseCrackle, [\out, ~octoBus3, \fadeTime, 30, \lpfa, 0, \hpfa, 1 ]);
~noiseCr3.set(\gate, 0, \fadeTime, 1);
~noiseCr3.free;
~noiseCr4 = Synth(\noiseCrackle, [\out, ~octoBus4, \fadeTime, 30, \lpfa, 0, \hpfa, 1 ]);
~noiseCr4.set(\gate, 0, \fadeTime, 1);
~noiseCr4.free;
( // free them all at once
~noiseCr1.free;
~noiseCr2.free;
~noiseCr3.free;
~noiseCr4.free;
)
~henonS1 = Synth(\henonSynth1, [\out, ~octoBus3, \amp, 0.4, \fadeTime, 4]);
~henonS1.set(\amp, 0.05);
~henonS1.set(\hpff, 200);
~henonS1.set(\lpff, 200);
~henonS1.release(1);
~henonS1.free;
~henonS2 = Synth(\henonSynth1, [\out, ~octoBus3, \amp, 0.4, \fadeTime, 4]);
~henonS2.set(\amp, 0.05);
~henonS2.set(\gate, 0, \fadeTime, 1);
~henonS2.free;
~darkHenon1 = Synth(\henonLsynth2, [\out, ~octoBus4, \fadeTime, 10]);
~darkHenon1.set(\gate, 0, \fadeTime, 3);
~darkHenon1.free;
~darkHenon2 = Synth(\henonLsynth2, [\out, ~octoBus4, \fadeTime, 10]);
~darkHenon2.set(\gate, 0, \fadeTime, 3);
~darkHenon2.free;
// SOIL
~soil1 = Synth(\granSoil, [\out, ~octoBus1, \sndbuf, ~forestSoilBuf, \dur, 0.0001 ,\fadeTime, 20, \amp, 0.8]);
~soil1durBus = Bus.control(s,1);
~soil1durBus.value = 0.001;
~soil1.map(\dur, ~soil1durBus);
~soil1DurOsc = SynthDef( \soilDurOsc, {Out.kr(~soil1durBus, SinOsc.kr(0.012,1.5pi).range(0.0001, 0.05))} ).play;
~soil1DurOsc.free;
~soil1.set(\gate, 0, \fadeTime, 15); // use envelope to fade out
~soil1.release(15);
~soil1.free;
//
~soil2 = Synth(\granSoil, [\out, ~octoBus2, \sndbuf, ~forestSoilBuf, \dur, 0.0001 ,\fadeTime, 20, \amp, 0.8]);
~soil2durBus = Bus.control(s,1);
~soil2durBus.value = 0.0001;
~soil2.map(\dur, ~soil2durBus);
~soil2DurOsc = SynthDef( \soilDurOsc, {Out.kr(~soil2durBus, SinOsc.kr(0.029,1.5pi).range(0.0001, 0.08))} ).play;
~soil2DurOsc.free;
~soil2.release(15);
//
~soil3 = Synth(\granSoil, [\out, ~octoBus2, \sndbuf, ~forestSoilBuf, \dur, 0.0001 ,\fadeTime, 20, \amp, 0.8]);
~soil3durBus = Bus.control(s,1);
~soil3durBus.value = 0.0001;
~soil3.map(\dur, ~soil3durBus);
~soil3.release(15);
//
~soil4 = Synth(\granSoil, [\out, ~octoBus2, \sndbuf, ~forestSoilBuf, \dur, 0.0001 ,\fadeTime, 20, \amp, 0.8]);
~soil4durBus = Bus.control(s,1);
~soil4durBus.value = 0.01;
~soil4.map(\dur, ~soil4durBus);
~soil4.release(15);
// MARKOV NOISES +
~latooWan1 = Synth(\latooWanderings, [\out, ~octoBus4, \fadeTime, 30, \amp, 0.3]);
~latooWan1.release(3);
~markov1 = Synth(\markovS1, [ \out, ~octoBus1, \freq, 440, \tsize, 3, \amp, 0.3, \clip, 0.69, \fadeTime, 0.01 ]);
~markov1.release(0.01);
~distbleeps = Synth(\latooTriggers, [\out, ~octoBus3, \trigA, 1.1, \fadeTime, 0.01, \amp, 0.9]);
~distbleeps.release(10);
~markov7 = Synth(\markovS1, [ \out, ~octoBus2, \freq, 740, \tsize, 3, \amp, 0.2, \clip, 0.9, \fadeTime, 7 ]);
~markov7.release(0.01)
~markov9 = Synth(\markovS1, [ \out, ~octoBus1, \freq, 1940, \tsize, 3, \amp, 0.2, \clip, 0.9, \fadeTime, 0.01 ]);
~markov9.release(0.01)
(
~markov10 = Synth(\markovS1, [ \out, ~octoBus4, \freq, 501, \tsize, 3, \amp, 0.2, \clip, 0.9, \fadeTime, 0.01 ]);
~markov11 = Synth(\markovS1, [ \out, ~octoBus3, \freq, 1101, \tsize, 3, \amp, 0.2, \clip, 0.9, \fadeTime, 0.01 ]);
~markov12 = Synth(\markovS1, [ \out, ~octoBus2, \freq, 3001, \tsize, 3, \amp, 0.2, \clip, 0.9, \fadeTime, 0.01 ]);
)
(
var rel=0.1;
~markov10.release(rel);
~markov11.release(rel);
~markov12.release(rel);
)
// TRIG RINGS
~lorenzTrig1 = Synth(\lorenzTrigRing, [\out, ~octoBus1, \freq, 1400, \amp, 0.5, \fadeTime, 0]);
~lorenzTrig1.set(\amp, 1); // use set fadeTime - set \gate = 0?
~lorenzTrig1.release; // use set fadeTime - set \gate = 0?
~lorenzTrig1.release(10); // use set fadeTime - set \gate = 0?
~lorenzTrig1.set(\fadeTime, 10, \gate, 0);
~lorenzTrig1.free
~stdTrig1 = Synth(\stndTrigRing, [\out, ~octoBus2, \freq,1900, \amp,0.5,\fadeTime, 10]);
~stdTrig1.release(10);
~stdTrig1.free
~lorenzTrig2 = Synth(\lorenzTrigRing, [\out, ~octoBus3, \freq, 400, \amp, 0.3, \fadeTime, 10, \min, 5, \max, 20]);
~lorenzTrig2.release(10);
~stdTrig2 = Synth(\stndTrigRing, [\freq, 70, \min, 0, \max, 2, \decay, 2, \ffreq, 200, \amp, 0.4, \out, ~octoBus4, \fadeTime, 20]) ;
~stdTrig2.release(30);
~henoTrig1 = Synth(\henoTrigRing, [\out, ~octoBus2, \freq, 2700, \amp, 1, \min, 0.1, \max, 1, \fadeTime, 20]);
~henoTrig1.release(30);
// 139Hz
~gbmanTrig1 = Synth(\gbmanTrigRing, [\out, ~octoBus1, \freq, 139, \decay, 2, \min, 0.2, \max, 1, \amp, 0.4, \fadeTime, 2]);
~gbmanTrig1.release(30);
// 3300Hz
~latooTrig1 = Synth(\latooTrigRing, [\out, ~octoBus4, \freq, 3300, \decay, 3, \min, 0.2, \max, 1, \amp, 0.2, \fadeTime, 10 ]);
~latooTrig1.release(30);
// 4300Hz
~latooTrig2 = Synth(\latooTrigRing, [\out, ~octoBus3, \freq, 4300, \decay, 0.2, \min, 1, \max, 10, \amp, 0.2, \fadeTime, 10 ]);
~latooTrig2.set(\out, ~octoBus4)
~latooTrig2.release(30)
// 210Hz
~fhnTrig1 = Synth(\fhnTrigRing, [\out, ~octoBus2, \freq, 210, \amp, 0.5, \decay, 2, \min, 0.2, \max, 1, \amp, 0.4, \fadeTime, 10]);
~fhnTrig1.release(30);
// 200Hz
~fhnTrig3 = Synth(\fhnTrigRing, [\out, ~octoBus2, \freq, 200, \amp, 0.5, \decay, 2, \min, 0.2, \max, 1, \amp, 0.4, \fadeTime, 10]);
~fhnTrig3.release(30);
// 2110
~fhnTrig2 = Synth(\fhnTrigRing, [\out, ~octoBus1, \freq, 2110, \amp, 0.5, \min, 2, \max, 20, \amp, 0.5, \fadeTime, 10]);
~fhnTrig2.set(\ffreq, 8000)
~fhnTrig2.release(10)
~fhnTrig2 = Node.basicNew(nodeID:1369)
~fmgrainer = Routine { 200.do({ x = Synth(\fm_grainer, [ "modfreq", rrand(10,1000), "carfreq", rrand(40,100), \out, ~octoBus1 ]); 1.wait; }); "--- fmgrains done generating new ones ...".postln; }.play;
// this one will fade out by itself at some point
// back to SOIL - outro + henonS1?
~soil1 = Synth(\granSoil, [\out, ~octoBus1, \sndbuf, ~forestSoilBuf, \dur, 0.0001 ,\fadeTime, 20, \amp, 0.8]);
~soil1durBus = Bus.control(s,1);
~soil1durBus.value = 0.001;
~soil1.map(\dur, ~soil1durBus);
~soil1DurOsc = SynthDef( \soilDurOsc, {Out.kr(~soil1durBus, SinOsc.kr(0.012,1.5pi).range(0.0001, 0.05))} ).play;
~soil1DurOsc.free;
~soil1.set(\gate, 0, \fadeTime, 15); // use envelope to fade out
~soil1.release(15);
~soil1.free;
//
~soil2 = Synth(\granSoil, [\out, ~octoBus2, \sndbuf, ~forestSoilBuf, \dur, 0.0001 ,\fadeTime, 20, \amp, 0.8]);
~soil2durBus = Bus.control(s,1);
~soil2durBus.value = 0.0001;
~soil2.map(\dur, ~soil2durBus);
~soil2DurOsc = SynthDef( \soilDurOsc, {Out.kr(~soil2durBus, SinOsc.kr(0.029,1.5pi).range(0.0001, 0.08))} ).play;
~soil2DurOsc.free;
~soil2.release(15);
//
~henonS1 = Synth(\henonSynth1, [\out, ~octoBus3, \amp, 0.4, \fadeTime, 4]);
~henonS1.set(\amp, 0.90);
~henonS1.set(\hpff, 1000);
~henonS1.set(\lpff, 50);
~henonS1.release(60);
~henonS1.free;
//
~henonS2 = Synth(\henonSynth1, [\out, ~octoBus3, \amp, 0.4, \fadeTime, 4]);
~henonS2.set(\amp, 0.05);
~henonS2.set(\hpff, 200);
~henonS2.set(\lpff, 200);
~henonS2.release(40)
~henonS2.free;
// helper for nodes without object
~lorenzTrig1 = Node.basicNew(s, 1354)
s.sendMsg(\n_free, 1590)
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -