overdub

aphex-move

filliformes/aphex-move · ★ 1

Korg MS-10/MS-20 hybrid mono synth for Ableton Move (Schwung framework)

README from GitHub, MIT

Aphex

Korg MS-10 / MS-20 hybrid mono synth for Ableton Move.

Built for the Schwung framework. Part of the open-source lutherie banner Filliformes.

Dual-VCO grit through a self-oscillating KORG-35 / OTA filter cascade, a source-side patchbay, an External Signal Processor that turns Move's line-in into pitch/envelope/gate CV, and a multi-source analog drift engine that gives every instance its own personality. 41 factory patches, MS-10 collapse mode, and a "Modern" page of extras.


What it is

Aphex is a monophonic sound generator module for Ableton Move that fuses the MS-10's focused playability with the MS-20's modulation depth and aggressive Korg-35 filter. Two oscillators feed a drive stage into an HPF→LPF cascade — the place where the MS-20 magic lives — with a semi-modular patchbay and ESP modeled on the original hardware's ergonomics.

Voice state is fully encapsulated for a clean polyphonic expansion later; v0.1.0 is mono, last-note priority.

Features

  • Two oscillators — VCO 1 (Tri / Saw / PW-Square / Noise, 32′/16′/8′/4′), VCO 2 (Saw / Square / Pulse / Ring, 16′/8′/4′/2′) with hard sync, FM, sub, and detune.
  • Two switchable filter circuits:
    • REV.1 (KORG-35) — early MS-20 / MS-10: Sallen-Key, asymmetric forward-path saturation, "creamy fuzz" break-up at self-oscillation — harsher, rock'n'roll.
    • REV.2 (OTA / LM13600) — late MS-20: symmetric feedback saturation, buffered inter-stage, cleaner "howl/whistle", resonance develops earlier in the travel.
    • Cascade modes: HP+LP (default, MS-20), LP only, HP only, Notch.
  • Source-side patchbay — 8 input-jack source selectors, no destination-depth knobs. Attenuation lives in the panel knobs (HPF MG, LPF EG, …) exactly like the hardware.
  • External Signal Processor (ESP) — Move's line-in becomes a YIN pitch tracker, envelope follower, Schmitt gate, and routable raw audio, with Lo Cut / Hi Cut / CV Adjust / Threshold. Route ESP Audio through the filter for the classic mangler sound.
  • Two envelopes — EG 1 trapezoid (Delay-Attack-Release) drives the filter by default; EG 2 HADSR (with up to 20 s hold) drives the amplitude.
  • Multi-source analog drift — per-instance fixed detune/calibration offsets, slow thermal random walk, mid-rate mains-hum flutter, per-sample phase jitter, and note-on phase re-roll. Each instance gets its own character from a pointer-derived seed.
  • Velocity shaping — gentle (sqrt) curve + floor so soft pad hits stay audible, with a Vel→Amp depth control (0 = velocity ignored … 1 = full dynamic range).
  • 20 ms "analog" smoothing on cutoff, resonance, pitch (Scale/Fine/Detune/Tune), volume, and LFO depth — knob moves glide while envelopes and the LFO stay snappy.
  • MS-10 mode — collapses to VCO 1 + LPF + EG 2 only.
  • 41 factory presets across Bass / Lead / Pad / Keys / Sequence / SFX / Drone / ESP, plus Random Patch / Mutate / Random Mod performance triggers.
  • MIDI note, pitch bend (±1 oct), mod wheel, and channel/poly aftertouch.

Signal flow

 VCO1 ─┬─────┐                          ┌── EG1 (filter env, default)
 VCO2 ─┤     │                          │
 Sub  ─┤  →  MIX → DRIVE → HPF(K35) → LPF(K35) → VCA → output stage → OUT
 Ring ─┤                                  ^          ^
 Noise┤                               cutoff/reso   EG2 (amp) × velocity × volume
 ESP  ┘                               (+ MG / drift)

Pages (jog-wheel navigation, 8 encoders each)

