Skip to content

Marbble Tre internals

instrument/tre/: modelled on the Minimoog Model D. Marbble isn’t affiliated with Moog Music or any maker, and nothing in the product uses their names. It hasn’t been compared with the hardware, nor heard: everything below is from documented behaviour and measured here on its own terms.

Modelled from what’s documented about the instrument:

  • Three oscillators with the 32’, 16’, 8’, 4’, 2’ and Lo ranges and the panel’s waves (osc 3’s list has reverse saw instead of the narrow pulse), osc 2 and 3 tunable ±7 semitones, and osc 3 off the keyboard as a modulator.
  • The mixer: levels and switches, white or pink noise, and an overdriving sum.
  • The feedback trick, patching the output back into the external input.
  • A 24 dB ladder that loses bass as emphasis rises, self-oscillates at high emphasis, and two keyboard-tracking switches of 1/3 and 2/3.
  • Two contours sharing the Decay switch: release at the Decay time, or at once.
  • Mod Mix between osc 3 and noise, through the wheel to the two routing switches, at the audio rate.
  • Glide as an RC lag on the keyboard voltage.
  • Low-note priority, single trigger. Free-running oscillators.

Guesses, since what’s documented doesn’t say, all named constants in tre/mod.rs and voice.rs: the shark wave’s proportions (its peak at 80 %) and the pulse widths (30 % and 10 %); the Lo range (6 octaves below 8’, a frequency knob 4 times as wide); the modulation’s reach (±12 semitones at the oscillators, ±30 at the filter) and the wheel’s squared response; the contour attack’s target (1.3); how hard the mixer’s sum and the feedback drive (MIX_GAIN, FEEDBACK_GAIN); the size of drift and tolerances; the fast release (12 ms, a figure chosen not to click); Emphasis reaching self-oscillation at 8. Contour ranges are the commonly cited 1 ms to 10 s and 4 ms to 24 s.

Added to the instrument: Unison and Poly (up to 8 voices), note priority and multi trigger, velocity and aftertouch routings, Mod Amount (where the wheel rests, so a preset can have its modulation on). All off by default, except what a preset turns on.

Measured:

  • Per voice (instrument_bench, release build, i7-13700KF, block time against the buffer’s duration): one voice with all three oscillators, noise and resonance is 87 µs at 512 samples and 21.5 µs at 128, 0.8 % of one core; the same with audio-rate modulation; 8 voices 600 µs and 150 µs, 5.6 %; the worst block at 128 samples with 8 voices 161 to 351 µs from run to run, with other work on the machine. At rest (no notes): nothing. Marbble Synth’s one voice, for scale, is 0.05 %. So 16 voices of this kind would be about 11 % of one core: a polyphonic model is plausible, and multi-core shares several of them out. Per sample it’s about 85 ns a voice tick at 96 kHz.
  • Block size: the same MIDI gives the same bits at 1, 37, 128, 512 and 1024 frames. Parameter edits land at the start of the block they arrive in, and automation takes each block’s first value, so those two differ with the buffer size, inaudibly and by the smoothing’s lag.
  • Determinism: renders repeat bit for bit, also after reopening, and parallel_check plays two with drift on, serial against 2, 3, 4 and 8 threads, identical. rt_alloc_check plays one through parameter and preset changes and Track Off: 0 allocations.
  • No clicks, by the largest sample-to-sample step against the steady note’s: 0.85 times at a note-off with the Decay switch off, 1.33 times at a voice steal to a higher note (whose own slope is steeper), 1.4 times with volume, cutoff and a mixer level stepping every block.
  • Aliasing end to end: a saw at note 96 (2 kHz), filter open, through the saturators: -61 dB.