OPERATOR'S FIELD MANUAL
A microtonal ambient drone machine — eight voices, one gesture per limb. All audio synthesized in code.
DROP 005 · BUILD V005 · ZRGRT · MMXXVI
Independent instrument — inspired by classic ambient hardware; unaffiliated with any hardware manufacturer.
This manual documents LUNAR-24 DROP 004 · build V004, an independent software instrument for LÖVE 11.5. LUNAR-24 is not affiliated with, endorsed by, or a reproduction of any hardware manufacturer; it is an original work inspired by classic semi-modular ambient hardware. No hardware firmware or manual text is reproduced. All audio is synthesized in code, and all artwork and diagrams are original.
The instrument is released under the MIT License, © 2026 the ZRGRT. This manual is part of that release. Facts and ranges follow the shipped build; where the software deliberately departs from the hardware rule that inspired it, the divergence is named in Appendix B.
1
2
3
4
5
6
7
8
10
11
12
13
14
15
16
17
PLATE 1 — The panel. Everything lives on one 1600×1034 surface: six drone voices around the effector, the two v/oct voices, the ten-channel mixer, the dual filter and the twelve-plate keyboard.
| # | MODULE | WHAT IT DOES |
|---|---|---|
| 1 | DUAL EFFECTOR (top centre) | Two cartridge slots — X / Y / Z, BLEND, MASTER; click the card for the WALLET. |
| 2 | DRONE 1 · 2 (top left) | Classic five-oscillator swarm voices with MOD orbs and env outs. |
| 3 | DRONE 4 · 5 (top right) | The same classic pair. |
| 4 | DRONE 3 (mid left) | Papa Srapa Schmitt pair: a square modulator drives FM/AM and S&H noise. |
| 5 | VCO A (mid left-centre) | Morphing AS3340-style voice; sync master. |
| 6 | VOICE MIXER (centre) | Ten channels with PAN + VOL; the channel label is its mute. |
| 7 | VCO B (mid right-centre) | Mirror of VCO A; A's output is normalled into its FM input. |
| 8 | DRONE 6 (mid right) | Second Papa Srapa voice; boots latched in FM+AM at ~3 Hz. |
| 9 | FILTER L / FILTER R | Centre, behind the EFFECTOR tab: dual 12 dB Polivoks-style LP/BP with drive and distortion. |
| 10 | LFO A (bottom far left) | Square↔triangle morph, unipolar 0…+10 V. |
| 11 | JOYSTICK (bottom left) | Position-locking X / Y with offset windows and four quadrant LEDs. |
| 12 | 5 STEP SEQ. VOLTAGE (bottom centre) | Buchla-style 0…+5 V voltage source; shared pulser + PULSER 2/3 + S&H strip. |
| 13 | PREAMP + ENVELOPE FOLLOWER (bottom right-centre) | Mic / line input; ENV CV + gate output. |
| 14 | LFO B (bottom far right) | Second morphing LFO. |
| 15 | SENSOR KEYBOARD (bottom centre) | Twelve touch plates in two arcs; performance strip above the left arc. |
| 16 | DRONE VOICES keypad (bottom right) | 2×3 momentary gates — same as computer keys 1–6. |
| 17 | Utility bar (top right) | S save · L browser · SCOPE · SKIN · ? help · P patch bay. |
| NOUN | MEANING |
|---|---|
| plate | One of the twelve touch keys of the sensor keyboard. |
| arc | Half of the keyboard: six plates left or right of the eclipse. |
| voice | A sound generator — six DRONE voices plus two melodic VCO voices (A/B). |
| swarm | The five sawtooth generators inside a classic drone voice (1, 2, 4, 5). |
| orb | The moon-disc photo-detector beside each drone block; shade it to bend pitch. |
| cartridge | An effect card — 15 of them, three programs each — loaded into the effector. |
| wallet | The cartridge browser; click the loaded card to open it. |
| comb | The effector-combiner: the dual cartridge chassis with BLEND and MASTER. |
| strip | The keyboard control strip above the left arc. |
| bay | The patch bay (P) — every source and destination in one view. |
Both skins (lunar, solar) obey the hardware grammar.
| COLOUR | FAMILY | WHERE YOU MEET IT |
|---|---|---|
blue #2979ff | modulation sources | LFO, pulser and S&H clocks, joystick, arp RATE/INT |
green #2bc7ab | S&H / "sound machine" | Sample & hold and the noise voice |
orange-red #d1541c | destinations | Filter cutoff/resonance, sequencer stage knobs, preamp and envelope controls |
cream #e9e0d2 | master / blend | BLEND, MASTER, output levels |
| silver + black | per-voice detail | TUNE / LEVEL / MUTE columns, per-voice filter trims |
The instrument boots already droning. Voices 1, 2 and 6 are latched,
the boot preset is loaded, and the factory patch is in place:
LFO_A → MIX_CUT_R, JOY_Y → MIX_CUT_L,
JOY_X → DRONE_PITCH.
| GESTURE | WHAT IT DOES |
|---|---|
| S / F5 | save a timestamped preset; L opens the browser. |
| F9 | start/stop a master-bus recording (48 kHz / 16-bit stereo WAV, ~11.5 MB/min, capped at 30 min / 2 GB per take). |
| ESC (hold ~0.5 s) | quit — a ring fills at the bottom bar; a bare tap is safe. |
NO AUDIO - SEE LOG. Recovery and power-user knobs are in
Appendix D.3.An instrument begins as a landscape. This one begins as a night sky already sounding.
LUNAR-24 is an experimental microtonal ambient drone machine. Eight voices — six drone swarms and two melodic VCO voices — run as separate blocks into a mixer with pan, a double filter, a distortion stage and a double effector. CV sources are routed through a patch bay. The intent: build full-blown drone and ambient tracks without multitracking — one gesture per limb keeps eight voices evolving.
| BLOCK | WHAT YOU GET |
|---|---|
| 6 DRONE voices | 5 sawtooth oscillators each; voices 3 and 6 are Schmitt-pair Papa Srapa voices (square modulator → FM/AM + S&H noise). |
| 2 V/OCT voices | VCO A/B: morphing waveforms, PWM, linear FM, sync, sub oscillator, ADSR + M loop, per-voice filter. |
| Filters | Dual 12 dB Polivoks-style (LP/BP, EXP/LIN, drive, distortion). |
| Effector | Dual cartridge combiner — 15 cartridges × 3 programs = 45 programs (13 derived from the reference card set + 2 app-original: MOONDOG, ECLIPSE). |
| Mixer | 10 channels with pan; EXT.AUDIO and mic PREAMP channels. |
| CV | 2 LFOs, 3 pulsers, 2 S&H, 5-step voltage sequencer, locking joystick, envelope follower. |
| Keyboard | 12-plate microtonal sensor keyboard: 25 scale banks, quantiser + per-note mask, arpeggiator, keyboard sequencer, pressure, vibrato. |
| Patch bay | 40+ sources × 28+ destinations on a live blueprint: module schematic cards, tap source → tap dest, flow register with amount meters, undo — the wire is a graph, not a drawing. |
| Extras | Scope (waveform + spectrum), two skins, preset save/load, Scala .scl import. |
| Transport | 48 kHz stereo, pure-code DSP; the native real-time audio bridge is the only engine (256-frame ring blocks), starting at boot with default pacing vsync off + cap 120 — the low-jitter studio posture. If the bridge or device refuses, the app runs silently and the HUD shows NO AUDIO - SEE LOG (power-user envs: Appendix D.3). |
Boot state. Everything lives on one 1600×1034 panel. It boots already droning: voices
1, 2 and 6 are latched, a boot preset is loaded, and the factory patch
LFO_A → MIX_CUT_R, JOY_Y → MIX_CUT_L, JOY_X → DRONE_PITCH
is in place.
Sound travels in one direction. Voltage travels wherever you patch it.
| STAGE | MODULE | PATCH / PRESET NAMES |
|---|---|---|
| Voices | DRONE 1–6, VCO A/B | ENV_1…6, ORB_1/2/4/5, EG_4/5 |
| Mix | VOICE MIXER — 10 ch, PAN + VOL | — |
| Filter | FILTER L/R — 12 dB Polivoks, LP/BP | MIX_CUT_L/R, MIX_RES_L/R |
| Distortion | DRIVE + DIST per filter side | — |
| Effector | DUAL EFFECTOR — two cartridge slots | CART_X/Y/Z, CART_CV1/2/3, BLEND |
| Output | WET OUT; DRY sends and EXT.AUDIO / PREAMP feed the mixer | drySends.v4/v5 |
Each VCO voice also has a dry output (VCO A/B pre-filter, max 1 V); EXT IN with a preamp and the mic feed the mixer directly.
Five sawtooths, one register ladder, no pitch input: tune it the way you tune a room.
Five sawtooth generators per voice in a register ladder — oscillators 1–2 low, 3 medium, 4–5 high (≈B0–D7). No V/oct: tune by ear, mute to build chords, and let the orb bend pitch with the light.
| CONTROL | RANGE | WHAT IT DOES |
|---|---|---|
| TUNE ×5 | ±1 octave (fine cents) | Per-generator tuning. Hardware has no V/oct input, only knobs. |
| LEVEL ×5 | 0–1 | Per-generator level into the voice. |
| MUTE ×5 | on/off | Kills that generator; the 1–5 LED strip at the block edge lights for a muted oscillator. |
| MOD ×5 | on/off | On: the generator follows the orb, DRIFT and DRONE_PITCH CV. Off: "generators run stably, without deviations". |
| register ladder | 0 / +1 / +2 / +3.5 / +5 oct above BASE | The five generators' fixed octave offsets (continuous in software; discrete fixed ranges on hardware). |
| SUB tap | square, osc-1 ÷ 2, −12 dB | Fixed low-end anchor under the ladder. |
| detune chorus | ±12.8 cents, stereo-spread | Rides on top of the ladder; mutes build chords across the registers. |
| VOLT | −1…+1 | Negative half transposes the voice down (to −2 oct); positive half is the cross-FM depth between the five generators (neighbour taps 0.5/0.4/0.3/0.2), scaled by the voice's AR envelope. Bipolar is a kept divergence (hardware transposes down, then cross-FMs past half-stroke). |
| HOLD / GATE | on/off | HOLD latches the voice on; GATE sounds only while pressed (keypad or keys 1–6). |
| ATT | 1 ms–4 s | Attack of the AR VCA envelope. |
| RLS | 10 ms–8 s | Release. |
| env LED + env out | 0…+1 (≙ 0…+10 V) | Envelope indicator; patch source ENV_1…ENV_6. |
| DRIFT | 0–50 cents | Ornstein–Uhlenbeck random walk, block-size-invariant (driftTau 0.01–60 s via preset); sign alternates per oscillator, chorus width breathes over 20–40 s, per-osc AM wobble 0.15–0.5 rad/s. |
| orb | up to +8 cents | Photo-detector at the block's right: shade with the cursor; patchable as ORB_1/2/4/5. |
→ SEE ALSO — §8 for SAH_A/SAH_B;
§16 for orbs in the patch bay.
Two Schmitt triggers arguing at audio rate — the machine's most organic voice.
Two Schmitt-trigger oscillators: a low-frequency square modulator and an audio tone. Switch combinations give drone, FM, AM or noise — sirens, surf, monsters, volleys.
| CONTROL | RANGE | WHAT IT DOES |
|---|---|---|
| RATE + ×1/×10 | 1–20 Hz (log) | The square modulator's clock. |
| DIVIDER | ÷1–8 | Subdivides the modulator; the FM/AM pattern repeats at RATE ÷ DIVIDER. Also divides the internal S&H clock. |
| FM / AM switches | on/off | off/off = continuous drone · FM only = pitch wobble · AM only = amplitude wobble · both = FM+AM. (papaMode 1–4 in presets; 5 = clean noise.) |
| MOD | 0–2 | Depth: FM bends pitch by 2^(MOD/2) — ±6 st at 1, ±1 oct at 2; AM swings amplitude full → 1 − MOD/2 (silence at 2). |
DRONE3/6_PITCH · DRONE3/6_FM | ±1 oct (pitch) | Patch destinations for external pitch and depth control. |
| PITCH | 20–400 Hz | Audio square fundamental; hardware C0–E7 approx. |
| OCT · LO/HI | −2…+2 (integer) · one octave | Range switch and octave toggle. |
| NOISE | 0–1 | White noise into the voice (LED tracks it) — also the S&H source. |
| S&H | 0–1 | Depth of the random steps on tone pitch (±4 st at full). |
| clock in | PAPA3_CLOCK / PAPA6_CLOCK | Any clock or LFO samples on each rising edge; unpatched, internal clock = RATE × range ÷ DIVIDER. |
| HOLD / GATE · ATT · RLS · env out | as classic voices | 1 ms–4 s attack, 10 ms–8 s release; ENV_3 / ENV_6. |
PAPA_3_MOD / PAPA_6_MOD | 0…+1.2 (≙ 0…+12 V) | The modulator square as a source, unipolar. |
| clean noise | engine papaMode 5 / "noise" | Dial PITCH to minimum, NOISE up, MOD and DIVIDER high (FM/AM off). |
At boot voice 6 is latched on in FM+AM at ~3 Hz — a brief, musical wobble.
→ SEE ALSO — papa mode codes, Appendix D.4; the sample-and-hold strip, §8.
Two triangle cores, six shapes between them, and a sync that bites.
AS3340-style triangle-core oscillators, six waveforms, cross-normalled A↔B; VCO A carries the sync that resets VCO B.
| CONTROL | RANGE | WHAT IT DOES |
|---|---|---|
| MORPH | 0–5 | SINE → TRI → SAW → INVSAW → SQR → PULSE; one continuous axis, readout shows the nearest shape. |
| TUNE | ±0.5 oct (1 oct of travel) | Hardware is a one-octave knob 0…+1; software is bipolar. |
| VIB | 0–1 | Vibrato depth (rate from the strip VIB R / RATE B). |
| SUB knob + button | 0–1 (0.35 default) | Square sub at half frequency. |
| PAN | L–R | Constant-power pan into the mixer. |
| PWM | 0–1 | Pulse width for the pulse frames; CV dests VCO4_PWM / VCO5_PWM. |
| FM | unipolar: 0 → +0.68 oct @ 25% → +3 oct @ full | Linear FM depth; cross-normalled A↔B. Dests VCO4_LINFM / VCO5_LINFM. |
| OCT+3 / LOW · −1 | switches | Octave range and sub-octave. |
| SYNC (VCO A) | button / VCO4_SYNC > 0.5 | A's phase wrap resets B (B is slave); hard reset carries phase jitter + a 2 ms noise pip — the classic 3340 growl. A rising edge on the VCO4_SYNC CV additionally hard-resets A's own phase (and holds the pair linked while the CV stays high). |
| 1v/oct | 12 st per volt | True 1 V/oct: the keyboard's +8 V is 8 octaves. Dests VCO4_PITCH / VCO5_PITCH. |
| cv / pwm / sync jacks | — | VCO4/5_LINFM, VCO4/5_PWM, VCO4_SYNC. |
| per-voice filter | 20 Hz–20 kHz | LP/BP, EXP/LIN (20 Hz·2^(10x)), CUTOFF / RES / DRIVE / DIST — a LUNAR-24 addition (hardware has only the master filters). |
| ADSR A / D / S / R | 1 ms–4 s / 1 ms–4 s / 0–100% / 10 ms–8 s | Envelope. |
| GATE · HOLD · M | buttons | GATE fires; HOLD keeps the VCA open; M loops the attack→release cycle continuously (D/S bypassed) at any A/R — self-running modulation, no gate needed. |
EG_4 / EG_5 | 0…+8 V | Envelope as a patch source. |
| DRY | 0–1 | Raw morph output, pre-envelope and pre-filter, onto the main bus (drySends.v4/v5). |
→ SEE ALSO — §10 for the keyboard's V/oct normals;
§16 for EG_4/EG_5 in the bay.
The tides: two unipolar clocks that feed the orbs and the filter.
| CONTROL | RANGE | WHAT IT DOES |
|---|---|---|
| WAVE | square ↔ centre mix ↔ triangle | Continuous morph; boots at centre (50/50). Kept exactly from hardware. Sine/saw/ramp remain reachable as patch sources only (VCOA_SINE, VCOA_SAW, …). |
| RATE + ×1/×6/×10 | 0.02–20 Hz (log) | Rate; the switch multiplies. Both LFOs run the same range — hardware doesn't specify per-LFO. |
| out + LED | 0…+1 (≙ 0…+10 V) | Unipolar by design (feeds the orbs and other CV dests); sources LFO_A / LFO_B; LED lights above mid-swing. |
Throw it, leave it. The joystick remembers where the performance was.
Position-locking: throw it and it stays. Click to jump, drag to position; arrow keys nudge.
| CONTROL | RANGE | WHAT IT DOES |
|---|---|---|
| pad | X, Y ±1 (≙ ±10 V) | The physical gesture; out = 0.5·axis + offset, clamped. |
| X / Y knobs | ±1 | Mirror the pad position. |
| OX / OY | ±0.5 | Offset windows: left −10…0 V, centre −5…+5 V, right 0…+10 V (the knob shifts the window by ±5 V). |
quadrant LEDs · JOY_X / JOY_Y | — | Active-quadrant indication and patch sources. |
→ SEE ALSO — the factory patch, §16; arrow-key nudging, Appendix D.1.
Not notes: voltages. Five stages, one shared clock.
A Buchla-inspired source of voltage, not a note sequencer: five stages, each a continuous 0…+5 V.
| CONTROL | RANGE | WHAT IT DOES |
|---|---|---|
| PULSER | 0.25–20 Hz | The one shared clock: source PULSER_1, sequencer internal clock, S&H A's external clock, keyboard external beat. |
CLK (SEQ_CLOCK) | — | Free-running pulse output — emits whether or not the sequencer runs. |
| STAGES | 3 / 4 / 5 | Cycles the number of active steps; step LEDs show the running stage. |
| S1–S5 | 0.00–1.00 (≙ 0…+5 V) | Step voltages, source SEQ_CV — hardware spec kept. |
| gate ×5 | on/off | Gate off kills that step's pulse, not its CV (SEQ_GATE). |
| GATELN | 20 ms–1 s | Gate pulse length. |
| INT/EXT + P1/KEY | — | INT runs from the PULSER; EXT from Pulser 1 or the keyboard beat. Patch SEQ_EXT_CLOCK advances on rising edges. |
| PULSER 2/3 | RATE + WIDTH | Free-running patch clocks (PULSER_2, PULSER_3). |
| S&H A/B | RATE + INT/EXT | A clocks from Pulser 1, B from the sequencer gate (P1 / SEQ); sources SAH_A, SAH_B. |
The keyboard has its own clock and sequencer: KEY_CLOCK,
SEQ_KBD_CV / SEQ_KBD_GATE (see §11).
→ SEE ALSO — the keyboard clock, §11.5;
SEQ_CV among the voltage specs, Appendix A.
The hardware senses tapping through a piezo under its keyboard; the software takes the system input instead.
The preamp takes the system recording device — an external microphone or line source — captured at 8 kHz
mono, feeding the follower and the EXT.AUDIO mixer strip.
| CONTROL | RANGE | WHAT IT DOES |
|---|---|---|
| GAIN | 1–100 (0…+40 dB) | Audio-path gain; the bottom mutes (hardware "set GAIN to minimum" rule). |
EXT in (EXT_SRC) | line / instrument | In LUNAR-24, EXT.AUDIO is its own mixer channel and extAudio has no live source yet (the jack is silent for now; the mic path is live). |
| ENABLE | on/off | Routes the channel into mixer strip 4 (EXT.AUDIO). |
| MIC | arm / idle | Arms the system input device for the preamp and follower (Bluetooth and monitor devices are skipped). Master-bus WAV recording is separate: F9 starts/stops it, and it never auto-starts (unless LUNAR_REC=1 is set — see §16). |
| clip LED | > 0.98 FS | True post-gain clip indicator, holds 1.5 s. |
| FOLLOWER ATTACK / RELEASE | 1–100 ms / 50 ms–1 s | Envelope follower slopes; vertical CV meter. |
| GATE LED | on > 15%, off < 10% | Hysteresis gate activity. |
ENV_CV / ENV_GATE | 0…+1 / 0…+0.8 (≙ 0…+10 V / +8 V) | Patch sources; without a mic the strip reads NO MIC and the follower sits at zero. |
Twelve plates, two arcs, an eclipse between them.
Twelve capacitively sensitive plates in two arcs of six. Pressure follows finger surface area, not force.
PLATE 2 — Sensor keyboard: twelve plates in two arcs, centre clock and transpose cluster. The centre button carries its state as a glyph — triangle = stopped, bars = running.
| CONTROL / JACK | RANGE | WHAT IT DOES |
|---|---|---|
| plates | 12, two arcs | Press/drag a note; hold to swell pressure (≈1.5 s ramp) or drag vertically for direct control. |
| latch | Shift+click / right-click | Latches a plate as a drone note at 75% pressure; click again to release. |
| EDIT (gold) | on/off | Retune plates: click cycles pitch offsets 0 / +1200 / −1200 / +700 / −700 cents. Shift+click (or right-click) toggles the plate's scale degree — the per-note mask. |
| tuning grid | deg = round(col·n/11) | Plates snap to the current scale grid; tuning banks and .scl import set the grid. |
| red button + LED | — | Starts/stops the keyboard clock; the blue LED pulses on the beat. |
| ◁ / ▷ | ±24 semitones | Transpose, readout between them. |
CLOCK IN (KEY_CLOCK_IN) | pulse | External pulse auto-switches the keyboard clock to external; editing BPM reverts to internal. |
KEY_CLOCK | 0…+1 | Patch source pulsing on every keyboard-clock beat, internal or external. |
| V/OCT · gates | 8 oct (0…+8 V) / 0…+10 V | Hard-normalled to VCO A/B internally; dests VCO4/5_PITCH stay free. |
| PRESSURE | 0…+0.8 (≙ 0…+8 V) | Source PRESSURE / PRESSURE_OUT; mode-dependent (§11). |
RESET / KEY_RESET | rising edge | Resets arpeggiator/sequencer; a preset-settable clock reset flag. |
| DRONE VOICES keypad | 2×3 pads 1–6 | Momentary gates for the six drone voices — same as keys 1–6. |
PRESSURE source into the VCO filters.→ SEE ALSO — the strip that reads all of this, §11; pressure modes, §11.5.
The performance brain lives above the left arc.
The strip is a second, self-contained instrument: scale and quantiser, split modes, arpeggiator, sequencer, glide, vibrato and pressure — all read from the plates below.
| CONTROL | RANGE | WHAT IT DOES |
|---|---|---|
SCALE < > | 25 banks | 12 / 19 / 24 / 31 / 41-TET, JI 5-limit major, and all 19 named hardware scales (Semitones, Ionian, Dorian, Phrygian, Lydian, Mixolydian, Aeolian, Locrian, Blues major/minor, Pentatonic major/minor, Folk, Japanese, Gamelan, Gypsy, Arabian, Flamenco, Whole tone). Readout shows name + BANK n/N. |
.scl import | drag onto window | Appends a Scala scale (cents and ratio lines accepted); saved inside presets. |
| QUANT | on/off | Off: continuous microtonal keyboard (drag vertically to sweep between neighbours). On: snaps to scale; per-bank mask applies. |
| ROOT | 55–440 Hz (log) | Quantiser root. |
| CONTROL | RANGE | WHAT IT DOES |
|---|---|---|
| TWIN | 6+6 | Left six plates drive VCO A, right six VCO B, each side tracking its own loudest plate; every parameter shared. |
| SPLIT | 6+6 | Same split, plus independent per-side arp and seq controls (ARP R / SEQ R). |
| CONTROL | RANGE | WHAT IT DOES |
|---|---|---|
| ARP | on/off | Walks the pressed plates in plate order (left→right, per-plate edits included, duplicates deduped). |
| RATE | 0.5–16 Hz | Free-run rate when CLK is OFF. |
| INT | 1–12 | Semitone transposition per VARIATION pass. |
| CLK | OFF / ¼ / ½ / ×1 / ×2 / ×4 | Multiplies/divides the keyboard clock; OFF = free-run. |
| HOLD | on/off | Snapshots the held chord; the snapshot survives release, later presses extend it. |
| direction | UP / DN / PP / RND | Up / down / ping-pong / random. |
| VARIATION | OFF / ×1 / ×2 / ×3 | Repeats the progression transposed by INT, cycling at any pattern length. |
| RHY | 8-step row, length 1–8 | Gold-dot rhythm gate (drag to paint); notes gate at 75% of each step. |
| CONTROL | RANGE | WHAT IT DOES |
|---|---|---|
| SEQ | on/off | Advances only while a plate is held (keyboard run mode). |
| LEN | 2–16 | Sequence length. |
| DIV | ¼ / ½ / ×1 / ×2 / ×4 | Division of the keyboard clock. |
| SEQ E | editor | Drag each step's pitch bar (0.00–0.50 V readout), click the dot row for gates (drag paints), paint the 8-step RHY rhythm row. |
| step pitch | 0…+600 cents | Added to the last held plate pitch (quantised when QUANT is on); gates default on. |
| DIR | FWD / BACK / PP / RND | Direction. |
| CV | CONT / GATED | Continuous, or only while the step's gate is on; sources SEQ_KBD_CV / SEQ_KBD_GATE. |
| CONTROL | RANGE | WHAT IT DOES |
|---|---|---|
| GLIDE | 0–0.3 s | Portamento on both VCOs. LEGATO: glide suppressed for single-plate play, applies with ≥2 plates; no effect while the arp runs (glide always applies). |
| VIB D / VIB R | depth 0–1 / rate 2–8 Hz | Vibrato for VCO A. VCO B has its own VIB depth and RATE B in the VIBRATO block. |
| VIBRATO DELAY | 0–10 s (0.3 default) | Ramp-in after each new gate; after the delay the engine ramps vibrato in linearly to full strength over ≈0.3 s. |
| PCTL | on/off | Pressure scales each voice's vibrato depth from 30% to 100% (vibPressureCtl, preset round-trips). |
| PRESSURE mode | PRESS / ASR / AD / LOOP / RND | PRESS follows plate pressure; ASR rises/falls with playing; AD one attack–decay per press; LOOP repeats while held; RND latches a new random level on each plate press and glides at the RISE/FALL slopes (RATE does not re-roll while a plate is held). Exposed as PRESSURE; hard-patched +20% into both VCO filter cutoffs. |
| RISE / FALL / RATE | 1 ms–10 s / 1 ms–10 s / 0.01–50 Hz | Pressure slopes; RATE is the free-run rate of the pressure machine (no per-hold re-roll in RND). |
| clock | 10–300 BPM (120 default) | Red button run/stop; BPM stepper (− / readout / +) edits tempo; round-trips as keys.clock.bpm. External KEY_CLOCK_IN pulse auto-switches to external; editing BPM reverts to internal. |
| PRESETS A–D | 4 slots | Hold ~0.6 s to save the whole keyboard state (scale/quantiser, root, mode, legato, transpose, arp, sequencer, per-plate edits, glide, vibrato, pressure) to data/presets/kbd_A…D.json; click to load live. Tempo is deliberately excluded. |
Ten channels, one order, pan and silence.
Ten channels, same order as the hardware panel:
DRONE 1 · DRONE 2 · DRONE 3 · EXT.AUDIO · VCO A · VCO B · PREAMP · DRONE 4 · DRONE 5 · DRONE 6
| CONTROL | RANGE | WHAT IT DOES |
|---|---|---|
| PAN | L–R | Constant-power pan per channel. |
| VOL | 0–1 | Channel level. |
| label | click | Mute toggle (red = muted). |
The Polivoks stance: resonance that keeps its low end.
A double 12 dB Polivoks-style filter — stable, no tuning, and “you will not lose low frequencies when increasing resonance”. FILTER L / R live under the EFFECTOR tab.
| CONTROL | RANGE | WHAT IT DOES |
|---|---|---|
| FREQ | 20 Hz–20 kHz | Cutoff; exponential law default (20 Hz·2^(10x)); CV dests MIX_CUT_L/R. |
| RES | 0–1 | Resonance; keeps the low end while it climbs. Dests MIX_RES_L/R. |
| DRIVE | 0.5–8 | Distortion amount (hardware GAIN). Above 2 a post-filter VCA aggression stage engages on the mix filters — the drive stops being input warmth and gains post-loop crunch that rises with RES. |
| DIST | 0–100% | Distorted-signal balance, with 70/30 crossfeed between channels. |
| LP/BP · EXP/LIN | buttons | Mode and CV law per side. |
| MOD L / MOD R | 0–1 (default 1) | CV amounts for MIX_CUT_L/R; CV L is normalled to CV R when nothing is patched there — the hardware rule. |
| LINK | off by default | CV-only, the hardware rule: the left cutoff CV drives both filters; the right FREQ and RES knobs stay fully independent while linked. |
| boot mismatch | per-start seeds | The two channels are deliberately not bit-identical — the "live stereo" stand-in. |
MASTER (wet volume) lives on the effector, right of BLEND.
Two cartridge slots; the filtered mix goes through the cards.
A dual cartridge combiner fed by the filtered mix. CV X / Y / Z (±10 V) control the loaded programs; BLEND is the effect level, MASTER the wet volume.
| CONTROL | RANGE | WHAT IT DOES |
|---|---|---|
| L / R | select | Active channel; each channel remembers its own X / Y / Z (CART_X/Y/Z, CART_CV1/2/3, BLEND sum with the knobs). |
| X / Y / Z | 0–1 + CV | Program parameters of the active slot. |
| 1 / 2 / 3 | programs | Select the active slot's program from the loaded card; RST resets to program 1. |
| BYP L / BYP R | on/off | Per-channel bypass. |
| cartridge card | click | Shows the loaded card + its three programs; opens the WALLET (click a card to load, ESC or click outside to close). |
| BLEND | 0–100% | Wet crossfade. |
| MASTER | 0–1 | Output volume. |
| routing modes | normal / swap / cascade / loop / M-S | Engine-state software extra. |
Fifteen cards, three programs each — the color of the machine.
Fifteen cards, three programs each. X / Y / Z per program:
| CARTRIDGE | PROGRAM | X | Y | Z |
|---|---|---|---|---|
| CATHEDRAL — various reverbs | Shimmer | Octave up | Octave down | Decay |
| Oct up delay | Feedback | Delay | Reverb | |
| Space reverb | Feedback | Delay | Reverb | |
| MAGIC — pitched delays | Pitch delay | Feedback | Delay | Pitch |
| Reverse Pitch delay | Feedback | Delay | Pitch | |
| Bell pitchdelay | Feedback | Delay | Pitch | |
| TIME — classic mod delays | Delay reverb | Feedback | Delay | Reverb |
| Delay chorus | Feedback | Delay | Mod depth | |
| Delay Vibrato | Feedback | Delay/vibrato rate | Mod depth | |
| VIBROTREM — modulation | Tremolo | Depth | Rate | Reverb |
| Vibrato | Depth | Rate | Reverb | |
| Chorus | Depth | Rate | Reverb | |
| FILTER — filter and wah | Auto Wah | Filter amount | Envelope | Reverb |
| HP/LP filter | HP cutoff | LP cutoff | Resonance | |
| Notch filter | Cut 1 | Cut 2 | Resonance | |
| VIBE — rotary phase mods | Phaser | Depth | Rate | Reverb |
| Flanger | Depth | Rate | Reverb | |
| Resonance flanger | Resonance | Rate | Mod depth | |
| PITCH SHIFTER — octave and pitch | SynthTaver | Octave down | Octave up | Direct |
| Octaver | Octave down | Octave up | Direct | |
| Pitch Harmonizer | Pitch 1 | Pitch 2 | Voice mix | |
| INFINITY — big ambient | Resonance Reverb | Pre delay | Pre delay mod | Decay |
| O.D.D oscillating dirty delay | Feedback | Delay | Pitch | |
| Resonance Delay | Feedback | Delay | Pitch | |
| STRING RINGER — audio-rate mod | Synthetic Ring | Frequency | Resonance | Sub |
| Ring Mod | Frequency | Rate | Reverb | |
| S&H Ring Mod | Pitch Speed | S&H Rate | Freq Ring Mod | |
| SYNTEX-1 — bass synth | Vibe Synth | Vibrato Rate | Resonance | Sub |
| Pulse Synth | Tremolo Rate | Resonance | Sub | |
| Acid Synth | Tone | Color | Sub | |
| DIGITAL — sample-rate crusher | Filter DAC | Sample rate | Cutoff | Input gain |
| LFO DAC | Sample rate | LFO speed | LFO amount | |
| Envelope crusher | Sample rate | Envelope amount | Input gain | |
| GENERATOR — noise mini synth | FM tone | Pitch 1 | Pitch 2 | FM 2-1 |
| Ramp | LFO rate | Pitch | Pitch mod +/- | |
| Voice | Cutoff | Pitch | LP/HP | |
| ORCHE — reverse delay | One-shot Long | Delay time | Feedback | Trigger threshold |
| One-shot Short | Delay time | Feedback | Trigger threshold | |
| Free-run Loop | Delay time | Feedback | Delay mod LFO/RND | |
| MOONDOG — street canon delay | Two-Voice Round | Canon spacing | Voice decay | Attack crisp |
| Street March | Canon spacing | Voice decay | Attack crisp | |
| Percussion Canon | Canon spacing | Voice decay | Attack crisp | |
| ECLIPSE — umbra corona sweller | Totality | Umbra depth | Corona level | Eclipse rate |
| Ring of Fire | Umbra depth | Ring focus | Eclipse rate | |
| Corona Chorale | Umbra depth | Octave/Fifth | Eclipse rate |
The reference table's thirteenth card is a reverse-delay card; LUNAR-24 ships ORCHE in that slot. Two cards are app-original: MOONDOG and ECLIPSE. Cartridges swap mid-drone — programs crossfade, nothing glitches.
Everything the machine can say, it can say to everything else.
PLATE 3 — The patch layer (P):
module schematic cards with blueprint glyphs, tap a source node then a destination node —
the wire is a graph, not a drawing. Colour grammar: gold = CV, red = gate, amber = clock,
cream = audio.
| FEATURE | WHAT IT DOES |
|---|---|
Patch bay (P, or click any panel jack) | The FLOW blueprint: modules are schematic cards, ports are nodes; tap out-node then in-node to connect, tap a connected node twice to clear its links, the register rows take the wheel for amount and ✕ to clear, hover lights the whole route, node LEDs pulse with the live signal. The wire is a graph, not a drawing — links live as lit nodes and register rows, never as drawn cords. 40+ sources → 28+ destinations: both VCOs (CUT, PITCH, MORPH, SUB, PWM, LINFM), VCO4_SYNC, MIX_CUT_L/R / MIX_RES_L/R, DRONE_PITCH, DRONE3/6 PITCH/FM, PAPA3/6_CLOCK, KEY_CLOCK_IN, KEY_RESET, SEQ_EXT_CLOCK, SAHA/B_IN, SAHA/B_CLK, CART_X/Y/Z, CART_CV1/2/3, BLEND, MIX_BUS. Sources include all LFOs/pulsers/S&H, seq CV/gate/clock, keyboard clock/gates/V/oct, joystick, ENV follower, EXT_SRC, PRESSURE, EG 4/5, PAPA 3/6 MOD, ENV 1–6, ORB 1/2/4/5, the six VCO waveform outs per voice (VCOA/B SINE…PULSE, audio-rate, ±5 V), and VCO4/5 DRY (audio-rate, max 1 V). |
| Audio-rate jacks | The VCO waveform and DRY outs stream per-frame audio — a real audio connection class, shown cream in the colour grammar. Patch any of them to MIX_BUS to inject the raw oscillator — pre-envelope, pre-filter — straight into the mix bus, or to MIX_CUT_L/R for audio-rate cutoff FM of the Polivoks mix filters. The DRY outs are clamped to the hardware's 1 V spec; a patch at amount 0 is bit-exact silent, and CV sources into the same jacks still work at control rate. |
| Blueprint glyphs | Every card carries its module's glyph — the schematic shorthand for what lives inside: five dots = drone swarm; square wave = Papa-Srapa pair; sine = LFO; crosshair circle = joystick; sine-to-square = morphing VCO; step bars = sequencer/pulsers; response curve = filters/effector/mix; staircase with dots = sample & hold; ADSR line = preamp follower; slanted plates = keyboard; hub = drone core; dashed box = other; twin peaks = CATCH-22; pulse on a wire = PULPO-23. |
| Link colours | The grammar the nodes and register rows obey: gold = CV, red = gate, amber = clock, cream = audio. SPACE dims the layer to 15%; Ctrl+Z undoes. |
| Factory patch | LFO_A → MIX_CUT_R, JOY_Y → MIX_CUT_L, JOY_X → DRONE_PITCH. |
| NYDUS — the family link | The three ZRGRT instruments (LUNAR-24 · PULPO-23 · CATCH-22) find each other automatically, same machine and LAN, zero configuration. A status LED in the title strip is an honest meter: amber 1 Hz searching, green a local sibling, blue a LAN peer, red lockdown. Pair with CATCH-22 and its twin filters appear as an FX destination — you send a bus, it comes back filtered (jitter-targeted, 128-frame chunks). The drummer law: when PULPO-23 is in the room it keeps the pulse — lunar follows its wire clock (the badge reads PULPO KEEPS TIME), and a fresh transport start always takes its tempo. Turn the BPM knob to grab the pulse back; when the last PULPO-23 leaves, lunar keeps the pulse on its own clock again. Software can join the room too: an agent peer (role "agent") may play the panel over the link — plates via PARAM, notes via raw MIDI, transport via CLOCK — the instrument reacts exactly as if a hand pressed it, and announces it with a toast. NYDUS=0 disables the link, NYDUS_FX=0 only the audio hop; the instrument runs exactly as before without it. |
| Transport | The native RT bridge is the only engine and starts at boot. Default pacing is vsync off + cap 120 (low jitter against the shallow RT queue); if the bridge or device refuses, the app runs silently with NO AUDIO - SEE LOG. Tuning knobs in Appendix D.3. |
Scope (TAB) | Triggered waveform + 32-band spectrum (40 Hz–16 kHz) with FREEZE. |
Skins (SKIN) | lunar (moonlight) / solar (daylight cream). |
| Presets | S / F5 save a timestamped slot; L browser (click to load live). boot is written on first run and loaded after. |
| Recording | F9 records the wet master bus to 48 kHz / 16-bit stereo WAV (~11.5 MB/min) in the save dir, timestamps in the name; a take stops at 30 minutes or 2 GB. LUNAR_REC=1 auto-starts a take at boot. |
| Telemetry & env | LUNAR_AUDIT writes a per-block CSV (LUNAR_AUDIT_PATH, default /tmp/lunar-audit.csv). Headless knobs: LUNAR_SMOKE, LUNAR_SHOT, LUNAR_BLOCK, LUNAR_SKIN=lunar|solar, LUNAR_VSYNC, LUNAR_CAP. The native RT transport is the only engine; LUNAR_RT_QT, LUNAR_RT_PERIOD, LUNAR_RT_BACKEND, LUNAR_RT_DAEMON, LUNAR_RT_WAKE_MS, LUNAR_RT_HB_MS tune it (see Appendix D.3). |
| Knobs | Drag vertically; Shift = fine; wheel ticks; double-click resets; right-click randomises. |
LUNAR_VSYNC=1 restores vsync
at the cost of added jitter.→ SEE ALSO — patch semantics and printed ranges, Appendix A.
These are the printed panel ranges, not calibration targets.
Software normalises to ±1.0 ≙ ±10 V and 0…1 ≙ 0…+10 V.
| SOURCE / PORT | LUNAR-24 PUBLISHES | HARDWARE SPEC | NOTE |
|---|---|---|---|
| EG (VCO A/B) | 0…+0.8 | 0…+8 V | hardware spec kept |
| ENV (drone voices) | 0…+1 | −10…+10 V | kept divergence: gate-chaining sees an envelope |
| LFO | 0…+1 | 0…+10 V | unipolar by design |
| VCO | — | 10 V peak-to-peak (−5…+5 V) | 1 V/oct pitch input |
| PULSER | ±1 | −10…+10 V | bipolar clock pulse |
| JOYSTICK X/Y | ±1 | ±10 V, 0 V centre | offset windows −10…0 / −5…+5 / 0…+10 V |
| S&H | ±0.5 | ±5 V | |
| VOICE 3/6 MODULATOR | 0…+1.2 | 0…+12 V | PAPA_3/6_MOD, unipolar |
| SEQ CV | 0…+0.5 | 0…+5 V | hardware spec kept |
| SEQ GATE / keyboard gates | 0…+1 | 0…+10 V | |
| ENV FOLLOWER CV / GATE | 0…+1 / 0…+0.8 | 0…+10 V / +8 V | |
| Keyboard V/OCT | 0…+0.8 | 0…+8 V | 8 octaves |
| PRESSURE | 0…+0.8 | 0…+8 V | hardware spec kept |
| DRY OUT (VCO A/B) | — | max 1 V | pre-filter raw voice |
| WET OUT | — | max 2 V | main output |
| EXT AUDIO / PREAMP | — | line / instrument; 1 MΩ, up to 40 dB | medium difference (1:1): hardware senses keyboard taps via a piezo under the keys; software takes external system input through the same preamp + follower (kept divergence, not a missing feature) |
| Power | — | 12 V DC | hardware only |
Where software deliberately differs, the divergence is kept, named, and listed here.
| HARDWARE RULE | LUNAR-24 |
|---|---|
| ENV outs are bipolar −10…+10 V | ENV_1…6 publish 0…+1 (0…+10 V). |
| VOLT transposes down, then cross-FMs past half-stroke | Bipolar: negative half = transpose, positive half = AR-scaled cross-FM. |
| Effector X/Y/Z knobs shared L/R | Each channel remembers its own X/Y/Z. |
| Envelope self-generates only near min A/R | M loops the envelope at any A/R (D/S bypassed). |
| Pressure random re-rolls at RATE | Latches per plate press; RATE does not re-roll while held. |
| Keyboard sequencer steps are plate-derived | Step pitch = 0…+600 cents offset from the last held plate. |
| 2 LFOs on the panel | 2 LFOs + 3 pulsers (PULSER 2/3 with RATE + WIDTH). |
| Master filters only | VCO A/B add per-voice filters. |
| 13 reference cartridges | 15: ORCHE + app-original MOONDOG and ECLIPSE. |
| AREA | CONTROLS |
|---|---|
| DRONE 1/2/4/5 | TUNE ×5 (±1 oct) · LEVEL ×5 · MUTE ×5 · MOD ×5 · BASE · VOLT · HOLD/GATE · ATT · RLS · DRIFT · orb · env out |
| DRONE 3/6 | RATE + ×1/×10 · DIVIDER ÷1–8 · MOD (FM/AM depth) · OCT · PITCH · LO/HI · FM + AM switches · NOISE · S&H depth · clock in · HOLD/GATE · ATT · RLS · env out |
| VCO A/B | MORPH · TUNE · VIB · SUB · PAN · PWM · FM · OCT+3/LOW · −1 · SYNC · LP/BP · EXP/LIN · CUTOFF · RES · DRIVE · DIST · A/D/S/R · HOLD · GATE · M · jacks |
| LFO A/B | WAVE (square↔triangle morph) · RATE · ×1/×6/×10 · out |
| JOYSTICK | pad (lock) · X · Y · OX · OY · zone LEDs · out ×2 |
| SEQ | PULSER · CLK in · STAGES 3/4/5 · S1–S5 · gate ×5 · GATELN · INT/EXT · CV out · GATE out |
| PULSER 2/3 + S&H A/B | RATE + WIDTH ×2; RATE + INT/EXT clock ×2 (strip under the seq block) |
| PREAMP / FOLLOWER | GAIN · EXT in · ENABLE · MIC / ATTACK · RELEASE · CV meter · GATE LED · ENV out · GATE out |
| KEYBOARD | 12 plates · centre run button · BPM stepper · ◁ ▷ transpose · scale bank < > · QUANT · EDIT (plate offsets + per-note on/off) · TWIN/SPLIT · ARP (HOLD, direction, VARIATION, RHY editor) · SEQ (SEQ E step/gate/rhythm editor, LEN, DIV, DIR, CV) · P1/KEY · EXT. · RST · RATE · INT · VIB D · VIB R · GLIDE · LEGATO · ROOT · PRESSURE (mode, RISE, FALL, RATE) · DRONE VOICES keypad |
| MIXER | 10 × (PAN, VOL, mute-by-label) |
| FILTERS | FREQ · RES · DRIVE/GAIN · DIST · LP/BP · EXP/LIN · CV L/R · MOD L/R · LINK |
| EFFECTOR | L/R · X · Y · Z · CV X/Y/Z · 1-2-3 · RST · BYP L/R · BLEND · MASTER · wallet |
| Utility bar | S · L · SCOPE · SKIN · ? · P |
| KEY | ACTION |
|---|---|
| 1–6 | gate drone voices 1–6 (hold; latches in HOLD mode) |
| P | toggle patch bay |
| SPACE | dim the flow layer |
| Ctrl+Z | undo patch (in the bay) |
| TAB | scope on/off |
| S / F5 | save preset |
| L | preset browser |
| F9 | start/stop master-bus WAV recording (30 min / 2 GB cap) |
| H | field manual overlay |
| ← → ↑ ↓ | nudge the joystick |
| F3 | developer telemetry |
| F11 | fullscreen |
| ESC (hold ~0.5 s) | quit — a ring fills at the bottom bar; a bare tap is safe |
| GESTURE | ACTION |
|---|---|
| drag plate / hold | note with swelling pressure |
| Shift+click / right-click plate | latch or unlatch a drone note (EDIT mode: toggle scale degree) |
| drag knob / Shift+drag / wheel | adjust / fine / tick; double-click reset; right-click random |
| click panel jack | open patch bay on that port |
| drag .scl onto window | load a Scala scale |
| click cartridge card | open the wallet |
| VARIABLE | EFFECT |
|---|---|
LUNAR_RT_QT | Target ring queue in blocks (default 4, clamped 1–8). Lower = lower latency, less jitter headroom. |
LUNAR_RT_PERIOD | Requested device period in frames for the in-proc bridge (default = block; sanitised to pow2 ≥16, ≤ block). Daemon mode ignores it. |
LUNAR_RT_BACKEND | Pin the miniaudio backend: null, alsa, pulseaudio, jack, wasapi. An unknown name or refused init → NO AUDIO - SEE LOG. |
LUNAR_RT_DAEMON | 1 runs the device in the standalone rtserver daemon and attaches the app as a client. |
LUNAR_RT_WAKE_MS / LUNAR_RT_HB_MS | Daemon wake-timeout bound and client heartbeat timeout (diagnostics). |
LUNAR_BLOCK | Ring block size in frames (default 256; the engine buffer is sized 512). |
LUNAR_VSYNC / LUNAR_CAP | Override the default pacing. Set only deliberately: vsync-locked 60 Hz adds jitter against the shallow RT queue. |
LUNAR_AUDIT / LUNAR_AUDIT_PATH | Per-block telemetry CSV for soak/parity runs. |
Papa presets and tests carry the engine's papaMode 1–5 (1 DRN · 2 FM · 3 AM ·
4 FM+AM · 5 clean noise); the panel derives 1–4 from the FM/AM switches.
Written under the eclipse, in the year MMXXVI, by the ZRGRT.
ZRGRT builds small machines for long listening.