PageKnobs
Aphex (root)LPF Cut · LPF Peak · HPF Cut · HPF Peak · MG Freq · MG Depth · Drive · Volume
Patch (menu)Preset · Rnd Patch · Mutate · Rnd Mod · Reset Patch · Octave · M.Tune · Portamento
VCO 1+2V1 Wave · V2 Wave · V1 PW · Pitch (V2) · Scale 1 · Scale 2 · Portamento · M.Tune
MixerVCO 1 · VCO 2 · MG/T.EXT · EG1/EXT · ESP Aud · Sub · Noise · FB
FilterHPF Cut · HPF Peak · HPF MG · HPF EG · LPF Cut · LPF Peak · LPF MG · LPF EG
EnvelopesE1 Delay · E1 Atk · E1 Rel · E2 Hold · E2 Atk · E2 Dcy · E2 Sus · E2 Rel
MG / ESPMG Freq · MG Shape · ESP Sig Lvl · ESP Lo Cut · ESP Hi Cut · ESP CV Adj · ESP Threshold · MG PW
PatchbayKBD CV · T.EXT · VCO Freq · HPF EG/Ext · LPF EG/Ext · Initial Gain · VCO 2 CV · Ext Sig
ModernDrift · Drive · KeyTrack · Filter Rev · MS-10 Mode · V1 Drift · MW→MG · MW→Filt

Menu-only extras live on most pages (Sync/FM/Detune on VCO; Color on Mixer; MG PW; Filter Mode, X-Mod, Vel→Amp on Modern; PWM In and EG-trigger jacks on Patchbay).

Patchbay (MS-20 input jacks)

Each row is one MS-20 input jack — pick what's plugged in. There are no per-jack depth knobs; the panel attenuators (HPF MG, LPF EG, …) control intensity, just like the original.

KBD CV In     [Normal ▾]    ← what feeds the VCO Hz/V CV
T.EXT         [MG ▾]        ← replaces MG in the panel MG/T.EXT attenuators
VCO Freq      [EG1 ▾]       ← replaces EG1 in the VCO Master EG1/EXT attenuator
HPF EG/Ext    [EG1 ▾]       ← filter envelope source for the HPF
LPF EG/Ext    [EG1 ▾]       ← filter envelope source for the LPF
Initial Gain  [None ▾]      ← INITIAL GAIN: adds to EG2's VCA control
VCO 2 CV      [None ▾]      ← separate Hz/V into VCO 2 only
Ext Sig       [None ▾]      ← VCF external signal input

ESP — External Signal Processor

Plug a source into Move's line-in (or use the mic when nothing is connected). Aphex tracks its pitch with the YIN algorithm, follows its envelope, gates on a threshold, and exposes the raw audio — all routable through the patchbay. The signature trick: send ESP Aud into the Mixer and out through the Korg-35 filter for the iconic MS-20 external-audio mangler.

Installation

  1. In Schwung Manager, refresh the catalog.
  2. Find Aphex under sound generators and click Install.
  3. Power-cycle the Move so the host loads the new module.json.
  4. Add Aphex to a chain.

Manual install (devs / pre-release)

git clone https://github.com/filliformes/aphex-move.git
cd aphex-move
./scripts/build.sh                       # Docker ARM64 cross-compile → dist/aphex/dsp.so
./scripts/install.sh                     # scp dsp.so + module.json + help.json to move.local
# Override target host:
MOVE_HOST=192.168.1.42 ./scripts/install.sh

After install, power-cycle the Move (module.json changes are cached at host startup; removing/re-adding the module only reloads the .so).

Building from source

Requires Docker (or a local aarch64-linux-gnu-gcc toolchain).

./scripts/build.sh    # cross-compile dsp.so for ARM64, package dist/aphex-module.tar.gz
./scripts/install.sh  # deploy to the Move over SSH
src/
  module.json          metadata, ui_hierarchy, chain_params
  help.json            on-device help tree
  dsp/
    aphex.c            all DSP (oscillators, K35/OTA filters, envelopes, MG, S&H, ESP, patchbay)
    k35.h / k35_ota.h  clean-room KORG-35 and OTA filter models
    yin.h              YIN pitch tracker
    drift.h            multi-source analog drift

Credits

  • Inspired by the Korg MS-10 and MS-20 (1978), designed by Fumio Mieda.
  • Filter research: Tim Stinchcombe — MS-10/MS-20 Filters study.
  • Clean-room K35 derivation from Will Pirkle (AN-5 / AN-7v2) + Vadim Zavalishin's TPT framework.
  • YIN pitch tracker: de Cheveigné & Kawahara (2002).
  • Drift taxonomy inspired by Mutable Instruments Braids and U-He Diva.
  • Built for the Schwung framework by Charles Vestal.
  • Named in honor of Richard D. James, lifelong MS-20 abuser.

License

MIT — see LICENSE. All DSP is original / clean-room (no copyleft inheritance).