802 CVSeq

sequencermodulationcvusb-hostmidi8mu

A step sequencer for control voltages. Each of its up to 32 steps plays a shape - a ramp, a pluck, a sine, stairs, a random wander - and the steps run on one after another as one continuous voltage.

Every step has two shapes from a library of 40 and a morph between them, a level, a start and an end level from -100% to +100% that ramp across the step (so it can invert, or swing through zero), an offset of -5V to +5V, a quantise that turns the shape into held stairs, and a chance that it plays at all. A step that loses its chance holds the voltage where it was.

The sequence is edited from a Music Thing 8mu: its eight faders edit one bank of eight steps at a time, and its four buttons choose the page - A is SHAPE 1, B SHAPE 2, C MORPH and D LEVEL - with further presses giving START (A), END (B), OFFSET (C), and QUANT then CHANCE (D). A long press of a button chooses the bank (A steps 1-8 to D steps 25-32), and holding a button while moving a fader sets the last step, from 1 to 32; it starts at 8. Faders pick up, so changing page never makes the voltage jump, and the 8mu's LEDs show the stored values. Tilting the 8mu morphs every step at once (past a dead zone of about 15 degrees, so holding it doesn't).

Eight directions run the sequence, chosen by holding the switch down and turning Main: step forward, step ping-pong and step backward change the order of the steps, true ping-pong and true reverse play the whole sequence backwards, every shape reversed too, and random step, random reverse and true random roll the dice on which step plays next, which way round, or both.

An optional (but highly recommended) web editor (web/index.html, Chrome or Edge) draws the sequence with a live playhead and a scope of the output, shows the shape library, and keeps presets. With a computer plugged into the Computer's USB socket the card becomes a USB MIDI device for the editor, and an 8mu plugged into the computer is passed on through it.

Panel

Workshop Computer panelRateSmoothingMorph offsetUnusedUnusedMorphRateClockRestartCV copyInvertedCVQuantisedStepStart

Controls

Main knob

Rate
8s to 10ms per step. With a clock on Pulse In 1 it picks a clock divider or multiplier instead, in eleven equal zones - /8, /6, /4, /3, /2, x1 (centre), x2, x3, x4, x6, x8.

X knob

Smoothing
Off across the bottom few percent of the knob, then a lag of 1ms to about 2s.

Y knob

Morph offset
Added to every step's MORPH, -100% to +100%.

Switch

Output: Main sets the scale, X and Y depth and offset.

Shape: Main sets the rate, X and Y smoothing and morph offset.

Direction: Momentary. Hold it and turn Main to choose the direction from eight: step forward, step ping-pong, step backward, true ping-pong, true reverse, random step, random reverse and true random. A tap without turning steps to the next. While held, LED 4 is lit and LEDs 1-3 show the direction's number in binary.

Inputs & Outputs

Inputs

Outputs

Inputs

Audio 1

Unused
Not used.

Audio 2

Unused
Not used.

CV 1

Morph
Added to every step's MORPH; +5V moves it all the way from shape 1 to shape 2.

CV 2

Rate
Rate, 1V/oct - each volt doubles the speed. With a clock, moves the clock divider/multiplier two steps a volt.

Pulse 1

Clock
While clocks are arriving, each step lasts one beat, for clocks anything up to a minute apart. A beat is the clock divided or multiplied by the Main knob (switch middle): /8 to x8. The card follows the clock from its second pulse, and returns to the Main knob's rate once four of the clock's periods (at least 2s) pass without one.

Pulse 2

Restart
Restarts the sequence from its first step.

Outputs

Audio 1

CV copy
The same voltage as CV Out 1, uncalibrated.

Audio 2

Inverted
CV Out 1 inverted, uncalibrated.

CV 1

CV
The sequence - offset plus depth times 0 to 5V - after smoothing.

CV 2

Quantised
CV Out 1 quantised to the chosen scale (to semitones with the scale Off), 1V/oct.

