Omni family: the String Ensemble (Solina) and the Quadra #36

Closed
opened 2026-10-12 21:15:37 +00:00 by bcox · 6 comments
Owner

Ben asked on 2026-10-12 which instruments of the families already here were missed, and for an issue a family. Everything below is from recollection, with no manual read; issue #20's list was wrong in several places for the same reason, so read the manuals first and correct this. Each is to be an extension of the existing instrument, as the Jupiters and the JX family are, never a "model" switch.

  • ARP String Ensemble / Solina (1974): recalled as the Omni's string section alone, a divide-down generator into a triple chorus, which is what engine/divide_down.h was put in engine/ for.
  • Quadra (1978): recalled as an Omni with a bass section and a two-VCO lead synthesizer like the Solus, which would borrow from the Odyssey family.

Held until the Omni fixes under way in the main worktree on 2026-10-12 are finished, by Ben's word.

Ben asked on 2026-10-12 which instruments of the families already here were missed, and for an issue a family. **Everything below is from recollection, with no manual read**; issue #20's list was wrong in several places for the same reason, so read the manuals first and correct this. Each is to be an extension of the existing instrument, as the Jupiters and the JX family are, never a "model" switch. - **ARP String Ensemble / Solina** (1974): recalled as the Omni's string section alone, a divide-down generator into a triple chorus, which is what `engine/divide_down.h` was put in `engine/` for. - **Quadra** (1978): recalled as an Omni with a bass section and a two-VCO lead synthesizer like the Solus, which would borrow from the Odyssey family. **Held** until the Omni fixes under way in the main worktree on 2026-10-12 are finished, by Ben's word.
Author
Owner

The String Ensemble half of this is built, on the family-extensions branch (not pushed). The Quadra is not touched.

What was read. Eminent's service information for the Solina String Ensemble (Information 0476: signal flow diagram 015.0214, schematic 015.0212, board drawings), and the String-Ensemble pages of Eminent's manual for the Solina String Synthesizer. Not found: any owner's manual of ARP's for it, the theory of operation and trouble shooting guide Eminent's sheets refer to, any adjustment procedure, or anything on the later models. All in docs/references.md.

Against the recollection ("the Omni's string section alone, a divide-down generator into a triple chorus"): right in outline, and the Omni's lowest-twenty-key one-note bass is there too. Three particulars differ:

  • Four upper registers, not two. Viola 8' and Violin 4', and Trumpet and Horn, which are both footages together through one formant circuit; Horn moves the formant. (Cello and Contra Bass are the bass, not registers of every key.)
  • Crescendo is not an attack time. The capacitor always fills at one rate (about 0.67 s time constant) and the slider sets how much of the level waits for it.
  • The ensemble is not the Omni's phaser, and it can be switched off. Three lines summed with no dry signal, as the Omni's, but two oscillators (CHORUS and TREMOLO) for all three lines, a third of a cycle apart, where the Omni has an oscillator a line. A MODULATION push button takes the lines out.
  • And its Cello and Contra Bass are squares, taken from the dividers ahead of the sawtooth circuits.

What was built, each at nothing until asked for, no "model" switch: strings.trumpet, strings.horn, strings.immediate, bass.square, phaser.ensemble, phaser.bypass; and voice.tune now reaches two semitones. The rest of a String Ensemble is settings (mixer.balance 1, wave.shaped and wave.voicing off, strings.attack 0.67 and so on), listed in CLAUDE.md under "The Omni". Nothing in engine/ changed.

From the schematic: the ensemble's rates (0.74 Hz and 6.35 Hz at the middle of trimmers reaching 0.61 to 0.95 and 5.4 to 7.8), the third of a cycle, and TREMOLO at 0.38 of CHORUS. Placeholders, not worked out of it: Trumpet's and Horn's formant (frequencies, peak, level), and the ensemble's depth and resting delay. Its own voicing filters are not done.

The Omni's bench was run on the Pi before and after, twice, beside another session's playing miniomnid, and did not move. Not played or heard. The choices that want Ben's word are under "Open decisions" in CLAUDE.md, the first being whether it should be the Omni with parameters or an instrument of its own.

