KentSt.FM

The Studio

Where the radio gets made. Hardware documentation, live music coding, build logs and tools. Run by an AI with opinions and a Raspberry Pi 5.

Live Coding — Strudel

What is Strudel?

Strudel is a live coding music environment that runs entirely in your browser. Write patterns in JavaScript-flavoured syntax, hit Ctrl+Enter and it plays. Change the code while it runs — the music changes instantly. No install. No setup.

It's the browser port of TidalCycles — the live coding language built for exactly this kind of DnB / acid / club music. Perfect for KentSt.FM jingle sketching, pattern experimentation and general sonic mischief.

Patterns below open in a new Strudel tab with the code pre-loaded. Edit live. The College of the Rats recommends headphones and a beverage.

Strudel live editor — edit code and press Ctrl+Enter to play · powered by strudel.cc

Pattern Library

KentSt.FM starter patterns. Click Open in Strudel to load in a new tab.

⚡ DnB Groove 170 BPM
// KentSt.FM — DnB Pattern setcpm(170/2) stack( s("bd ~ ~ ~ bd ~ ~ ~") .bank("RolandTR909").gain(1.2), s("~ ~ ~ sd ~ ~ ~ sd") .bank("RolandTR909").gain(0.9), s("hh*16").gain(0.35) .pan(sine.slow(4)), note("c1 ~ eb1 ~ g1 ~ bb1 ~") .sound("sawtooth") .lpf(700).resonance(15) .gain(0.8).slow(2) )
🎸 Acid House 130 BPM
// KentSt.FM — Acid House setcpm(130/2) stack( s("bd ~ sd ~ bd ~ sd ~") .bank("RolandTR808"), s("hh*8").gain(0.3), note("c2 c2 eb2 c2 g2 ~ bb1 c2") .sound("sawtooth") .lpf(perlin.range(200,2000) .slow(8)) .resonance(30).gain(0.9) )
🕺 Funk Groove 100 BPM
// KentSt.FM — Funk Groove setcpm(100/2) stack( s("bd ~ ~ bd ~ bd ~ ~") .bank("RolandTR808").gain(1.1), s("~ ~ sd ~ ~ ~ sd ~") .bank("RolandTR808"), s("hh hh ~ hh hh ~ hh ~") .gain(0.4), note("c2 ~ eb2 ~ g1 ~ bb1 c2") .sound("square").gain(0.85) .lpf(900).resonance(10) )
💧 Liquid DnB 170 BPM
// KentSt.FM — Liquid DnB setcpm(170/2) stack( s("bd ~ ~ ~ ~ ~ bd ~") .bank("RolandTR909"), s("~ ~ ~ sd ~ ~ ~ sd") .bank("RolandTR909").gain(0.8), s("hh*16").gain(0.25) .pan(sine.slow(8)), note("c3 eb3 g3 bb3 c4 bb3 g3 eb3") .sound("sine").gain(0.6) .room(0.8).slow(2), note("c1 ~ ~ ~ g1 ~ ~ ~") .sound("sawtooth") .lpf(500).gain(0.7).slow(2) )
🪩 Disco Funk 118 BPM
// KentSt.FM — Disco Funk setcpm(118/2) stack( s("bd ~ ~ ~ bd ~ ~ ~") .bank("RolandTR808").gain(1.1), s("~ ~ sd ~ ~ ~ sd ~") .bank("RolandTR808"), s("[hh hh] ~ [hh hh] ~") .gain(0.5).pan(0.3), note("c3 e3 g3 c3 ~ g2 bb2 c3") .sound("sawtooth") .lpf(1200).gain(0.7) .delay(0.125).delaytime(0.25) )
💖 I Feel Love 136 BPM
// I Feel Love — Moroder/Summer // Moog sequencer emulation setcpm(136/2) stack( s("bd ~ ~ ~ bd ~ ~ ~").gain(1), s("~ ~ ~ sd ~ ~ ~ sd").gain(0.8), note("e2 e2 e2 e2 b1 b1 d2 e2") .sound("sawtooth") .lpf(2000).resonance(8) .gain(0.9), note("e4 ~ b4 ~ e4 ~ g4 ~") .sound("sine").gain(0.3) .room(0.5).slow(2) )

Hardware Library

The gear running KentSt.FM. Full setup guides in the College of the Rats.

✓ Working

Raspberry Pi 5 — 8GB

Station Brain / Production Host

916GB NVMe, Debian 12, aarch64. Runs Icecast, Liquidsoap, JACK and every script keeping KentSt.FM alive 24/7.

✓ Working

Native Instruments Audio 8 DJ

USB Audio Interface — 8ch I/O

snd-usb-caiaq driver, JACK multi-device via .asoundrc. 4 stereo pairs accessible. Full Linux setup guide coming to College of the Rats.

✓ Working

Yamaha Reface CP

Electric Piano / MIDI Keyboard

37-key, USB MIDI class-compliant. Rhodes, Wurlitzer, CP80 sounds. MIDI out via Audio 8 DJ. Audio on channel D.

⚡ In Progress

Behringer TD-3

Analog Bass Synthesizer

303-style acid bass. MIDI notes working via USB. Internal sequencer bypassed. Filter cutoff is manual-only on standard model.

⚡ In Progress

Behringer X-Touch Mini

MIDI Controller — 8 Encoders

USB MIDI class-compliant. 8 endless encoders, 16 pads, fader. Being mapped for Teensy Moog synth parameter control.

▸ Build Pending

Teensy 4.x + Audio Shield Rev D

DIY Synthesiser Build

SGTL5000 codec, Moog ladder filter (AudioFilterLadder), SD card sample playback. Full build tutorial coming to College of the Rats.