Pulse 1

Step
Trigger at the start of every step that plays (not one that loses its chance).

Pulse 2

Start
Trigger at the start of the sequence.

LEDs

LED 1

Page A / step
With an 8mu or the web editor, LEDs 0-3 show the button whose page is selected (A-D), steady for its first page, blinking slowly for its second and quickly for its third. Without one, they show the playing step - bright for steps 1-4, dim for 5-8.

LED 2

Page B / step

LED 3

Page C / step

LED 4

Page D / step

LED 5

CV
Brightness follows CV Out 1, 0 to 5V.

LED 6

8mu / editor
Lit while an 8mu, or the web editor, is connected. Blinks fast while the X or Y knob is waiting to pick up its setting.

README

CVSeq

A 32-step CV sequencer for the Workshop Computer, after the Performer modulator in Native Instruments' Massive. Each step plays a shape rather than a single voltage, and the steps run on one after another as one continuous control voltage. It's edited from a Music Thing 8mu, with an optional web editor.

Built from the same template as WaveSeq: the same 8mu paging and pickup, USB modes, knob pickup, web editor and presets.

What a step is

Each step has nine settings, on the 8mu's nine pages:

Button First page Second page Third page
A SHAPE 1: one of 40 shapes START: level at the start of the step, −100% to +100%
B SHAPE 2: one of 40 shapes END: level at the end of the step, −100% to +100%
C MORPH: from shape 1 (down) to shape 2 (up) OFFSET: a voltage added to the step
D LEVEL: the step's level QUANT: digital stepping of the shape CHANCE: the chance the step plays

A step's voltage is the morph between its two shapes, times its level, times a ramp from its START level to its END level across the step, plus its OFFSET. So START and END (both +100% by default) let a step fade in or out, or tilt a flat shape into a ramp.

START and END are two-sided: fader down is −100%, the centre 0 (the middle three positions all read exactly 0) and up +100%. Below the centre the shape is turned upside down, so both at −100% inverts the step, down to −5 V at full depth, and a ramp from +100% to −100% swings the step from its shape, through zero, to its shape inverted. To fade in from silence, start at the centre rather than the bottom.

OFFSET adds −5 V (fader down) to +5 V (fader up) to the step, with the centre at 0 V, the default. The middle three fader positions all read as exactly 0 V, so it's easy to find. Depth scales the offset along with the rest of the step, and the offset knob is added on top. With LEVEL at zero a step is just its offset, so the faders become a plain stepped-voltage sequencer. With a scale chosen, a quantised step still snaps to the scale, offset and all. The output is limited to ±6 V, so a step at full level with a big offset clips.

QUANT turns the step into held stairs: fully down is smooth, then 32 stairs across the step, fewer as it rises, down to one held value at the top.

Scales. With the switch up, the Main knob chooses a scale. Off (fully down, the default) leaves QUANT as above. Any other scale also snaps the voltage of every step with QUANT above zero to the nearest note of the scale, 1 V/oct with C at 0 V. The snap comes last, after LEVEL, START and END, depth, offset and smoothing, so a quantised step only ever gives the scale's notes: a fade-in climbs through the scale, and smoothing slows a change down by stepping through the notes in between rather than gliding off the scale. Steps with QUANT fully down stay smooth, so melodic and smooth steps can share a sequence. CV Out 2 follows the scale for every step.

The scales, in order round the knob: Off, Chromatic, Major, Minor, Harmonic minor, Dorian, Phrygian, Lydian, Mixolydian, Major pentatonic, Minor pentatonic, Blues, Whole tone, Diminished, Fifths, Octaves. When the scale changes, LEDs 1-4 show its number in binary for a second (LED 1 the lowest bit; none lit is Off).

CHANCE is rolled each time a step comes round. A step that doesn't play holds the voltage where it was for its length, and gives no trigger. Default: always.

The shapes

