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
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.
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)
Workshop Livecoding Strasbourg @ Graffalgar / Strasbourg
Workshop @ Graffalgar / Strasbourg Le prochain atelier de live…
REISUB – Attention Video
Europa video sources Europa video sources Hi there, I don’t…
GRAND CRASH AUTO – A GTA IV theme cover
GTA IV THEME COVER – GRAND CRASH AUTO https://youtu.be/MhB7h15L7sw Hey…
Algorave 10th Birthday
Algorave 10th birthday Hoozay ! Algorave is partying hard for…