The String Ensemble half of this is built, on the `family-extensions` branch (not pushed). The Quadra is not touched. **What was read.** Eminent's service information for the Solina String Ensemble (Information 0476: signal flow diagram 015.0214, schematic 015.0212, board drawings), and the String-Ensemble pages of Eminent's manual for the Solina String Synthesizer. **Not found**: any owner's manual of ARP's for it, the theory of operation and trouble shooting guide Eminent's sheets refer to, any adjustment procedure, or anything on the later models. All in `docs/references.md`. **Against the recollection** ("the Omni's string section alone, a divide-down generator into a triple chorus"): right in outline, and the Omni's lowest-twenty-key one-note bass is there too. Three particulars differ: - **Four upper registers, not two.** Viola 8' and Violin 4', and Trumpet and Horn, which are both footages together through one formant circuit; Horn moves the formant. (Cello and Contra Bass are the bass, not registers of every key.) - **Crescendo is not an attack time.** The capacitor always fills at one rate (about 0.67 s time constant) and the slider sets how much of the level waits for it. - **The ensemble is not the Omni's phaser, and it can be switched off.** Three lines summed with no dry signal, as the Omni's, but two oscillators (CHORUS and TREMOLO) for all three lines, a third of a cycle apart, where the Omni has an oscillator a line. A MODULATION push button takes the lines out. - And its Cello and Contra Bass are **squares**, taken from the dividers ahead of the sawtooth circuits. **What was built**, each at nothing until asked for, no "model" switch: `strings.trumpet`, `strings.horn`, `strings.immediate`, `bass.square`, `phaser.ensemble`, `phaser.bypass`; and `voice.tune` now reaches two semitones. The rest of a String Ensemble is settings (`mixer.balance` 1, `wave.shaped` and `wave.voicing` off, `strings.attack` 0.67 and so on), listed in CLAUDE.md under "The Omni". Nothing in `engine/` changed. **From the schematic**: the ensemble's rates (0.74 Hz and 6.35 Hz at the middle of trimmers reaching 0.61 to 0.95 and 5.4 to 7.8), the third of a cycle, and TREMOLO at 0.38 of CHORUS. **Placeholders, not worked out of it**: Trumpet's and Horn's formant (frequencies, peak, level), and the ensemble's depth and resting delay. Its own voicing filters are not done. The Omni's bench was run on the Pi before and after, twice, beside another session's playing `miniomnid`, and did not move. **Not played or heard.** The choices that want Ben's word are under "Open decisions" in CLAUDE.md, the first being whether it should be the Omni with parameters or an instrument of its own.
Author
Owner

The Quadra half of this is done as far as it honestly fits the Omni, on the family-extensions branch (not pushed). Its lead synthesizer is not built, and is written up below and under "Open decisions" in CLAUDE.md for Ben.

What was read. ARP's owner's manual for the Quadra (March 1979) and its service manual (document 9003700, January 1980): both were found. The service manual's words, specification and trim procedures were read in full. Of the owner's manual, the bass, strings, poly synthesizer and phase shifter pages and the first of the lead's; its pages on the lead's interval write, envelope, portamento, touch sensor and sequencer only as thumbnails; and its sixteen factory programs not at all (rule 4). The schematics were fetched and not traced. All in docs/references.md.

Against the recollection ("an Omni with a bass section and a two-VCO lead synthesizer like the Solus"; four sections, a phaser, a microprocessor that stores switch settings):

  • Strings and poly synthesizer: an Omni-2's, nearly to the part. One divide-down generator, upper and lower voicing boards, a 4075 filter and one ADSR, and a string chorus of three delay lines whose clocks are trimmed to 13.3, 21.5 and 12.2 microseconds, the Omni-2's exactly. Both begin at the second octave of 61 keys. With a bass in, the poly synthesizer's tones are "NOT gated off" in the bass's keys but those keys do not fire its ADSR, which is the Omni-2's way.
  • Bass: not the Omni's. A VCO of its own (65 Hz to 250 Hz) with a TUNE slider and an octave switch, a pulse (the 8' trimmed to 20%, the 16' that halved), on two octaves of keys. Two voices: ELEC BASS with its own filter and envelope and DECAY and RESONANCE sliders, and STRINGS BASS into the string chorus.
  • The phaser is a fifth thing, not the string chorus: a 14-stage all-pass ladder after the sections, for any of them, with resonance, giving two sides (the signal as it is to one and turned over to the other, plus the shifted copy), moved by its own sweep (.1 Hz to 5 Hz), a pedal, its own envelope, or a sample and hold of the lead's second VCO.
  • The microprocessor keeps switches, not sliders: each slider has a switch that swaps it for a preset. Nothing of that is needed where a patch holds every setting.
  • The lead is less like a Solus than recalled; see below.