High, Middle, Low, Ramp up, Ramp down, Triangle, Valley, Hump, Sine, Cosine, Exp rise, Exp rise x2, Exp rise x3, Exp fall, Exp fall x2, Exp fall x3, Log rise, Log fall, S rise, S fall, Square, Square late, Pulse, Pulse late, Stairs up, Stairs down, Saw x2, Saw x3, Saw down x2, Saw down x3, Triangle x2, Triangle x3, Sine x2, Sine x3, Pluck, Swell, ADSR, Bounce, Random steps, Random smooth.

The SHAPE faders select from these in order, about three fader positions to a shape. The "x2" and "x3" shapes repeat two or three times within one step. Every shape is 0 to 1 across one step; the random shapes are fixed patterns, the same every time.

The 8mu

There are 32 steps, in four banks of eight, and the eight faders edit one bank at a time. The sequence starts 8 steps long (bank A), and its length can be anything from 1 to 32.

The four buttons are acted on when you let go, so how long you held one decides what it does:

Do this To
Short press A-D Choose the page. Press the same button again for its next page, and round to its first again: A, B and C have two pages, D three (LEVEL, QUANT, CHANCE). Another button always starts on its first page
Long press A-D (half a second) Choose the bank the faders edit: A = steps 1-8, B = 9-16, C = 17-24, D = 25-32. The LED of fader 1-4 for that bank flashes three times
Hold A-D and move a fader Set the last step: the button is the bank, the fader the step within it. The fader has to move a good way (about a sixth of its travel) to count, so a fader twitching during a long press doesn't change the length. Hold D and move fader 8 for 32 steps; hold A and move fader 4 for 4 steps. The faders up to the last step light briefly. The fader movement doesn't edit anything

Steps past the end of the sequence keep their settings, so shortening and lengthening it again loses nothing. On power-up, steps 9-32 start as copies of steps 1-8.

Pickup. After a page change the faders don't do anything until they reach the value already stored for their step (or pass it), then take it over. So changing page never makes the voltage jump.

LEDs. The 8mu's LEDs show the stored values on the current page, and the playing step is lit fully. On the Computer, LEDs 1-4 show which button's page is selected: lit steadily for its first page, blinking slowly for its second and quickly for its third.

Motion. Tilting the 8mu forward and back adds to every step's MORPH. The first 15 degrees or so either side of flat are ignored, so holding it in your hand doesn't nudge the morph; tipping it right up still reaches the full range.

Without an 8mu the card plays a default sequence, still under the panel controls.

Directions

Hold the switch down and turn Main to choose one: the knob's travel is split into eight zones, in the order of the table below. Turning Main while the switch is held doesn't touch the scale or the rate; afterwards Main waits to pick its scale or rate up again, so neither jumps. A quick tap without turning still steps to the next direction.

While the switch is held, and for a second after, LED 4 is lit to show it's the direction, and LEDs 1-3 show its number (0-7, in the table's order) in binary, LED 1 the lowest bit.

Direction Steps Shapes
Step forward 1 to the last step forwards
Step ping-pong 1 to the last, then back (end steps once) forwards
Step backward the last step to 1 forwards
True ping-pong 1 to the last, then the last to 1 forwards, then backwards
True reverse the last step to 1 backwards
Random step a random step each time, never the same twice running forwards
Random reverse 1 to the last step each at random forwards or backwards
True random a random step each time, never the same twice running each at random forwards or backwards

The "step" directions change only the order of the steps; each shape still plays forwards. The "true" directions play the whole sequence backwards, every shape reversed too, as if the voltage were recorded and played in reverse. True ping-pong plays step 8 forwards and then backwards at the turn, so the voltage turns round without a jump (same for step 1 at the other end). Step ping-pong doesn't repeat the end steps. The random directions roll again at every step, so they never settle into a loop.

Panel

