the eleven-hundred-parameter drummer

Spikes as rhythm: what happens when the representation maps one-to-one to musical output, the dynamics are fixed physics, and only readouts learn. Every number below is committed in the whitebox-lm repo (M9–M12 docs), failures included — several sections exist because a prediction died.

1 · the contract

Time is integer 20 ms cells (or musical ticks under a transport). Each cell holds 0 or 1 per drum voice. The model sees preceding cells and emits the probability the next cell fires. Generated MIDI is exactly the cells where it fired. No tokens, no embeddings, no semantic gap between model output and music. Internal state is decaying traces, resonators and clock phases — fixed physics; the only learned object is a linear readout (one small MLP in one rung).

2 · what a clock is worth

The one quantity that kept showing up everywhere, measured in bits of predictive information per drum event (Groove MIDI Dataset, real drummers):

machinery (alone)trainablestatebits/event
transport-clock phase bins170+0.445
10 decaying spike traces1110+0.232
500-tap FIR history501500+0.227
16 tempo resonators3332+0.158
clock + traces4310+0.630

The clock alone — zero recurrent state — beats every self-clocked model we built. Clock and history are near-additive: where in the cycle plus what has been played. And the clock’s value is horizon-invariant (+0.447 predicting 20 ms or 2 s ahead) while history decays to a small permanent style floor within ~100 ms. Falsified along the way: our bet that resonators would win at long horizons — they lose to plain traces at every horizon. In a DAW the clock is free. Take it.

3 · the drummer

original performance

A real drummer (GMD, soul groove, 86 bpm), MIDI rendered directly.

through the spike representation

The same performance pushed through the exact encoding the model sees (20 ms bins, 9 voices) and back out, original velocities carried through. Whatever survives here is the representation’s ceiling.

the 1,107-parameter drummer

Two bars of the human seed, then sixteen bars generated: clock-conditioned spike-GLM (+0.85 bits/event with causal within-tick coupling), learned velocity head. Free-runs stably — rate, meter and voice balance hold without any imposed limits.

Honest ledger for this section: causal coupling is worth +0.06 bits/event — an earlier pseudolikelihood bound said +3.2, and that number was information flowing backwards through the conditioning. The correction is the published figure.

4 · a memory that returns to the groove

Slot memory after the Spiking Hopfield Network recipe: winner-take-all bar-pattern slots, local refresh, threshold-gated consolidation — online, gradient-free. Retrieval weighted by consolidation depth turns recurring patterns into attractors. The test: seed a groove, force a real rock fill into bar 8, listen to what happens next.

with consolidated memory

Similarity to the seeded groove after the fill: .07 → .24 → .35 → .42 → .35 → .37 → .44 → .53 — it finds its way back (with one honest dip: our own metric flags the trajectory as non-monotone).

copy-rule control

Identical everything, memory feature off: .21 → .15 — repeats fill fragments and drifts. The attractor was doing the work.

5 · a space you can steer

navigated generation

Bars clustered into 12 inspectable pattern modes (each mode is literally a drum-machine grid you can read). The mode path here is hand-chosen: seven bars groove, one bar sparse, repeat — generation as something you drive, not dice you roll. Prediction failure kept on the books: no unsupervised cluster was majority-fill — fills are 2% of bars and need their own labeled vocabulary.

6 · harmony, vertical and horizontal

Chords are vertical (what sounds together — statistics own it), melody and progression are horizontal (what follows what — sequence memory owns it). Factor music that way and the decisions land at music’s own rate over tiny vocabularies:

real progression, re-voiced

A real ASAP performance’s harmonic skeleton through our chord lattice (root-normalised chroma clusters — the major triad emerges unsupervised) and a block-chord decoder. This is the abstraction’s ceiling.

a counts table, playing

Same decoder, chords sampled from a Markov-2 counts table over 96 symbols — no neural network at all. Order-structure in progressions only becomes measurable on a beat-aligned lattice (5.63 → 5.33 bits/chord, blind → bar).

7 · the boundary, audible

where statistics end

Free-clock piano from the same machinery: calibrated (scheduled sampling fixed a 460-events/s avalanche), voice-leading kernels learned an interpretable rule (“move locally, don’t restrike”) — and it still sounds random, because melody is a sequence process and bags of decayed statistics cannot represent “mid-phrase”. We kept this render as the honest edge of the method: 44,000 parameters flipping coins at 50 Hz, versus music making 2–3 nearly determined decisions per second.

8 · closing the loop with real audio

The live-instrument chain needs audio → events. We blind-replicated an external excitable-commitment unit (the HEU — reimplemented from the written paper only; its core separation result survived, our extension of it failed twice, all filed on hi-sci-collab) and wired it in. Against the standard onset detector it loses on F1 (0.29 vs 0.42) and wins on discipline (2.4× less fragmentation) — and its accent-selective events consolidate better than perfect MIDI (margin +0.166 vs +0.064, density-controlled).

standard peak-picker, clicking along

Hip-hop groove, 92 bpm. Flux + adaptive peak-picking: more onsets, more stutter.

excitable commitment, clicking along

Same groove, HEU commitment: fewer clicks, riding the accents.

call and response

Eight bars of real audio in — commitment → clocked GLM — eight bars generated out. The first audio-in/response-out artifact of the program. Known flaw, on the record: the response runs denser than the call.


the law this page keeps demonstrating

One envelope cannot be post-decay and pre-sustain. One leaky integrator cannot drum. Fast traces cannot hold a mode. One state cannot be mid-phrase. One pooled statistic cannot bind. Conflicting temporal configurations demand independent state variables — and parameter search cannot substitute for state. Everything above is that sentence, measured five ways, at under 1,200 trainable parameters a time.

AI-generated research. The experiments, code and write-ups on this site were produced by AI agents (Claude and Codex) working semi-autonomously, directed at a high level by a human. Nothing here is peer reviewed and none of it is affiliated with an academic institution. Measurements are reported as taken — including the nulls, the caveats and the corrections — but the work has had no external review.