Monthly report CrashServer February 2022

FEBRUARY 2022 - Monthly report !

The second edition, fruitfull with a glimpse into real world concerts again !

EDIT: You can now find all these code in our GITHUB.

[Live] We missed the sweating but the moist is coming back

As that annoying pandemic is fading away at least locally in France, perspective of live concerts are coming back. And we miss it, we live for it.

Before getting crazy IRL though we have a live stream event all planned out with a nice line up. All the information about that event [is here] !

[Troop] Print Troop code in a terminal with UDP via python

Cool retro term with code from troop and foxdot

Trying to figure out a way to have a simple display of our code without the hassle of displaying a FoxDot windows, zbdm created a python script enabling us to output every code sent in udp to a terminal.

GLSL/HLSL. All good. As long as I can make it glitch ?
As our display computer was running windows for the previously mentionned stream, we had to figure out a way to display code in a windows terminal.

You can follow our tutorial if you want to learn more.

[IRL] going again

Our live irl workshops are happening again, in Strasbourg, France, more info is avalaible following the next link, just avec the dot. [ https://crashserver.fr/livecoding-strasbourg/ ] Beer or coffee based live coding in a pub, that’s the Graffalgar in Sxb, just close to the station.

[FoxDot] masterAll() & yes, a game changer !

Imagine you having fun with Master().dur=4 or stuff like that but at that point you’re overwriting all and get lost in your code.

“Oh no, I lost my perfect funky disco groove, I need to evaluate all this 200 lines”.

Keep calm and relax, we have the “masterAll” solution.

Basically, masterAll is a Master().args that store all args values from each player. And when you call the “reset” args, it recalls them.

Play about ten lines of code, call masterAll("dur", 4), then masterAll("reset") and the magic happens.

valueDict = {}
def masterAll(args = "dur", value=1):
	global valueDict
	if args != "reset":
		for p in Clock.playing:
			if p in valueDict:
				if args in valueDict[p]:
					pass
				else:
					try:
						valueDict[p][args] = p.__getitem__(args)
					except:
						valueDict[p][args] = 0
			else:
				valueDict[p] = {}
				try:
					valueDict[p][args] = p.__getitem__(args)
				except:
					valueDict[p][args] = 0
			p.__setattr__(args, value)
	else:
		for k,v in valueDict.items():
			for l, w in v.items():
				try:
					k.__setattr__(l, w)
				except:
					pass
		valueDict = {}

[3d] HUBing our hub for the stream

following the lore of our REISUB, our previous base was destroyed thus forcing us to move into a new hope.
That world is a temporary setup

>> baking the texture into the world.


PC power supply in 3d wireframe

Our temporary hub is available here [https://hubs.mozilla.com/TbA9Do2/wry-handmade-congregation]

 

[SC] New synths "lbass"

Introducing a new and quite simple yet efficient synth LBASS. For the moment it’s going through the testing phase we’ll be sure to put it into our github when it’s bug proof and flexible as we want it to be.

>> copy paste the code into supercollider, evaluate, and in FoxDot type :

lbass = Synth(“lbass”)
and then you”‘re ready to go.

SynthDef.new(\lbass,
{|amp=1, sus=1, pan=0, freq=0, vib=0, fmod=0, rate=0, bus=0, blur=1, beat_dur=1, atk=0.01, decay=0.09, rel=0.05, peak=1, level=0.8, detune=0.3,  oscmix=0.5, submix=0.5, cutoff=4500, rq=0.5, tone=0.16, wide=0.0|
var osc, osc1, osc2, sub, oscf, env, envf;
sus = sus * blur;
freq = In.kr(bus, 1);
freq = [freq, freq+fmod];
freq=(freq/2);
osc1 = LFTri.ar([freq + detune, freq-detune], LFNoise0.ar(2,4));
osc2 = LFSaw.ar([freq + detune, freq-detune], LFNoise0.ar(6,2));
sub = LPF.ar(LFPulse.ar(freq/2),400);
env = EnvGen.ar(Env([0, peak, level, level, 0], [atk,decay,sus-(atk+decay+rel),rel], curve:\sin), doneAction: 0);
envf = EnvGen.ar(Env.adsr(0.01,0.05,tone,0.5));
osc = SelectX.ar(oscmix, [osc1, osc2]);
osc = HPF.ar(osc, 150);
osc = SelectX.ar(submix, [osc*0.8, sub]);
osc = MoogFF.ar(osc, (cutoff*envf).clip(20,20000), rq.clip(0,3.99), mul:2);
osc = LeakDC.ar(osc);
osc=(osc * env);
osc = Pan2.ar(osc*amp, pan);
ReplaceOut.ar(bus, osc)}).add;

[FoxDot] New envelope filter experimenting

In FoxDot, sometimes you need to change the attack or the release of a synth, a sample or a loop but the SynthDef doesn’t have it.

That’s why we add this simple FX. If you don’t know how to add a FoxDot FX, go check our tutorial.

SynthDef.new(\adsr, 
{|bus, a, r, sus, ac, rc| 
var osc,env; 
osc = In.ar(bus, 2); 
env = EnvGen.ar(Env.new(levels: [0,1,1,0], times:[a*sus, max((a*sus + r*sus), sus - (a*sus + r*sus)), r*sus], curve:[ac,0,rc])); 
osc = osc*env;
ReplaceOut.ar(bus, osc)}).add;

You can now try with:

a1 >> pluck(oct=(3,4,5), dur=8, a=PWhite(0,1), r=PWhite(0,1), ac=PWhite(-12,12), rc=PWhite(-12,12))

x1 >> play("v.", a=0.1, r=0.5)