Control Function
Switch up Main = scale, X = depth (-100% to +100%), Y = offset (-5 V to +5 V)
Switch middle Main = rate (8 s to 10 ms per step; with a clock, a clock divider or multiplier, below), X = smoothing (off across the bottom of the knob, then 1 ms to about 2 s), Y = morph offset (-100% to +100%, all steps)
Switch down Hold and turn Main to choose the direction; tap to step to the next

All knobs have a small dead zone at each end, so the full range is reached even if a knob doesn't quite read its very ends, and the two-sided settings (depth, offset, morph offset) have one in the middle, so exactly 0 is easy to find.

The six knob settings each keep their value. After the switch moves, a knob does nothing until it's turned to (or past) its new setting's value, then takes over. LED 6 (bottom right) blinks fast while a knob is waiting. At power-up the knobs take over straight away for the position the switch is in; the others start at depth +100%, offset 0 V, scale Off, one step a second, smoothing off and morph offset 0.

Jack Function
CV In 1 Morph offset: +5 V moves every step all the way from shape 1 to shape 2
CV In 2 Rate, 1 V/oct
Pulse In 1 Clock: each step lasts one beat, the clock divided or multiplied by Main, for clocks up to a minute apart. The card follows the clock from its second pulse, and goes back to the rate knob once four of the clock's periods (at least 2 s) pass without one
Pulse In 2 Restart from the first step
CV Out 1 The sequence: offset + depth x the steps (0 to 5 V, or beyond with step OFFSET or a negative START or END), smoothed; ±6 V at most
CV Out 2 CV Out 1 quantised to the scale (to semitones with scale Off), 1 V/oct
Audio Out 1 CV Out 1, uncalibrated
Audio Out 2 CV Out 1 inverted, uncalibrated
Pulse Out 1 Trigger at the start of every step that plays
Pulse Out 2 Trigger at the start of the sequence

Clock divide and multiply. While a clock is plugged into Pulse In 1, Main (switch middle) stops setting the rate and picks a ratio instead, in eleven equal zones round the knob: ÷8, ÷6, ÷4, ÷3, ÷2, ×1 (the middle), ×2, ×3, ×4, ×6, ×8. Each step lasts one beat. Dividing, a beat waits for that many clocks; multiplying, each clock is split into that many evenly spaced beats, measured from the clock and started again by every clock, so they never drift from it (and never run on past a clock that slows). CV In 2 moves the ratio two steps a volt, about an octave. The web editor shows the ratio in the Rate readout, and the sequence's length in clocks under it.

Audio In 1 and 2 are unused. LED 5 (bottom left) follows CV Out 1's level.

Three ways to use it

Plugged into the Computer's USB socket The card is The faders are
an 8mu USB host the 8mu's, read directly. No computer needed
a computer a USB MIDI device called CVSeq the web editor's, and an 8mu plugged into the computer is passed on by the editor
nothing USB host, waiting (plug an 8mu in any time)

The card picks its mode once, at power-up, so after plugging a computer in, power-cycle the module. This needs Computer Rev 1.1 hardware; older boards are always a USB device.

Web editor

Open web/index.html in Chrome or Edge, with the computer plugged into the Computer's USB socket and the module power-cycled, and press Connect card & 8mu. It's a single file and needs no network. The page reads the sequence from the card, then sends every edit as it's made.

