Strudel did something many other approaches to live coding have failed to do imho. No hosting needed. Just open the web based REPL and go. Great entry to live coding, but you quickly run into limitations.
Here is a piece inspired by Dawn of Midi and my attempt at taking a piano synth and trying to make it sound like a lof of different things.
Copy, paste, modify.
const bpm = 138;
setcps(bpm/60/4);
// Pattern 1: lower melodic pulse
const bass_pulse = note("<d2 f2 a2 g2>")
.s("piano")
.slow(4)
.gain(rand.range(0.45, 0.65))
.attack(0.005)
.decay(0.8)
.sustain(1.2)
.release(1.2)
.lpf(800)
.room(0.3)
.delay(0.15)
.delaytime(0.375)
.delayfeedback(0.25)
.pan(0.5);
// Pattern 1.5 (?): layered base
const bass_pulse_2 = note("<d2 f2 a2 g2>")
.s("piano")
.slow(4)
.gain(rand.range(0.45, 0.65))
.add(note(12))
.attack(0.005)
.decay(0.8)
.sustain(1.2)
.release(1.2)
.lpf(800)
.room(0.3)
.delay(0.15)
.delaytime(0.375)
.delayfeedback(0.25)
.pan(0.5);
// Pattern 2: Mid-range polyrhythm
const mid_pattern = note("<a3 c4 d4 f4 a3>")
.s("piano")
.struct("x(5,8)")
.gain(rand.range(0.25, 0.45))
.attack(0.008)
.decay(0.4)
.sustain(0.05)
.release(0.6)
.lpf(perlin.range(1200, 2200).slow(8))
.room(0.5)
.pan(rand.range(0.3, 0.7));
// Pattern 3: repetitive pulse
const high_pulse = note("d5 [~ d5] d5 ~")
.s("piano")
.fast(2)
.gain(rand.range(0.18, 0.35))
.attack(0.01)
.decay(0.3)
.sustain(0)
.release(0.4)
.lpf(2800)
.room(0.6)
.delay(0.25)
.delaytime(0.1875)
.delayfeedback(0.3)
.pan(0.7);
// Pattern 4: Sparse accent notes (3 over 4 polyrhythm)
const accents = note("a4 ~ f4")
.s("piano")
.slow(2)
.gain(rand.range(0.35, 0.55))
.attack(0.5)
.decay(0.6)
.sustain(0.9)
.release(0.9)
.lpf(1800)
.room(0.45)
.pan(0.2)
.sometimes(x => x.delay(0.3).delayfeedback(0.4));
// Pattern 5: Extended mid-range polyrhythm (13 over 16 - cello thingie)
const mid_long = note("<a3 c4 d4 f4 a3 c4 e4 d4 f4 g3 a3 c4 d4>")
.s("piano")
.struct("x(13,16)")
.gain(rand.range(0.32, 0.48))
.attack(0.06)
.decay(0.9)
.sustain(0.25)
.release(1.1)
.lpf(perlin.range(800, 1400).slow(12))
.lpq(4)
.room(0.55)
.delay(0.18)
.delaytime(0.25)
.delayfeedback(0.3)
.pan(rand.range(0.35, 0.65));
const high_long = note("<d5 a4 f5 d5 c5 a4 g4>")
.s("piano")
.struct("x(7,8)")
.gain(rand.range(0.28, 0.42))
.attack(0.05)
.decay(0.8)
.sustain(0.3)
.release(1.0)
.lpf(sine.range(1000, 1600).slow(8))
.lpq(3.5)
.room(0.6)
.delay(0.22)
.delaytime(0.1875)
.delayfeedback(0.35)
.pan(0.7);
stack(
bass_pulse,
bass_pulse_2,
mid_long,
high_long,
mid_pattern,
high_pulse,
accents
);