draft: false
Name: WaveSeq
short-description: "Wavestation-style wave sequencing - up to 32 steps crossfading through a bank of 64 waves - edited from a Music Thing 8mu, with its four buttons paging the faders between wave, time, pitch and level"
Language: C++ (Pico SDK + ComputerCard)
Creator: XponentOneAudio
Version: "0.6.2"
Status: Beta
License: MIT
Editor: web
date-created: 2026-10-02
date-updated: 2026-10-09
contact:
email: XponentOneAudio@gmail.com
# Vendors, unmodified and under their own MIT terms:
# ComputerCard.h, EightMU.h (which carries the rppicomidi usb_midi_host
# driver, (c) 2023 rppicomidi)
# (c) Chris Johnson
uf2:
- path: UF2/waveseq.uf2
name: Wave Sequencer 0.6.2
tags:
- synth
- oscillator
- wavetable
- sequencer
- usb-host
- midi
- 8mu
summary: |
Wave sequencing, as made famous by the Korg Wavestation: instead of one
waveform, the oscillator plays a sequence of them, each for its own time,
pitch and level, crossfading from one to the next.
There are up to 32 steps, and a bank of 64 single-cycle waves in eight
families - additive, saw to square, pulse width, hard sync, FM, vowels,
wavefolding and digital. A step's wave is a position in the bank rather
than a choice from a list, so it can sit between two waves.
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 what the
faders edit: A is WAVE, B is TIME, C is PITCH and D is LEVEL. 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. Pressing a button again flips to its second page: A gives per-step FM amount and B per-step wave scan amount,
each multiplying the panel's amount and crossfading between steps; C gives
per-step glide, sliding into the step's pitch from the last; and D gives a
per-step gate length on Pulse Out 1, from off through to a tie. After a
page change each fader picks
up its step only once it reaches the stored value, so changing page never
makes the sound jump. The 8mu's LEDs show the stored values, with the
playing step lit fully. Tilting the 8mu forward and back scans every
step's wave together; tilting it left and right widens the detune on
Audio Out 2.
Without an 8mu the card plays a default sequence, still under the panel's
pitch, speed and crossfade controls.
panel:
inputs:
- id: AudioIn1
name: FM
type: audio
description: Linear FM of the oscillator, depth set by X with the switch in the middle.
- id: AudioIn2
name: Wave scan
type: cv
description: Offsets every step's wave position, up to 32 waves either way, depth set by Y with the switch in the middle. Works at audio rate.
- id: CVIn1
name: Pitch
type: cv
description: 1V/oct, added to the Main knob.
- id: CVIn2
name: Speed
type: cv
description: Sequence speed, 1V/oct - each volt doubles the speed. With a clock, moves the clock divider/multiplier two steps a volt.
- id: PulseIn1
name: Clock
type: pulse
description: >
While clocks are arriving, steps advance on beats instead of by
time, each lasting the number of beats (1-8) set by its TIME fader,
for clocks anything up to 20s apart. A beat is the clock divided or
multiplied by the speed knob (X, switch up): /8 to x8. The card follows the clock from
its second pulse, and returns to free running once four of the
clock's periods (at least 2s) pass without one.
- id: PulseIn2
name: Restart
type: pulse
description: Restarts the sequence from its first step, with oscillator phases reset.
outputs:
- id: AudioOut1
name: Out
type: audio
description: The wave sequence.
- id: AudioOut2
name: Detuned
type: audio
description: The same sequence, detuned by 6 cents - more with the 8mu tilted left or right.
- id: CVOut1
name: Step pitch
type: cv
description: The current step's PITCH as 1V/oct, 0V for no offset, gliding with the GLIDE page.
- id: CVOut2
name: Level
type: cv
description: The current step's LEVEL, following the crossfade, 0-5V.
- id: PulseOut1
name: Gate
type: pulse
description: >
A gate for each step, its length set per step on the GATE page (D,
second page): off, a fraction of the step (at least 5ms), or tied
into the next step. Default half the step.
- id: PulseOut2
name: Start
type: pulse
description: Trigger when the sequence returns to its first step.
controls:
switch:
up:
name: Timing
description: X and Y set speed and crossfade.
middle:
name: Modulation
description: X and Y set FM amount and wave scan amount.
down:
name: Direction
description: >
Momentary. Each tap steps the direction - forward, ping-pong,
random - and the top LEDs show which for a second (one, two or
three LEDs).
knobs:
- when:
z: up
main:
name: Pitch
description: C1 to C7.
x:
name: Speed
description: Scales every step time, from 1/8x to 8x. 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.
y:
name: Crossfade
description: From a hard cut between steps to a crossfade lasting the whole step.
- when:
z: middle
main:
name: Pitch
description: C1 to C7.
x:
name: FM amount
description: >
Depth of linear FM from Audio In 1, squared law. Each X/Y setting
keeps its value; after the switch moves a knob picks up only once
turned to its setting's value, so nothing jumps.
y:
name: Scan amount
description: Depth of wave scan from Audio In 2, up to 32 waves either way.
leds:
- display: list
items:
- id: LED0
name: Page A / step
description: With an 8mu or the web editor, LEDs 0-3 show the button whose page is selected (A-D), steady for its first page and blinking slowly for its second. Without one, they show the playing step - bright for steps 1-4 of each bank, dim for 5-8.
- id: LED1
name: Page B / step
- id: LED2
name: Page C / step
- id: LED3
name: Page D / step
- id: LED4
name: Gate
description: Follows Pulse Out 1, the per-step gate.
- id: LED5
name: 8mu / editor
description: 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.