New instruments: ARP's Odyssey, 2600 and Omni #22
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?
ARP's synthesizers as a new instrument or several: the Odyssey, the 2600 and the Omni. Not started.
Everything below is from recollection, with nothing read. Find and read ARP's owner's and service manuals before designing anything, and put them in
docs/references.md.The instruments, as recalled
To settle with the owner first
What it needs that is not here yet
engine/key_assign.halready knows the latest, the highest and the lowest key held.engine/effects.h's two.What is already here to build on
instruments/sh5/, the nearest thing to an Odyssey:engine/analog_oscillator.hwith sync, a ring modulator in the voice, pink noise, a sample and hold with a lag, an ADSR beside an AR.engine/four_pole_filter.h,engine/state_variable_filter.h,engine/one_pole.hfor the high-pass,engine/portamento.h.instruments/poly800/for the Omni: divide-down squares from one counter, and voices through one shared filter channel.instruments/README.mdsays what an instrument must provide.Provenance
Sources read on 2026-10-12, before any design. All are ARP's own unless marked; no emulator's code was looked at.
Odyssey
2600
Omni and Omni-2
What the manuals changed from the recollection above
Decided: three instruments, since the manuals show three unlike machines: one duophonic voice with fixed routing (Odyssey), one voice whose every connection is a jack (2600), and forty-nine keys of divide-down through one filter (Omni, with the Omni-2's differences as settings). Building now.
Built on 2026-10-12, in one local commit that is not pushed. Left open for you to close after playing them: none of the three has been heard by anyone; each was rendered offline (not silent, no bad samples, nothing over full scale at the renderer's settings) and benched on the Pi.
What was built
Three instruments, each whole (daemon, ctl, web, render, bench; tests beside the code):
instruments/odyssey/miniody*.modyinstruments/arp2600/mini2600*.m2600instruments/omni/miniomni*.momnifilter.two_polefor the 2800's 12 dB filter. The 4035 and 4075 are both the shared four-pole filter; their difference is tone and waits on measurement..jack: 0 is no cable, which leaves the wire behind the jack as the manual's panel has it; 1 is a dummy plug; 2 to 37 is a cord from an output jack, in a fixed order. The protocol and the page were not changed for it, a patch file holds the cords, and a 2600 with no cords plays as the normalled instrument. The upper voice is patched as the 3620's manual says, with a cord to a VCO's KBD CV jack. Its reverberator is a small plain reverb and not a model of springs (#6 may replace it). Issue #7 was not done first; this does not depend on it.Shared code added to
engine/:duophonic.handduophonic_glide.h(both ARP keyboards),keyed_lfo.h(the Odyssey's, the 3620's and now the SH-5's LFO-2),sample_hold.h(both ARPs and now the SH-5),wave_vco.hwithvco_edges.h(a VCO with an output a waveform;analog_vco.htakes its edges from the same place),divide_down.h,fast_math.h, and a one-pole high-pass inone_pole.h.Results
bazel test //...: 112 of 112 pass, no warnings.bazel build --config=pi --config=opt //instruments/...succeeds.Deliberately not done
Deliberately not done for the Odyssey, beyond what "clean" already leaves out: the filter self-oscillating from half way up its slider, where the specification puts it, and not from the shared filter's onset; the envelopes' curves, which the service manual draws; the trigger arriving 10 to 15 milliseconds after the gate; the external audio input; the pedal that can stand in for the S/H mixer; the control voltage, gate and trigger jacks; setting a slider by its place along its travel, which wants each slider's curve; and more than one voice. Plain choices, not known to be the hardware's: which way up the sawtooth, the pulse and the ring modulator are, and that the ring modulator swings either side of nothing; that the specification's modulation depths, each printed with a plus sign alone, are a swing that far either side for the LFO's sine and upward only for the square and the ADSR; that an envelope narrows the pulse and that the width stops at a twentieth; that the S/H mixer gives half the sum of its sliders; how far the S/H mixer, unsampled, moves the second VCO and the filter (
kMixerOctaves), and the reach of the filter's second slider, given in octaves; that the noise the S/H mixer hears is the one the noise switch chooses, where the specification says pink; that a cycle of the LFO started over by a key counts as a cycle to the sample and hold; that a restarted LFO begins with its sine rising and its square high; that a key struck starts the ADSR again while the LFO is repeating it; that with AUTO REPEAT the envelopes fire before any key is played; that the amplifier is linear and its two sliders add; that when one of two keys is let go its VCO goes to the other key at once, the first by the glide and the second without, with no trigger, so that the interval of a chord let go a key at a time is lost; that the transpose switch is not glided; that the transpose switch and the bender move the filter's keyboard tracking, as on the later boards, where on the 2800 the bender is read as missing the filter; that the first VCO in its low range hears nothing from the keyboard, the bender and the vibrato included; that the two-pole filter sings about twice as loud as the four-pole, being heard from half way along the same loop; and the lag's time, which is three time constants (engine/sample_hold.h).Deliberately not done for the 2600, beyond what "clean" already leaves out: the filter self-oscillating from about half way up its slider, where the manual puts it, and not the shared filter's onset; any difference between the 4012 and 4072 filter modules, which ARP's service manual calls "identical in operation"; the envelopes' curves; anything overdriving, where the service manual says three oscillators at full overdrive the filter; the sliders' tapers, each being the gain it gives; a model of the reverb springs,
reverb.hbeing a plain reverberation with placeholder figures that issue #6 may replace; sound from outside (issue #17), so the preamplifier and the envelope follower act only on what is patched to them; the speakers and their sliders; the MANUAL START button; more than one cord into an input; the keyboard's momentary portamento button and its foot switch, and the dead zone of its bend knob; the 3604's TONE INTERVAL and TUNING knobs; and the gate and trigger being late by anything, where the 3604P's trigger is 15 ms behind its gate.Deliberately not done for the Omni, beyond what "clean" already leaves out: the waveform, which the service manual says is a square wave put through a capacitor with the negative spikes clipped off, and with the hollow switch some of the negative spike let through, its time constants on schematics nobody read, so that here the first is an ideal sawtooth and the second an ideal square and no spike has been made up; the voicing, which is the formant filters of the 4' and 8' sums, the 8' synthesizer's being a little mellower than the 4', and the string bass's resonator, none with a figure in the text and none stood in for; the filter self-oscillating only as the hardware's does, which is not at all as it is played, and not from the shared filter's onset; the envelopes' curves; the top-octave chip's tuning; the low-pass after each of the phaser's lines and its chips' noise; the volume pedal; the gate and trigger outputs and the filter's control voltage input; and a jack for each section beyond the three pans. Plain choices, not known to be the hardware's: that the lowest key is MIDI's 36, from the service manual's calling its 8' tone C2, and that the keys beyond the hardware's forty-nine sound; how loud a tone, the bass and the two sections are against each other; the ranges of the string section's Attack and Release sliders, for which no figure is published; how fast a new key shuts the gates of keys let go (
kQuenchSeconds), and that it does so with the sustain footswitch down too; how far a new key pulls the string envelope down (kStringAttackReset) and how fast that envelope shuts; that the bass has no attack, keeps the pitch of its last key while it dies away, and takes the hollow waveform with the rest; that Violin and Viola sound over the whole keyboard whatever the bass switches say; that the LFO's triangle and not its square moves the filter, and equally either way; how far each of the filter's three sliders reaches (kMost...Octaves); everything about the Bass Voice's filter (kBassVoice...); that every octave of a note begins its cycle together; where the phaser's three oscillators start; that each section is whole until the Mix slider passes the middle toward the other; and the pans.Open, each with the option taken
These are CLAUDE.md's "Open decisions" entries for this issue, as committed.
on 2026-10-12 with no one to ask. Chosen: three, the Odyssey, the 2600
and the Omni, with the Omni-2 a setting of the Omni and the 3604 and
3620 keyboards part of the 2600, as "Decisions made" has it. It was
Claude's choice and not the owner's, and wants the owner's word; so do
their names, under "Product name" above, and their ports, 8809, 8810
and 8811.
Odyssey" above. It was built for issue #22 on 2026-10-12 with no one
to ask, so each of these was settled by Claude's own choice and wants
the owner's say, a recording or a schematic read:
service manual's circuit makes a triangle and no shaper was found.
Chosen: a sine, with
lfo.trianglefor the other.filter.two_polefor the 2800's4023, as the shared four-pole filter heard from its second section
so that it sings as the service manual's trim has it; no switch
between the 4035 and the 4075. Their insides are not in ARP's
manuals. The two-pole sings about twice as loud as the four-pole.
1, high while the pulses differ, whatever steady level that leaves
taken off by the high-pass.
octave" and so on. Chosen: the sine swings that far either side;
the square and the ADSR go upward only; the sample and hold goes as
far as its sample either way, a full-level sample being 1, which is
the S/H mixer with both its sliders up: the mixer gives half their
sum, so that two octaves is the most, as the specification is read.
One slider alone then reaches an octave, which wants checking
against a real one.
narrows the pulse, the sine goes both ways, and the width stops at
5% and 95%.
No figure. Chosen: two octaves at full, which is with both of the
mixer's sliders up, as the sample and hold
(
kMixerOctaves). And the filter's second slider, given in octavesto 5; the schematic's resistors were read (keyboard and envelope
through 100k, the second slider through 33k) but not used.
Chosen: whichever the noise switch chooses.
one of two keys is let go its VCO goes to the other key at once and
nothing triggers; both then stay on the last key up, so the interval
of a chord let go a key at a time is lost. The 2600's keyboard was
then read, from its service manual, to keep both notes, and does;
whether the Odyssey should do the same is open.
(
voice.portamento_curveon); VCO-2's interval and the transposeswitch are not glided. The specification gives a rate per octave
and the circuit is a lag of constant time; the time here is the
whole slide's unless
voice.portamento_per_octaveis on.filter's keyboard tracking, as the later boards have it. On the
2800 the bender is read as missing the filter; there is no switch
for that.
keyboard, the bender and the pad's vibrato included.
read in semitones and cents from concert pitch and start at
nothing; the lowest key is MIDI's 48.
starts the ADSR again while the LFO is repeating it; AUTO REPEAT
fires the envelopes before any key has been played; a restarted LFO
begins with its sine rising and its square high, which is when a
repeat begins and when the sample and hold takes a sample.
held at full.
Chosen: the LFO's sine to both VCOs, a semitone at full.
patch with
voice.portamento_pedalon, so that a patch without itglides by its slider alone.
The schematic's values come to about 8 Hz to 5.3 kHz by arithmetic
done while it was built; one of them is off.
sh.lagruns to half a second; the hardware'sis read from the schematic as about 0.14 seconds at most, in this
project's measure of three time constants.
ranges, so an attack cannot be shorter than 5 ms; the segments are
straight.
done.
mixer.noise,mixer.vco1and
mixer.vco2, each with a_sourceor_waveswitch, and notthe other instruments'
noise.levelandvco1.saw, because eachslider has a switch; the third trigger switch is
adsr.auto_repeatthough it governs the AR too.
the owner's say: every input jack is a parameter ending in
.jack,a whole number: 0 no cable (the normal stays connected), 1 a dummy
plug, 2 to 37 a cord from an output jack in a fixed order that stored
patches depend on. The protocol and the page were not changed. Still
open: whether the page should draw cords, or show a jack as anything
better than a stepped control with a name; whether a patch file
should be able to name an output in words; and that the dummy plug
was put at 1, ahead of the outputs, so that outputs can be added at
the end.
2600" above. It was built for issue #22 on 2026-10-12 with no one to
ask, so each of these was settled by Claude's own choice and wants the
owner's say, a recording or the schematics read, which they were not:
Odyssey's published ranges (attack 5 ms to 5 s, decay 10 ms to 8 s,
release 15 ms to 10 s; the AR's release 10 ms to 8 s), as
placeholders. The schematic's capacitors and sliders would say.
filter is "flat to DC". Chosen: they go through a capacitor (5 Hz,
a placeholder), so that a sawtooth of nothing to +10 V does not
thump when the amplifier opens. The amplifier and mixer pass DC.
This is the choice most likely to be wrong, and it decides whether
the filter can be used on control voltages.
memory control: a key let go moves nothing with the portamento off,
and with it on the voices follow the keys held.
engine/duophonic.hgained
SetMovesOnReleasefor it. The Odyssey was left as it wasfirst chosen.
as above; and a glide stops where it is when the last key comes up,
which is what the circuit description says and may surprise.
delayed sine off whenever no key is down. Chosen: as it says, so
the pitch stops wobbling the moment the last key comes up, release
or no release.
voice.portamentois notnothing. The momentary button and its foot switch are not done;
controller 64 is the interval latch.
Korg's reissue words it differently. Chosen: ARP's, and the voices
and the LFO's restart still follow every key.
a trigger as well as a gate, so the ADSR fires on each.
keyboard the S/H GATE jack is not heard; a gate is up above 5 V.
service manual disagree by four times. Chosen: the owner's, 1 V
peak to peak for +10 V.
the owner's manual's .5 ms to .5 s to settle, which is its time
constants of .1 ms and .1 s and its corners of 1600 Hz and 1.6 Hz.
Korg's reissue 0.2 Hz to 24 Hz. Chosen: ARP's.
slider and clipped at 10; the colour slider a pan between it and a
one-pole low-pass copy at 20 Hz brought back to the same loudness,
as the service manual describes, and not
engine/noise.h's pink.So
noise.colouris a slider and there is nonoise.pink.add, to a most of one; no voltage at the exponential input is no
gain, and a negative one at the linear input takes gain away.
A while the clock is high.
placeholder (two seconds, four loops, top off at 4 kHz); the left
side has it inverted. Issue #6 may replace it.
service manual calls them identical in operation; what is commonly
said of their difference is in no manual read.
1; the page draws the audio and FM ones on a curve.
no higher than 20 kHz; a pulse no narrower than its slider's 10%;
the cutoff 1 Hz to 20 kHz, though the shared filter stops at 10 Hz.
is full scale, so that one oscillator panned to the middle is a
wave of full height.
order the modules are worked out in.
program first has a patch, so that the first note has no thump of
capacitors charging.
the envelopes, the filter singing into the mixer) is never idle, so
an offline render of one runs to the renderer's ten-second limit.
semitones from where the key played is the note heard.
the 1976 panel's drawing and the 1977 service manual; whether the
first panels had them was not found.
owner's manual beyond a skim, any manual for the 3604 alone, and
Korg's manual for the 2600 M.
since every module runs at every sample. The shared filter is given
its cutoff anew at every sample, which costs a tangent each; a
per-sample entry to
engine/four_pole_filter.hthat takes thetangent from outside would spare it, and has not been written.
"The Omni" above. It was built for issue #22 on 2026-10-12 with
no one to ask, so each of these was settled by Claude's own choice.
The owner has not said whether there is one to measure.
a differentiated square with the negative spikes clipped, and with
the hollow switch some of the negative spike. Chosen: an ideal
sawtooth and an ideal square, and no spike made up. It wants the
voicing schematics read for the capacitors, or a recording, and is
most of what the instrument's tone is.
against its 4', and the string bass's resonator. Chosen: none.
figures derived while it was built, as named constants; the Omni's switch
doubling its sweep; the Omni-2's sweep the same as the Omni's. The
Omni-2's rates double if its square wave is 20 V and not 10. The
clock low-pass after each line is left out.
was built from had them silent in the synthesizer on both
instruments. The service manuals differ, and were followed: kept from the synthesizer on the
Omni; on the Omni-2 still sounding there, but not firing the ADSR,
so heard only while an upper key holds it open.
2 seconds and to 5, starting at 10 ms and 0.3 s.
fall of 30 ms, and it happens with the sustain footswitch down as
well, so the footswitch lengthens only what follows the last key
struck. Whether the hardware's footswitch behaves so is not known.
halves its level, for every key sounding, and it shuts over 20 ms
once no key's gate is open.
setting,
bass.release, starting at the Omni's 2.5 seconds; theOmni-2's is about one.
opens it, its resonance. Chosen: 100 Hz, four octaves, 0.2, all
placeholders. And 0.1 s for what is left when the key is let go.
equally either way.
octaves, the LFO's 4, the pedal's 10, starting at 0, 0 and 2.
played. Chosen: the shared filter as it stands, as on every
instrument. Nothing sings with no key down, since the amplifier
follows the filter.
the dry synthesizer. Chosen so that all forty-nine keys fit at the
gain the programs start with; one key is quieter than another
instrument's one voice.
on. Chosen: yes.
sounds; the split is
bass.top, starting at 55. Controller 1 doesnothing. Pitch bend is added, two semitones as it comes.
voice, all central, in place of the hardware's separate jacks.
does not reach it, and it does not here; the Omni's bass, through
the synthesizer, it does.
schematics reading.
Closed: all three have now been played by Ben, and he has confirmed what was his to say.
mini2600, 8810), and its patch cords as.jackparameters, the dummy plug at 1 included.What is left, and where it is kept:
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.