91 Chorgan
Six-voice morphing chord synthesizer with built-in chord sequencer. Knob X and CV In 1 set root pitch; Knob Y selects interval above root (0–12 semitones). Main knob morphs all six voices through sine, triangle, saw, and narrow pulse; CV In 2 offsets timbre. Audio In 1 controls slew speed (0V=instant, +5V=approx 1 min glide). Audio In 2 shifts chord voicing through octave inversions (bipolar, +/-6 steps). Tap Switch Down to cycle chord extension presets; hold one second to store a chord in the sequencer. Pulse In 1 advances preset; Pulse In 2 recalls the next stored chord on rising edges. Boot with Switch Down held for slew mode (portamento chord changes instead of detune).
Panel
CVChord
Inversion CVRoot Pitch
CVTimbre
Offset CVPreset
AdvanceChord Recall
ClockSix-Voice
MixPhase-Offset
MixVoiced Pitch
CVChord Event
RampSub-Octave
SquareChord Event
PWM
Controls
Timbre
Morphs waveform of all six voices (pulse → sine → saw → sine → pulse)
Root Pitch
Root pitch from C3 to C6, summed with CV In 1
Interval
Semitone interval between root and voice 2 (0–12)
Z up: MAIN: Timbre; X: Root Pitch; Y: Interval.
Z middle: MAIN: Timbre; X: Root Pitch; Y: Interval.
Inputs
Outputs
Slew Speed CV
0V=instant, +5V=approx 1 min glide; negative shortens slew in slew mode
Chord Inversion CV
Bipolar +/-6 octave inversion steps; shifts lowest/highest voice up or down
Root Pitch CV
Root pitch 1V/oct (0V = C4), summed with Knob X
Timbre Offset CV
Bipolar offset to Main knob timbre position
Preset Advance
Rising edge advances chord extension preset
Chord Recall Clock
Rising edge recalls next stored chord in sequencer
Six-Voice Mix
Six-voice chord mix output
Phase-Offset Mix
Same voices with per-voice phase offsets for stereo width
Voiced Pitch CV
Root pitch plus voiced interval (1V/oct)
Chord Event Ramp
Unipolar downward ramp (+5V to 0V) on each chord event
Sub-Octave Square
Square wave one octave below root
Chord Event PWM
PWM envelope resetting on each chord event
LEDs
Interval Position A
Part of interval position display across LEDs 0–4
Store/Recall Bit A
Binary slot indicator during store/recall gestures
Interval Position B
Store/Recall Bit B
Interval Position C
Preset Brightness
Brightness indicates current extension preset (0–5)
README
Chorgan Sequencer
Six-voice morphing chord synthesizer with built-in chord sequencer for the Workshop Computer.
Knob X and CV In 1 set the root pitch.
Knob Y selects an interval above the root in semitone steps.
Four extension voices fill out the chord — the extensions are drawn from the same harmonic world as the chosen interval. (A perfect 5th stays open and powerful, a minor 3rd stays dark, a major 3rd stays bright. The Main knob morphs all six voices through sine, triangle, saw, and narrow pulse).
A built-in chord sequencer stores up to eight chords and steps through them on rising edges at Pulse In 2.
Two modes are available, selected at boot:
- Normal mode (default): detune/chorus across the six voices
- Slew mode (hold Switch Down at power-on): chord changes glide — all six voices portamento independently to their new pitches
In both modes, Pulse Out 2 and CV Out 2 fire a timed envelope on every chord event — a gate and a unipolar downward voltage ramp (+5V to 0V) that can drive a VCA, filter, or act as a trigger.
Inputs
| Jack | Function |
|---|---|
| CV In 1 | Root pitch 1V/oct (0V = C4) — summed with Knob X |
| CV In 2 | Timbre offset — bipolar, offsets the Main knob position |
| Audio In 1 | Slew speed offset bipolar CV |
| Audio In 2 | Chord inversion — bipolar; shifts voices up or down through octave inversions |
| Pulse In 1 | Rising edge advances the chord extension preset |
| Pulse In 2 | Rising edge recalls the next stored chord |
Outputs
| Jack | Function |
|---|---|
| Audio Out 1 | 6-voice mix |
| Audio Out 2 | Same 6 voices with per-voice phase offsets — stereo width |
| Pulse Out 1 | Square wave one octave below root |
| Pulse Out 2 | PWM envelope — resets to 50% duty on each chord event, ramps to 20% and holds |
| CV Out 1 | Root pitch + voiced interval (1V/oct) — follows X knob, CV In 1, and chord override |
| CV Out 2 | Unipolar downward ramp — +5V on chord event, decays to 0V and holds; tracks Pulse Out 2 timing exactly |
Controls
Knob X + CV In 1 — Root pitch Knob X sweeps from C3 to C6. CV In 1 tracks 1V/oct on top of that. Both are summed and applied uniformly to all six voices.
Knob Y — Interval Sets the interval between voice 1 (root) and voice 2 in audible integer semitone steps, 0 (unison) to 12 (octave). Voices 3–6 are chord extensions above the root, chosen by the current preset.
Main Knob + CV In 2 — Timbre Morphs the waveform of all six voices simultaneously. The curve is a W-shape:
| Position | Waveform |
|---|---|
| Fully CCW | Narrow pulse |
| 9 o'clock | Sine |
| 12 o'clock | Saw (fullest) |
| 3 o'clock | Sine |
| Fully CW | Narrow pulse |
CV In 2 offsets the knob position bipolarly but cannot push the timbre into a different detune/slew zone — that is always determined by the physical knob position.
Audio In 1 — Slew speed Patches a portamento glide onto all six voices. 0V (or unpatched) is instant — identical to the current behaviour. Positive voltage adds glide: at +5V the glide time is approximately one minute. The full range is continuously variable between those two extremes.
In normal (detune) mode, Audio In 1 adds slew on top of the existing detune — voices glide to their detuned targets rather than snapping to them. Detune is still active.
In slew mode, Audio In 1 offsets the zone-controlled rate. Positive voltage extends the glide beyond what the zone alone provides; negative voltage shortens it, bringing the glide back toward instant. (At maximum the slew time ~1min)
Audio In 2 — Chord inversions Shifts the voicing up or down through octave inversions. At 0V the voicing is unchanged. Positive voltage steps the lowest-sounding voice up by one octave per step, cycling the voicing upward. Negative voltage steps the highest-sounding voice down by one octave per step. There are six steps available in each direction.
This only affects the audio outputs — CV Out 1 and Pulse Out 1 continue to track the unmodified root pitch and interval.
Switch + Main Knob position — Detune (normal mode) / Slew rate (slew mode)
The four zones also set the rate of the Pulse Out 2 / CV Out 2 envelope in both modes.
In normal mode, four detune levels are selected by switch position and whether the Main knob is CCW or CW of centre:
| Switch | Knob position | Outer voice detune | Envelope ramp time |
|---|---|---|---|
| Mid | CCW of centre | 0 cents (clean) | ~250ms |
| Mid | CW of centre | 5 cents | ~100ms |
| Up | CW of centre | 10 cents | ~500ms |
| Up | CCW of centre | 15 cents | ~3s |
In slew mode, the same four zones set the portamento rate (detune is disabled):
| Switch | Knob position | Slew rate | Envelope ramp time |
|---|---|---|---|
| Mid | CCW of centre | Instant | ~250ms |
| Mid | CW of centre | Fast (~200ms) | ~100ms |
| Up | CW of centre | Slow (~700ms) | ~500ms |
| Up | CCW of centre | Glacial (~3s) | ~3s |
Tap Switch Down — Cycle preset A short tap (less than one second) advances the chord extension preset for voices 3–6. There are 6 presets per interval, cycling through different harmonic choices. A rising edge on Pulse In 1 does the same thing.
Chord extension presets
Each of the 13 Y positions (0–12 semitones) has 6 extension presets. Extensions are chosen to reinforce the harmonic character of the chosen interval — no minor 3rds if you've picked a major 3rd, no 3rds at all if you've picked a 5th or unison.
| Y | Interval | Harmonic world |
|---|---|---|
| 0 | Unison | 5ths and octaves only |
| 1 | Min 2nd | Clusters — semitone stacks, tritones, m7ths |
| 2 | Maj 2nd | Sus2 — 2nds, 4ths, 5ths, 9ths |
| 3 | Min 3rd | Minor — m3, P5, m7 |
| 4 | Maj 3rd | Major — M3, P5, M7, 9th |
| 5 | Perf 4th | Sus4/quartal — 4ths, 5ths, octaves |
| 6 | Tritone | Dim/aug — tritones, m3, M6 |
| 7 | Perf 5th | Power chord — 5ths, octaves, 9th |
| 8 | Min 6th | Minor/Phrygian — m3, P5, m6, m7 |
| 9 | Maj 6th | Major/pentatonic — M3, P5, M6 |
| 10 | Min 7th | Dominant/blues — P5, m7, 9th |
| 11 | Maj 7th | Lydian/maj7 — M3, P5, M7, #4 |
| 12 | Octave | Quartal/suspended — 4ths, 5ths, 2nds |
Boot modes
Normal mode — power on with Switch in any position except Down. LEDs sweep 0→5 at startup.
Slew mode — hold Switch Down before powering on, hold until LEDs flash (all on, then all off, ~200ms). Detune is disabled; chord changes glide instead.
Chord sequencer
Hold Switch Down (1 second) — Store chord Hold Switch Down until the LEDs change (one second). Release immediately — the chord is written to the next slot. The LED pattern shows which slot was just stored (LEDs 1, 3, 5 full bright; LEDs 0, 2, 4 encode the slot number in binary).
Up to eight chords can be stored. Storing more than eight overwrites from the beginning.
Recalling chords — Pulse In 2 Each rising edge at Pulse In 2 recalls the next chord in sequence, stepping through slots in the order they were stored and wrapping at the end. When a chord is held, LEDs 0, 2, 4 are full bright and LEDs 1, 3, 5 encode the recalled slot in binary.
Note: Pulse In 2 must be seen low at least once before it will respond (boot guard).
Breaking out of a held chord Move Knob X or CV In 1 by more than one semitone from where they were when the chord was recalled, or move Knob Y to a different step. The override releases immediately and you return to manual control.
Advancing preset while a chord is held Tapping Switch Down or sending a rising edge to Pulse In 1 advances the preset while the chord override is active — it does not break the override.
LEDs
| State | LED pattern |
|---|---|
| Boot (normal mode) | Single LED sweeps 0→5 |
| Boot (slew mode) | All LEDs flash on then off |
| Storing (hold active) | LEDs 1, 3, 5 full bright; LEDs 0, 2, 4 = slot number in binary |
| Chord held | LEDs 0, 2, 4 full bright; LEDs 1, 3, 5 = recalled slot in binary |
| Normal | LEDs 0–4: interval position; LED 5: preset brightness |
In normal operation, LEDs 0–4 show where Knob Y is across the 0–12 semitone range. LED 5 brightness indicates the current preset (dim = preset 0, bright = preset 5).
Voice layout
- Voice 1: always root
- Voice 2: root + Y interval (0–12 semitones)
- Voices 3–6: chord extensions above root, selected by current preset
Quick start
Self-contained pad
- Patch Audio Out 1 to a mixer or effects
- Knob Y to 7 (perfect 5th), Main Knob to 12 o'clock (saw — fullest sound)
- Switch Mid, Main Knob slightly CW for gentle 5-cent detune
Pitched chord voice
- Patch 1V/oct into CV In 1
- Knob Y to 4 (major 3rd), tap Switch Down to cycle presets
- Main Knob to taste — 12 o'clock for saw, 9/3 o'clock for sine, fully CCW/CW for pulse
Slow timbre sweep
- Patch a slow LFO into CV In 2
- The timbre morphs symmetrically around the current Main knob position
Chord sequence from a clock
- Set Pitch (X + CV In 1), Interval (Y), and preset (Switch Down taps) for your first chord
- Hold Switch Down for one second to store it
- Repeat for up to eight chords
- Patch a clock or gate sequence into Pulse In 2 — steps through your stored chords on each rising edge
- Move Knob X or Y by more than a semitone to drop back to manual
Portamento chord changes (slew mode)
- Boot with Switch Down held
- Set Switch Mid, Knob CW of centre for fast slew; Switch Up, Knob CCW for glacial
- Tap Switch Down or trigger Pulse In 1 to change preset — pitches glide to the new chord
Sub-bass layer
- Patch Pulse Out 1 to a filter or oscillator — clean square one octave below root
- Patch Pulse Out 2 alongside it for a PWM version whose timbre narrows on each chord change
Chord-triggered VCA
- Patch CV Out 2 to a VCA CV input — it fires +5V on each chord event then ramps down to 0V
- Works directly with any VCA that opens on positive voltage; no inversion needed
- Use Switch Mid CCW for a quick ~250ms decay; Switch Up CCW for a slow ~3s fade
Chord-triggered filter
- Patch CV Out 2 to a filter cutoff — the downward ramp darkens the filter after each chord change
- Combine with Audio Out into the filter input for a natural attack/decay envelope on the chord
Chord-triggered envelope (external)
- Patch Pulse Out 2 into an external envelope generator's gate input
- The PWM duty resets to 50% on each chord event — use the wide phase as your gate high time
- CV Out 2 mirrors the same timing as a direct voltage ramp if you don't have an envelope generator
Interval-keyed filter or oscillator
- Patch CV Out 1 to a filter cutoff or a second oscillator's 1V/oct input
- The CV tracks the root pitch plus voiced interval in semitones — use it to transpose an external voice in harmony with whatever Chorgan is playing
Technical notes
- 6-phase-accumulator oscillators, integer arithmetic throughout (RP2040 has no FPU)
- Tuning ratio applied uniformly to all voices — no per-voice stepping on X knob or CV In 1
- Detune zone determined by physical Main knob position; CV In 2 cannot cross zone boundaries
- Stereo width via per-voice phase offsets on Audio Out 2 (0°, 15°, 30°, 45°, 60°, 75°)
- Waveform: W-shape — pulse (CCW extreme) → sine (9 o'clock) → saw (12 o'clock) → sine (3 o'clock) → pulse (CW extreme)
- Pulse Out 2: PWM square at root pitch — resets to 50% duty on each chord event, ramps to 20% at zone-determined rate (~250ms / ~100ms / ~500ms / ~3s)
- CV Out 1: (X knob + CV In 1) + voiced interval in 1V/oct — clamped to ±5V; follows chord override
- CV Out 2: unipolar downward ramp — +5V on chord event, decays to 0V at the same rate as Pulse Out 2; retriggers on pitch semitone change, interval change, preset change, or chord recall
- Chord sequencer: stores pitch, interval, and preset — up to 8 chords; override breaks on >1 semitone movement from position at recall time
- Slew mode: per-voice IIR portamento on phase increment; rates: instant / ~200ms / ~700ms / ~3s
- 200ms startup holdoff before audio begins — eliminates power-on click
Credits
By Andy Jenkinson (uglifruit), developed with Claude Code.
Built on the Workshop Computer platform by Tom Whitwell (Music Thing Modular), using the ComputerCard framework.
V/oct lookup table (voct_vals) from Utility Pair by Chris Johnson, used with permission under the original licence.
Waveform morphing concept inspired by Mutable Instruments Braids (Émilie Gillet).
Licensed under Creative Commons Attribution-ShareAlike 4.0.