Omni family: the String Ensemble (Solina) and the Quadra #36
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
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.
engine/divide_down.hwas put inengine/for.Held until the Omni fixes under way in the main worktree on 2026-10-12 are finished, by Ben's word.
The String Ensemble half of this is built, on the
family-extensionsbranch (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:
What was built, each at nothing until asked for, no "model" switch:
strings.trumpet,strings.horn,strings.immediate,bass.square,phaser.ensemble,phaser.bypass; andvoice.tunenow reaches two semitones. The rest of a String Ensemble is settings (mixer.balance1,wave.shapedandwave.voicingoff,strings.attack0.67 and so on), listed in CLAUDE.md under "The Omni". Nothing inengine/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 Quadra half of this is done as far as it honestly fits the Omni, on the
family-extensionsbranch (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):
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 withbass.squareon (0.2 for a Quadra).bass.decay,bass.resonance: ELEC BASS's sliders, forbass.voice.shifter.strings,shifter.synth,shifter.bass,shifter.rate,shifter.resonance,shifter.pedal,shifter.envelope: the phase shifter, ininstruments/omni/shifter.h, not in the shared effects (issue #6).engine/:divide_down.hgainedPulse.The rest of the three sections is settings, listed in CLAUDE.md under "The Omni" (
phaser.omni2,bass.top59,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):
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 fortylead.*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.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's lead synthesizer is built, inside mini-Omni, as Ben chose on 2026-10-12 ("yes add it"). Commit
597f52donfamily-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 whatengine/already had (twoanalog_vco.h, afour_pole_filter.h, oneenvelope.h, akeyed_lfo.h, aportamento.hfor each VCO). Nothing inengine/changed and nothing moved out of the Odyssey. It is alllead.*parameters, and withlead.levelat 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 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). Andshifter.lead, withshifter.sample_hold, the shifter's third modulation, which the last commit left out for want of a lead.lfo.rate,adsr.singleandfilter.compensationare shared with the poly synthesizer.It plays every key, or those above
bass.topwhile a bass, Cello or Bass is switched in (p.16). Both VCOs play the highest key held; withlead.two_voicethe 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:
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 aminiomnidplaying 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.
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.
All of the family extensions (issues #32 to #41) were merged to
mainand pushed on 2026-10-12, atff2bfb9; thefamily-extensionsbranch 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.interval1andlead.interval2stand for it.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:
lead.arpeggio: the hardware's SEQUENCER switch, off, UP or UP AND DOWN, atlead.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 anengine/arpeggiator.hof the lead's own; nothing inengine/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.squarereaching 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.