Six monophonic voice slots, each re-selecting its degree on an independent cycle of 7, 11, 13, 17, 19 and 23 beats. The lengths are pairwise coprime, so no two transitions coincide and the full state recurs only every 7 436 429 beats.
| Slot | Engine | Cycle | Mix | Note | To next change | Synthesis |
|---|
No sample material is used at any stage. All output is synthesised in real time from oscillator and noise sources instantiated per note, using the Web Audio API only — no external libraries, no plugin host, no server component. Six monophonic voice slots each sustain a single degree and re-select on independent cycles of 7, 11, 13, 17, 19 and 23 beats. As the cycle lengths are pairwise coprime, voice transitions never coincide and the full state does not recur for 7 436 429 beats.
The Web Audio API is not a JavaScript library. It is a native DSP
subsystem within the browser, executing on a dedicated real-time audio
thread at a render quantum of 128 frames, typically at a sample rate of
48 kHz. Oscillators, biquad filters, delay lines and waveshapers are
compiled implementations equivalent in class to those of a conventional
plugin. The script layer performs no sample-level processing. Its sole
functions are graph construction — instantiating and connecting nodes —
and parameter automation, submitted as sample-accurate events against the
audio clock. Each control writes to an AudioParam, an
automation lane with an intrinsic ramp time, rather than triggering
recalculation of the signal.
Event dispatch follows the standard lookahead model. A control timer runs at a 25 ms interval and enqueues every event falling within a 250 ms horizon, each stamped with an absolute audio-clock time. Timing is therefore decoupled from the main thread: garbage collection, layout or dropped animation frames do not displace scheduled events, which have already been committed to the audio thread.
The instrument is a six-voice hybrid-architecture generative drone synthesiser. It is hybrid in that the voice slots do not share a synthesis method: two are subtractive, two are two-operator FM, one is a modal resonator bank and one is an additive sub-oscillator pair, with the assignment determined by the Engine selector. It is generative in that no note-on source exists — neither keyboard input nor a stored sequence — each slot independently determining its own transition times and target degrees. It is a drone instrument in that voice lifetimes overlap by design: envelope segments are measured in seconds, so successive harmonic states cross-fade rather than succeed one another.
It is not a sample player, a wavetable engine or a physical model, and it holds no static patch state. A note is an ephemeral subgraph of approximately twenty nodes, instantiated at note-on with independently randomised envelope segments, filter Q and modulation depths, and disposed of after release. No two note instances within a patch are identical.
The Engine selector determines the architecture assigned to each slot together with source waveform, filter response type, Q and detune scaling, FM ratio set, resonator partial series and envelope multipliers. Engine C remaps five of the six slots to resonator banks; engine D remaps five to FM pairs.
Voice state is not static for the duration of a note. At a 2.2 second interval, every sounding voice receives new targets for filter cutoff, ring-modulator frequency and FM index, applied as exponential approaches with time constants of one third of a 3–12 s span. Attack and release segments are randomised per note within 3–14 s, producing overlapping voice lifetimes and continuous cross-fade between harmonic states. The spectral content of a note sustained for 40 s differs measurably between onset and release. The Morph control scales all of the above time constants inversely.
Glide sets how long one drone takes to hand over to the next. It multiplies every attack and release: at 50 — where the instrument has always sat — a note takes five to fourteen seconds to arrive, so chords cross-fade; at 0 the multiplier falls to 0.06 and notes change in under a second, which reads as a cut; at 100 it triples, and a single note can take three quarters of a minute to swell. The readout shows the mid-point in seconds, and it moves with Morph because the two multiply.
The twelve pitch classes have a natural order from dark to bright: their position on the circle of fifths. Flat second, flat sixth, flat third, flat seventh, fourth, then the fifth, ninth, sixth, third, major seventh and sharp fourth. Mood slides every degree of the active set a fixed number of places along that line — up to five in either direction — while the root and the fifth stay where they are, so the harmony keeps its floor while its colour tones move. A set that reads as C F G A♯ D♯ at the centre becomes C E F♯ G B at the top and collapses toward C C♯ G at the bottom. It applies after the scale mask, so it works the same on any scale, and every voice re-picks as soon as you let go of the slider, so the change is immediate rather than trickling in over the following cycles.
It is also a macro over the timbre. Below centre it dirties the sound — drive climbing to 30×, hard clipping and then bit reduction, resonance up, the voice filter closing — so that the very bottom is a distorted, resonant, metallic version of the same instrument. Above centre all of that is switched off — no drive, no fold, no crush — and the character turns toward slow consonant ambient: envelopes lengthen, detuning tightens, ring and FM back off, reverb and echo open up, and the filter stays deliberately short of wide open so the top end is warm rather than glassy. That, with a set that lands on major sixth and ninth material, is what makes the bright end read as hopeful rather than merely higher.
At the ends of its travel it goes further than knob values. The degree set is replaced by one voiced for that mood; the engine changes to one whose FM ratios are whole numbers and whose resonator series is harmonic, so the inharmonic sources are gone rather than merely turned down; and the six slots are re-stacked into separate registers — roots and fifths at the floor, thirds above them, sixths and ninths near the top — so no two voices can land a third apart down where that turns to mud. Sour notes in a slow pad come from those things far more than from the filter. Everything it does lands on the ordinary controls, so you can see what changed and take over from there, and Shuffle re-applies the macro afterwards — a throw of the dice changes everything else but leaves you in the mood you chose. The same holds in Auto: the slider stays live while the machine plays, it is the one control Auto never drifts, and whenever it sits away from the centre it overrides Auto on the controls it governs.
Pitch is not represented in semitones. Each degree is an index into a
cents table, and frequency is derived as
root · 2^((cents[d] + octave · span) / 1200). Five tables are
provided: 12-tone equal temperament, five-limit just intonation,
a stretched tuning of 101 cents per step with a 1212 cent
octave, 11-tone equal temperament, and an irregular 12-tone table. Scale
masks are mapped proportionally onto the active table, so interval
character is preserved under tunings whose cardinality differs from
twelve.
State is held entirely in the page. Copy link serialises the complete state — every knob, both note lines, the register contents, the mixer — into the address bar as a query string. The payload is packed as bytes rather than text, every continuous control carried as one 16-bit fraction of its own range, which fits the whole instrument in about 230 characters: short enough to paste into a message without a chat client breaking the link. Opening one restores that patch before the first note sounds, which makes the link itself the save format — nothing is stored on a server. Transport is also on the keyboard: space for play and stop, A for Auto, S for Shuffle, R to record.
The arpeggiator and shift register derive their note pools from the degrees currently held by the voice slots, guaranteeing agreement with the prevailing harmony. The register is a software implementation of the Music Thing Modular Turing Machine: a 16-bit circular shift register in which, on each clock, the bit shifted out of the tail is written back to the head, inverted or not according to the Lock control. At maximum the sequence is deterministic and repeats every selected length; at the centre position the write-back is randomised; at minimum the bit is always inverted, giving a sequence of twice the selected length. Pitch is decoded from the leading eight bits as a binary-weighted value in the range 0–255, normalised and scaled by Range across the available pool; gate events are decoded from a fixed three-bit tap at the tail compared against Density, so a locked register produces a fixed rhythm as well as a fixed melody.
Six percussion channels, no sample material. A five-by-five map of rhythm nodes is interpolated bilinearly to a per-step probability field, thresholded against each channel's own density, and dispatched as sample-accurate events against the audio clock.
| Channel | Model | Tune | Tone | Attack | Decay | Density | Send | Mangle | Mix | Pitch | Level |
|---|
No sample material is used at any stage. Every hit is synthesised at the moment it sounds, from oscillator and noise sources instantiated per event and torn down when their envelopes complete, using the Web Audio API only — no external libraries, no plugin host, no server component.
Pattern data is held as a five-by-five map of nodes. Each node carries three sixteen-step tables of eight-bit step levels: one for the low drum, one for the accented backbeat, one for the closed hat part. Nine of the twenty-five are authored directly and sit at the even coordinates; the sixteen between them are derived by interpolation with a fixed rotational offset, so the map varies continuously without any two nodes being identical.
At playback the map is read at a continuous coordinate. The four nodes surrounding that coordinate are interpolated bilinearly to give a level for every step of every part. Density then states how many steps of the bar fire; the map decides which, by ranking every step and taking the strongest. Opening the density up therefore adds hits in order of importance rather than at random, and velocity follows the level, so the ones that arrive last arrive quietly.
Three further channels are derived from the same field rather than stored: the open hat reads the closed hat table weighted onto the off-beat eighths, the first percussion channel reads the complement of the two drum parts so that it lands in the gaps, and the second reads the hat table in retrograde. Each is normalised and keeps its own density, so the derivation is a starting point and not a lock.
Interpolated rhythm map after Mutable Instruments Grids — © Émilie Gillet
Chaos adds a signed offset to every step level before ranking, drawn from a counter-seeded generator so that a bar is reproducible and only changes when the seed does. Above about three quarters of its travel the offset exceeds the range of the map itself, at which point placement is effectively uniform and the map stops being audible. Evolve re-seeds on a schedule; Morph walks the read coordinate a little every bar.
Any step in the grid can be held on or held off by hand. Held steps are applied after ranking and are not disturbed by density, chaos or re-seeding, so a fixed backbone can be pinned while the rest of the pattern continues to be generated.
One control, spread over eight amounts that are derived from it rather than stored, all of them acting after the pattern has been worked out, so none of them changes what the grid shows. The curve is square-law, so the lower half of the travel stays close to clean. Ratchet subdivides a step into two, three or four retriggers with a falling velocity contour. Skip removes generated hits after they have been placed, so the pattern thins without the map changing. Stutter substitutes the previous beat for the current one. Chop applies a gate to the output bus at a rate unrelated to the tempo. Bend applies a per-hit pitch offset. Crush is bit reduction by quantised transfer curve; Fold is a wavefolder ahead of it, and a little drive sits behind both. Jitter, in the clock section, is a separate control. Every channel carries its own Mangle amount in the Channels panel, so the hats can be wrecked while the kick is left alone.
Somewhere else, not something else. It loads a different kit — never the one already running — moves to a new coordinate on the map, takes a new seed, and re-rolls how open each channel is, how its voice is tuned and how long it rings, along with the pattern length, the division and the swing. Each channel's decay is drawn in proportion to what its model wants, so a hat stays a hat. The tempo, the mixer, the master level and the mangle knob are left where you put them, and the drive and filter ranges it can reach stop well short of where the mangle knob goes.
Twelve synthesis models are available to any channel, from the Channels panel. Kick and sub are single oscillators under a fast exponential pitch envelope with an optional transient. Snare and rim sum band-limited noise with two inharmonic partials. The hat and metal models are six square oscillators at fixed non-integer ratios through a high-pass and a resonant band-pass — the classic six-oscillator arrangement — with the metal model adding ring modulation and a longer decay. FM is a two-operator pair whose index falls with the amplitude envelope. Wood, tom, clap, blip and noise complete the set.
Each channel has a gain and a stereo panner, and a parallel send. The direct sum passes a compensated drive stage — its amount, wet mix, post-filter tone and transfer curve all live in the Kit panel — then the crush and chop stages. The send sum feeds four parallel effects: a short feedback comb, a bank of modulated delays, a filtered tape echo, and a convolution reverb built from an exponentially decaying noise impulse generated at run time. Direct and effected paths meet, and only then does the signal reach the filter — a biquad with its own low-frequency oscillator — so closing the cutoff takes the whole machine down together rather than only the dry path. The master level and a limiter follow it.
Space to start and stop, S for Shuffle, R to record, 1–6 to solo a channel, 0 to clear the solos, M to cycle the display.
gregdalmata.com 2028