From the top (each section has a − button by its heading that folds it away, and + to bring it back; the browser remembers which are folded):

  • Readouts. Step, rate, depth, offset, smoothing, morph offset, scale and whether the card is clocked, live from the card. While a knob on the module is waiting to pick up its setting, that setting's box has a dotted orange outline; it goes once the knob reaches the value.
  • Direction buttons set the card's direction, and follow it when the switch is tapped.
  • Bank, length and shift. Bank buttons, −/+ for the length, and −/+ to shift: every step in the sequence moves one place left or right, all its settings with it, the end step wrapping round to the other end (steps past the length stay put; Undo takes a shift back). Just above the sequence so they stay put as the length changes.
  • Sequence. All 32 steps, eight to a row, in the same columns as the faders. Steps in the sequence are drawn full size as one voltage, with a playhead that runs backwards through a reversed step; steps past the end shrink to small grey boxes, so on load there are eight steps and three rows of boxes. With any step below 0 V or above 5 V (through OFFSET or a negative START or END), the rows stretch to fit it. The bank the faders edit has an orange box round its row. Faint steps have less than full chance. Click a step to select it (and its row's bank).
  • Copy, paste & randomise. Select steps on the sequence: click one, Shift+click a range, Ctrl/⌘+click to add or remove single steps, double-click for a whole row, Alt+click for a whole column (the same fader in every bank), or use the Row, Column, Sequence and All 32 buttons. Copy (Ctrl/⌘+C) takes every setting of the selected steps; Paste (Ctrl/⌘+V) puts them back: one copied step fills every selected step, several fill the same number of selected steps in order, or else keep their pattern from the first selected step. Shift+paste pastes only the page the faders show. Randomise changes the shape (shape 1, shape 2 and morph), the shape and levels (plus LEVEL, START, END and OFFSET) or everything (plus QUANT and CHANCE), of the selected steps, a row, a column or the whole sequence. Levels are fitted so each step stays within 0 to +5 V or −5 to +5 V (at full depth), as chosen, and LEVEL is kept at 31% or more so a step is never lost. Undo (Ctrl/⌘+Z) takes back pastes, randomising and shifts. Clicking a shape gives it to every selected step. The keys are listed on the page.
  • Faders. Nine pages, each showing the selected bank's eight steps, as on the 8mu.
  • CV Out 1. A scope of the last four seconds of the output.
  • Shapes. All 40. Click one to give it to the selected step.
  • 8mu on the computer. Its faders, buttons and tilt drive the page, with the same pickup as the card, and the page lights its LEDs as the card would.
  • Both editors at once. With the WaveSeq editor open too (each Computer plugged into the computer), one 8mu drives whichever editor you last clicked in, or opened. The header shows 8mu: here or 8mu: elsewhere; clicking it, or anywhere on the page, takes the 8mu. The other page ignores the 8mu and leaves its LEDs alone, but follows where the faders are, so they pick up as usual when it comes back. Use two windows side by side rather than tabs: Chrome slows a tab that's been in the background for a few minutes.
  • Inputs & outputs, 8mu and Sequencer. Cards on the right: every jack and what it does; the 8mu's buttons (page, bank, last step), pickup, LEDs and tilt; and how a step and the sequence work, with the panel controls.
  • Readouts include the rate and, under it, the whole sequence's length in time.
  • Presets. Eight built in (Offset melody shows OFFSET as a step sequencer), plus your own, kept in the browser. Save, update, rename, delete, export and import as JSON. Loading one sends it to the card.

Without a card the page still edits, previews and keeps presets, with a simulated playhead at one step a second.

The protocol is documented in sysex.h. The card and the editor must be the same version: this one (protocol 4) won't talk to older firmware. Presets saved before OFFSET still load, with every offset 0 V, and presets saved before START and END went two-sided are converted so they sound the same (their 0% becomes the centre).

Building

mkdir build && cd build
cmake .. && make

Needs the Pico SDK. EightMU.h and ComputerCard.h are copied from Demonstrations+HelloWorlds/PicoSDK/ComputerCard.

Not yet

  • Sequences aren't saved on the card, so they're lost at power-off. Keep them as presets in the web editor and send them again after power-up.

Verify your download

Confirm the file you downloaded really is that new firmware.

macOS / Linux (Terminal)

shasum -a 256 firmware.uf2

Linux also has sha256sum firmware.uf2.

Windows (PowerShell)

Get-FileHash firmware.uf2 -Algorithm SHA256

Compare the result to the SHA256 on the website — it should match exactly.