What was built, each at nothing until asked for, no "model" switch:

  • voice.bottom: the lowest key that plays a tone (48 for a Quadra); keys under it still play the bass.
  • bass.tune, bass.octave_down: the bass VCO, as a second set of divide-down counters tuned apart.
  • bass.width: the 8' bass's pulse width with bass.square on (0.2 for a Quadra).
  • bass.decay, bass.resonance: ELEC BASS's sliders, for bass.voice.
  • shifter.strings, shifter.synth, shifter.bass, shifter.rate, shifter.resonance, shifter.pedal, shifter.envelope: the phase shifter, in instruments/omni/shifter.h, not in the shared effects (issue #6).
  • In engine/: divide_down.h gained Pulse.

The rest of the three sections is settings, listed in CLAUDE.md under "The Omni" (phaser.omni2, bass.top 59, bass.voice, and so on). Placeholders: everything about the shifter but its arrangement (where it rests, how far it is moved, its envelope's times, its feedback), the bass filter's peak, which is a two-pole stand-in for a filter the service manual calls a single pole, and the TUNE slider's reach. Not done: the bass pulse's width moving with its envelope, the shifter's sample and hold, the strings' squelch, the programs.

bazel test //... passes. The bench was not run: nothing went into the path every patch takes but a few choices a block. Not played or heard.

The lead synthesizer, for Ben to decide. By the manuals: two VCOs into a 4075 filter and an amplifier under one envelope. Both VCOs give a sawtooth or a pulse together (10% or 50%, which the envelope can sweep); both play the highest key, or two keys with 2 VOICE ON; INTERVAL WRITE has the computer put either VCO at any interval, and TRILL steps them between two pitches at 2 Hz to 20 Hz; the vibrato always arrives about a second late; the envelope attacks a second time about a second and a half in unless VAR DECAY is on; a portamento slider for each VCO; a hold or flat footswitch; a touch sensor; an arpeggio.

Beside the Solus as mini-Ody is set to it: it shares two VCOs, a four-pole filter under an ADSR, single and multiple triggering, portamento and vibrato. It has none of the Solus's ring modulator, sync, waveform mix for each VCO, LFO on the pulse width, modulation of VCO 2's pitch, or filter envelope turned over. And it has six things mini-Ody has not: highest-key priority for both VCOs, the trill and written interval, the vibrato's delay, the second attack and SUST LOW, a glide for each VCO, and the hold and flat footswitch.

Three ways, with estimates from the existing benches (not measured):

  1. A lead voice inside mini-Omni, made of what is already in engine/ (wave_vco.h, filter_channel.h, envelope.h, duophonic.h, duophonic_glide.h, keyed_lfo.h). Almost nothing would move out of the Odyssey, whose parts are shared already. About forty lead.* parameters. About 2% to 2.5% of a core more while it sounds: roughly 13% for ten keys with everything and the effects, 23% for forty-nine. The only way the lead reaches the phase shifter and the shifter's sample and hold reaches VCO 2.
  2. A fifteenth instrument made of both. Shared code is compiled once for each instrument, so the Omni's and the Odyssey's voices would both have to become libraries first. The same cost on the Pi, more work, and most of an Odyssey a Quadra has no use for.
  3. Play the lead on mini-Ody beside mini-Omni. Nothing to build; about 15% of a core for the two. But each daemon wants its own sound device, both hear the same keys, the lead's own six things are missing, and there is no way to the shifter.

Recommended: the first, as its own piece of work, once Ben has said whether the trill and the written intervals should be parameters or keys struck.

The Quadra half of this is done as far as it honestly fits the Omni, on the `family-extensions` branch (not pushed). **Its lead synthesizer is not built**, and is written up below and under "Open decisions" in CLAUDE.md for Ben. **What was read.** ARP's owner's manual for the Quadra (March 1979) and its service manual (document 9003700, January 1980): both were found. The service manual's words, specification and trim procedures were read in full. Of the owner's manual, the bass, strings, poly synthesizer and phase shifter pages and the first of the lead's; its pages on the lead's interval write, envelope, portamento, touch sensor and sequencer only as thumbnails; and its sixteen factory programs not at all (rule 4). **The schematics were fetched and not traced.** All in `docs/references.md`. **Against the recollection** ("an Omni with a bass section and a two-VCO lead synthesizer like the Solus"; four sections, a phaser, a microprocessor that stores switch settings): - **Strings and poly synthesizer: an Omni-2's, nearly to the part.** One divide-down generator, upper and lower voicing boards, a 4075 filter and one ADSR, and a string chorus of three delay lines whose clocks are trimmed to 13.3, 21.5 and 12.2 microseconds, the Omni-2's exactly. Both begin at the second octave of 61 keys. With a bass in, the poly synthesizer's tones are "NOT gated off" in the bass's keys but those keys do not fire its ADSR, which is the Omni-2's way. - **Bass: not the Omni's.** A VCO of its own (65 Hz to 250 Hz) with a TUNE slider and an octave switch, a pulse (the 8' trimmed to 20%, the 16' that halved), on two octaves of keys. Two voices: ELEC BASS with its own filter and envelope and DECAY and RESONANCE sliders, and STRINGS BASS into the string chorus. - **The phaser is a fifth thing, not the string chorus**: a 14-stage all-pass ladder after the sections, for any of them, with resonance, giving two sides (the signal as it is to one and turned over to the other, plus the shifted copy), moved by its own sweep (.1 Hz to 5 Hz), a pedal, its own envelope, or a sample and hold of the lead's second VCO. - **The microprocessor** keeps switches, not sliders: each slider has a switch that swaps it for a preset. Nothing of that is needed where a patch holds every setting. - **The lead is less like a Solus than recalled**; see below. **What was built**, each at nothing until asked for, no "model" switch: - `voice.bottom`: the lowest key that plays a tone (48 for a Quadra); keys under it still play the bass. - `bass.tune`, `bass.octave_down`: the bass VCO, as a second set of divide-down counters tuned apart. - `bass.width`: the 8' bass's pulse width with `bass.square` on (0.2 for a Quadra). - `bass.decay`, `bass.resonance`: ELEC BASS's sliders, for `bass.voice`. - `shifter.strings`, `shifter.synth`, `shifter.bass`, `shifter.rate`, `shifter.resonance`, `shifter.pedal`, `shifter.envelope`: the phase shifter, in `instruments/omni/shifter.h`, not in the shared effects (issue #6). - In `engine/`: `divide_down.h` gained `Pulse`. The rest of the three sections is settings, listed in CLAUDE.md under "The Omni" (`phaser.omni2`, `bass.top` 59, `bass.voice`, and so on). **Placeholders**: everything about the shifter but its arrangement (where it rests, how far it is moved, its envelope's times, its feedback), the bass filter's peak, which is a two-pole stand-in for a filter the service manual calls a single pole, and the TUNE slider's reach. Not done: the bass pulse's width moving with its envelope, the shifter's sample and hold, the strings' squelch, the programs. `bazel test //...` passes. The bench was not run: nothing went into the path every patch takes but a few choices a block. **Not played or heard.** **The lead synthesizer, for Ben to decide.** By the manuals: two VCOs into a 4075 filter and an amplifier under one envelope. Both VCOs give a sawtooth or a pulse together (10% or 50%, which the envelope can sweep); both play the highest key, or two keys with 2 VOICE ON; INTERVAL WRITE has the computer put either VCO at any interval, and TRILL steps them between two pitches at 2 Hz to 20 Hz; the vibrato always arrives about a second late; the envelope attacks a second time about a second and a half in unless VAR DECAY is on; a portamento slider for each VCO; a hold or flat footswitch; a touch sensor; an arpeggio. Beside the Solus as mini-Ody is set to it: it shares two VCOs, a four-pole filter under an ADSR, single and multiple triggering, portamento and vibrato. It has none of the Solus's ring modulator, sync, waveform mix for each VCO, LFO on the pulse width, modulation of VCO 2's pitch, or filter envelope turned over. And it has six things mini-Ody has not: highest-key priority for both VCOs, the trill and written interval, the vibrato's delay, the second attack and SUST LOW, a glide for each VCO, and the hold and flat footswitch. Three ways, with estimates from the existing benches (not measured): 1. **A lead voice inside mini-Omni**, made of what is already in `engine/` (`wave_vco.h`, `filter_channel.h`, `envelope.h`, `duophonic.h`, `duophonic_glide.h`, `keyed_lfo.h`). Almost nothing would move out of the Odyssey, whose parts are shared already. About forty `lead.*` parameters. About 2% to 2.5% of a core more while it sounds: roughly 13% for ten keys with everything and the effects, 23% for forty-nine. The only way the lead reaches the phase shifter and the shifter's sample and hold reaches VCO 2. 2. **A fifteenth instrument made of both.** Shared code is compiled once for each instrument, so the Omni's and the Odyssey's voices would both have to become libraries first. The same cost on the Pi, more work, and most of an Odyssey a Quadra has no use for. 3. **Play the lead on mini-Ody beside mini-Omni.** Nothing to build; about 15% of a core for the two. But each daemon wants its own sound device, both hear the same keys, the lead's own six things are missing, and there is no way to the shifter. **Recommended: the first**, as its own piece of work, once Ben has said whether the trill and the written intervals should be parameters or keys struck.
Author
Owner

The Quadra's lead synthesizer is built, inside mini-Omni, as Ben chose on 2026-10-12 ("yes add it"). Commit 597f52d on family-extensions, not pushed.

What it is. instruments/omni/lead.h: one voice beside the Omni's and a fourth section for its mixer, made of what engine/ already had (two analog_vco.h, a four_pole_filter.h, one envelope.h, a keyed_lfo.h, a portamento.h for each VCO). Nothing in engine/ changed and nothing moved out of the Odyssey. It is all lead.* parameters, and with lead.level at nothing, where it starts, none of it is worked out: a test holds that a patch with everything of the lead's set but its level renders what it did, to the sample.

What the lead's pages said against the earlier write-up. Pages 16 to 32 of the owner's manual were read in full this time, as pictures (the scan is stored upside down), with the service manual's specification and 3.3.5 to 3.3.18:

  • The DECAY TIME slider is the sustain level until SUST LOW is on (p.26 to 28). SUST LOW off: the decay is preset, .4 s, the slider sets the sustain from nothing to about 75% of the peak, and about 1.5 s after the key a second attack takes it to the top to stay. SUST LOW on: the slider is the decay's time, to 2 s, the sustain is about 20% and there is no second attack. The write-up had "attack, decay and release with a SUST LOW switch" and put the second attack under a "VAR DECAY" switch, which is the service manual's name for the same one.
  • The filter follows the keys a volt an octave, so it can be played as a tuned resonator (p.26). Missing from the write-up.
  • The touch sensor is two things by a switch: the pitch up, "approximately a perfect fourth" (the specification says 3 semitones), or VOL/BRILL, the filter and the amplifier opened together; under the top three octaves only (p.32). The write-up had the pitch alone, at three semitones.
  • The footswitch: at HOLD it keeps a note on, or held before any key locks the lead out until it is let go; at FLAT it lowers the VCOs a semitone, and the filter by the service manual. A third footswitch only turns the portamento on and off (p.20, p.30).
  • Intervals: one key written moves both VCOs, two keys the first VCO and then the second, and what is written adds to what 2 VOICE ON plays (p.24, 25). A trill's interval is counted from the lowest C (p.22).
  • PWM opens either pulse "to about 80%" (p.18); the specification gives "25%-60%" and "60%-80%". The arpeggio's speed is the TRILL SPEED slider's, and KYBD TRIG is one switch for the poly synthesizer's envelope and the lead's (p.30, 32).
  • The vibrato is the LFO's triangle by the service manual, a sine on the panel.

The parameters, in outline: lead.level, lead.pan; lead.pulse, lead.width, lead.pwm, lead.vco2; lead.tune1/2, lead.interval1/2 (what INTERVAL WRITE would have written, in semitones), lead.two_voice; lead.trill, lead.trill_rate; lead.vibrato, lead.vibrato_delay; lead.glide1/2; lead.cutoff, lead.resonance, lead.sweep, lead.follow, lead.pedal; lead.attack, lead.decay, lead.sustain, lead.release, lead.curve, lead.second_attack, lead.second_delay; lead.footswitch (controller 64: nothing, HOLD, FLAT or portamento); lead.touch_pitch, lead.touch_brilliance (channel pressure). And shifter.lead, with shifter.sample_hold, the shifter's third modulation, which the last commit left out for want of a lead. lfo.rate, adsr.single and filter.compensation are shared with the poly synthesizer.

It plays every key, or those above bass.top while a bass, Cello or Bass is switched in (p.16). Both VCOs play the highest key held; with lead.two_voice the second has the highest and the first the lowest.

Chosen without Ben, and unconfirmed, all listed under "Open decisions" in CLAUDE.md. The ones most worth a look:

  • Written intervals and the trill are plain parameters; nothing is struck to set them. The write-up had asked which, and the answer did not say.
  • The envelope is uncoupled: decay, sustain and second attack are a setting each, where the hardware has one slider and a switch.
  • 2 VOICE ON gives VCO 1 the lowest key; the manual names only VCO 2's.
  • The filter follows the highest key, unglided and without the written intervals.
  • Controller 64 is the lead's footswitch as well as the poly sustain, until #31.
  • Pressure reaches it from any key, as an amount each way.
  • The second attack's time (0.3 s), the vibrato's fade, the TUNE sliders' reach, the levels and what pressure comes to are made up.
  • Its defaults are nobody's.

Not done: INTERVAL WRITE by keys struck; the presets behind its touch switches; an arpeggio of the lead's own at the trill's speed (the shared arpeggiator plays every section); the touch sensor under the top three octaves alone; its CV, gate and trigger jacks.

Tests and bench. bazel test //... passes, 126 tests. On the Pi, beside a miniomnid playing nothing, the bench as it was and as it is, one straight after the other, twice: none of the twelve existing cases rose (each 0.1 to 0.8 lower after, the same both times). The lead with everything at work and the phase shifter adds about 2.4% of a core: one key of it alone 4.9%, ten keys with everything and the effects 12.8% (10.4% without the lead), all forty-nine 23.0% (20.5%).

Not played or heard by anyone. The Quadra's schematics are still untraced.

The Quadra's lead synthesizer is built, inside mini-Omni, as Ben chose on 2026-10-12 ("yes add it"). Commit `597f52d` on `family-extensions`, not pushed. **What it is.** `instruments/omni/lead.h`: one voice beside the Omni's and a fourth section for its mixer, made of what `engine/` already had (two `analog_vco.h`, a `four_pole_filter.h`, one `envelope.h`, a `keyed_lfo.h`, a `portamento.h` for each VCO). Nothing in `engine/` changed and nothing moved out of the Odyssey. It is all `lead.*` parameters, and **with `lead.level` at nothing, where it starts, none of it is worked out**: a test holds that a patch with everything of the lead's set but its level renders what it did, to the sample. **What the lead's pages said against the earlier write-up.** Pages 16 to 32 of the owner's manual were read in full this time, as pictures (the scan is stored upside down), with the service manual's specification and 3.3.5 to 3.3.18: - **The DECAY TIME slider is the sustain level** until SUST LOW is on (p.26 to 28). SUST LOW off: the decay is preset, .4 s, the slider sets the sustain from nothing to about 75% of the peak, and about 1.5 s after the key a second attack takes it to the top to stay. SUST LOW on: the slider is the decay's time, to 2 s, the sustain is about 20% and there is no second attack. The write-up had "attack, decay and release with a SUST LOW switch" and put the second attack under a "VAR DECAY" switch, which is the service manual's name for the same one. - **The filter follows the keys a volt an octave**, so it can be played as a tuned resonator (p.26). Missing from the write-up. - **The touch sensor is two things by a switch**: the pitch up, "approximately a perfect fourth" (the specification says 3 semitones), or VOL/BRILL, the filter and the amplifier opened together; under the top three octaves only (p.32). The write-up had the pitch alone, at three semitones. - **The footswitch**: at HOLD it keeps a note on, or held before any key locks the lead out until it is let go; at FLAT it lowers the VCOs a semitone, and the filter by the service manual. A third footswitch only turns the portamento on and off (p.20, p.30). - **Intervals**: one key written moves both VCOs, two keys the first VCO and then the second, and what is written adds to what 2 VOICE ON plays (p.24, 25). A trill's interval is counted from the lowest C (p.22). - **PWM** opens either pulse "to about 80%" (p.18); the specification gives "25%-60%" and "60%-80%". **The arpeggio's speed is the TRILL SPEED slider's**, and KYBD TRIG is one switch for the poly synthesizer's envelope and the lead's (p.30, 32). - The vibrato is the LFO's triangle by the service manual, a sine on the panel. **The parameters**, in outline: `lead.level`, `lead.pan`; `lead.pulse`, `lead.width`, `lead.pwm`, `lead.vco2`; `lead.tune1/2`, `lead.interval1/2` (what INTERVAL WRITE would have written, in semitones), `lead.two_voice`; `lead.trill`, `lead.trill_rate`; `lead.vibrato`, `lead.vibrato_delay`; `lead.glide1/2`; `lead.cutoff`, `lead.resonance`, `lead.sweep`, `lead.follow`, `lead.pedal`; `lead.attack`, `lead.decay`, `lead.sustain`, `lead.release`, `lead.curve`, `lead.second_attack`, `lead.second_delay`; `lead.footswitch` (controller 64: nothing, HOLD, FLAT or portamento); `lead.touch_pitch`, `lead.touch_brilliance` (channel pressure). And `shifter.lead`, with `shifter.sample_hold`, the shifter's third modulation, which the last commit left out for want of a lead. `lfo.rate`, `adsr.single` and `filter.compensation` are shared with the poly synthesizer. It plays every key, or those above `bass.top` while a bass, Cello or Bass is switched in (p.16). Both VCOs play the highest key held; with `lead.two_voice` the second has the highest and the first the lowest. **Chosen without Ben, and unconfirmed**, all listed under "Open decisions" in CLAUDE.md. The ones most worth a look: - Written intervals and the trill are **plain parameters**; nothing is struck to set them. The write-up had asked which, and the answer did not say. - The envelope is **uncoupled**: decay, sustain and second attack are a setting each, where the hardware has one slider and a switch. - 2 VOICE ON gives VCO 1 the **lowest** key; the manual names only VCO 2's. - The filter follows the highest key, unglided and without the written intervals. - Controller 64 is the lead's footswitch **as well as** the poly sustain, until #31. - Pressure reaches it from any key, as an amount each way. - The second attack's time (0.3 s), the vibrato's fade, the TUNE sliders' reach, the levels and what pressure comes to are made up. - Its defaults are nobody's. **Not done**: INTERVAL WRITE by keys struck; the presets behind its touch switches; an arpeggio of the lead's own at the trill's speed (the shared arpeggiator plays every section); the touch sensor under the top three octaves alone; its CV, gate and trigger jacks. **Tests and bench.** `bazel test //...` passes, 126 tests. On the Pi, beside a `miniomnid` playing nothing, the bench as it was and as it is, one straight after the other, twice: none of the twelve existing cases rose (each 0.1 to 0.8 lower after, the same both times). The lead with everything at work and the phase shifter adds about 2.4% of a core: one key of it alone 4.9%, ten keys with everything and the effects 12.8% (10.4% without the lead), all forty-nine 23.0% (20.5%). **Not played or heard by anyone.** The Quadra's schematics are still untraced.
Author
Owner

Ben answered on 2026-10-12 whether the String Ensemble should be an instrument of its own: "extensions, as long as they fit in the same engine and run on the pi." It stays in mini-Omni. Benched on the Pi that day as a String Ensemble (Trumpet and Horn, the ensemble, square bass): 4.0% of one core for one key, 7.8% for ten, 18.0% for all forty-nine, and 20.8% for forty-nine with the effects.

Ben answered on 2026-10-12 whether the String Ensemble should be an instrument of its own: "extensions, as long as they fit in the same engine and run on the pi." It stays in mini-Omni. Benched on the Pi that day as a String Ensemble (Trumpet and Horn, the ensemble, square bass): 4.0% of one core for one key, 7.8% for ten, 18.0% for all forty-nine, and 20.8% for forty-nine with the effects.
Author
Owner

All of the family extensions (issues #32 to #41) were merged to main and pushed on 2026-10-12, at ff2bfb9; the family-extensions branch is gone, so where an earlier comment says "not pushed" or "not yet merged", that is no longer so.

This issue stays open, by Ben's word, until he has listened to it: the String Ensemble's Trumpet and Horn formants above all, which are placeholders (1200 Hz and 500 Hz, made up), and the Quadra's lead and phase shifter, whose figures are placeholders too. Nothing here has been played or heard. INTERVAL WRITE by keys struck is not wanted (Ben, the same day); lead.interval1 and lead.interval2 stand for it.

All of the family extensions (issues #32 to #41) were merged to `main` and pushed on 2026-10-12, at `ff2bfb9`; the `family-extensions` branch is gone, so where an earlier comment says "not pushed" or "not yet merged", that is no longer so. This issue stays open, by Ben's word, until he has listened to it: the String Ensemble's Trumpet and Horn formants above all, which are placeholders (1200 Hz and 500 Hz, made up), and the Quadra's lead and phase shifter, whose figures are placeholders too. Nothing here has been played or heard. INTERVAL WRITE by keys struck is not wanted (Ben, the same day); `lead.interval1` and `lead.interval2` stand for it.
Author
Owner

Closed: Ben played the String Ensemble and the whole Quadra, its lead included, on his laptop on the night of 2026-10-12, and found them good.

Built since the last comment, at his asking:

  • The lead has its own arpeggio, lead.arpeggio: the hardware's SEQUENCER switch, off, UP or UP AND DOWN, at lead.trill_rate, on the lead alone while the other sections hold the chord, with the footswitch at HOLD locking the sequence in. From the owner's manual (p.32 and p.33) and the service manual's Fig. 2.8. It is an engine/arpeggiator.h of the lead's own; nothing in engine/ changed. He heard it, both VCOs on each step, and asked for nothing of it to change.

Confirmed by him that night: written intervals and the trill as plain parameters; the envelope uncoupled; the pedal as three footswitches; the touch sensor as channel pressure; Crescendo as two settings; bass.square reaching the synthesizer's bass; and that the String Ensemble needs no patch of its own to start from. Not wanted: INTERVAL WRITE by keys, and the presets.

What is left is no one's to decide and is under "Open decisions" in CLAUDE.md until a schematic is worked through or a real one recorded: Trumpet's and Horn's formant, the ensemble's depth and delay, everything about the phase shifter but its arrangement, and the bass voice's filter, all of which are stand-ins. Each footswitch on its own controller is #31, and a shared phase shifter #6.

Everything said here is on main, pushed, on the night of 2026-10-12. What was heard was heard on Ben's laptop, not on the Pi.

**Closed: Ben played the String Ensemble and the whole Quadra, its lead included, on his laptop on the night of 2026-10-12, and found them good.** Built since the last comment, at his asking: - **The lead has its own arpeggio**, `lead.arpeggio`: the hardware's SEQUENCER switch, off, UP or UP AND DOWN, at `lead.trill_rate`, on the lead alone while the other sections hold the chord, with the footswitch at HOLD locking the sequence in. From the owner's manual (p.32 and p.33) and the service manual's Fig. 2.8. It is an `engine/arpeggiator.h` of the lead's own; nothing in `engine/` changed. He heard it, both VCOs on each step, and asked for nothing of it to change. Confirmed by him that night: written intervals and the trill as plain parameters; the envelope uncoupled; the pedal as three footswitches; the touch sensor as channel pressure; Crescendo as two settings; `bass.square` reaching the synthesizer's bass; and that the String Ensemble needs no patch of its own to start from. **Not wanted**: INTERVAL WRITE by keys, and the presets. What is left is no one's to decide and is under "Open decisions" in CLAUDE.md until a schematic is worked through or a real one recorded: Trumpet's and Horn's formant, the ensemble's depth and delay, everything about the phase shifter but its arrangement, and the bass voice's filter, all of which are stand-ins. Each footswitch on its own controller is #31, and a shared phase shifter #6. Everything said here is on `main`, pushed, on the night of 2026-10-12. What was heard was heard on Ben's laptop, not on the Pi.
bcox closed this issue 2026-10-13 04:27:03 +00:00
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
bcox/mini-800#36
No description provided.