«Cinematic Polyrhythmic Bass Evolution» by po
on 19 Sep'25 06:21 inautechre-inspired polyrhythmic composition with irregular patterns, granular synthesis, and algo-sequences evolving over 60s
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
SynthDef("task_efc57239-5d3d-49fe-9b37-9bf8301cad55", {
arg out=0, gate=1, freq=220, amp=0.25, tempo=1.0;
var env, timer, gran, perc1, perc2, seq1, seq2, chaos, filt1, filt2, pan, sig;
var bassEnv, bass1, bass2, bassFilter, bassLFO, subBass, bassMix, bassChorus;
env = EnvGen.kr(Env([0, 0.3, 1, 0.7, 0], [5, 20, 25, 10], \sin), gate, timeScale: tempo.reciprocal, doneAction: 2);
timer = LFSaw.kr(tempo * 0.02);
// Deep cinematic bass foundation - Zimmer style
bassEnv = EnvGen.kr(Env([0, 0.1, 0.8, 1, 0.9, 0], [8, 15, 20, 15, 7], [\sin, \sin, \lin, \sin, \sin]), timeScale: tempo.reciprocal);
bassLFO = LFNoise1.kr([0.08, 0.12]).range(0.85, 1.15);
// Massive low-end with evolving harmonics
bass1 = SinOsc.ar(freq * [0.25, 0.251] * bassLFO, 0, 0.6);
bass2 = Saw.ar(freq * 0.5 * LFNoise2.kr(0.05).range(0.95, 1.05), 0.4);
subBass = SinOsc.ar(freq * 0.125 * LFNoise1.kr(0.03).range(0.98, 1.02), 0, 0.8);
// Bass filtering with movement
bassFilter = RLPF.ar(
bass1 + LPF.ar(bass2, 300) + subBass,
LFNoise1.kr(0.04).range(40, 180) + (timer.range(0, 60)),
LFNoise2.kr(0.06).range(0.6, 0.95)
);
// Subtle chorus/phasing for width
bassChorus = bassFilter + DelayL.ar(bassFilter, 0.02, LFNoise2.kr([0.3, 0.35]).range(0.005, 0.015)) * 0.3;
bassMix = bassChorus * bassEnv * 0.35;
// Original granular texture (reduced slightly to make room for bass)
gran = SinOsc.ar(
freq * [1, 1.618] * LFNoise1.kr([0.1, 0.13]).range(0.5, 2),
0,
Decay.ar(Dust.ar([3, 5, 7] * tempo), 0.05)
).sum * 0.15;
// Polyrhythmic percussion layers
perc1 = Ringz.ar(
Decay.ar(Impulse.ar([4, 7] * tempo * LFNoise0.kr(0.05).range(0.7, 1.2)), 0.01) * PinkNoise.ar(0.3),
[400, 800] + LFNoise2.kr(0.3).range(-100, 200),
0.1
).sum * 0.35;
perc2 = HPF.ar(
Decay.ar(Impulse.ar([11, 13] * tempo * 0.3), 0.08) * Crackle.ar(1.9, 0.2),
300 + LFNoise1.kr(0.2).range(0, 300)
) * 0.25;
// Algorithmic sequences
chaos = LFNoise0.kr(0.08 * tempo).range(0.5, 1.5);
seq1 = SinOsc.ar(freq * [0.5, 0.75] * chaos, 0,
LFPulse.ar([3, 5] * tempo, 0, 0.3)
) * 0.12;
seq2 = Saw.ar(freq * 2 * LFNoise1.kr(0.1).range(0.8, 1.3),
LFPulse.ar([8, 12] * tempo * chaos, 0, 0.2)
) * 0.08;
// Complex filtering with movement
filt1 = RLPF.ar(
gran + perc1 + seq1.sum,
LFNoise1.kr(0.15).range(200, 2000) + (timer.range(0, 800)),
LFNoise2.kr(0.1).range(0.2, 0.8)
);
filt2 = BPF.ar(
perc2 + seq2 + (gran * 0.5),
LFNoise0.kr(0.12).range(400, 1800) + (chaos.range(0, 400)),
0.4
);
// Spatial movement
pan = SinOsc.kr([0.03, 0.05] * tempo, [0, 1.57]) * 0.7;
// Mix bass with existing elements
sig = [filt1 * pan[0] + filt2 + bassMix.sum, filt1 * pan[1] + filt2 + bassMix.sum];
sig = sig * amp * env;
sig = LeakDC.ar(sig).clip(-0.9, 0.9);
Out.ar(out, sig);
});
reception
comments