Windsynth

a synth for MIDI wind controllers on the M-VAVE FM-1, with Plaits voices, running in the browser from the same code

In development, and not released yet. This page is for trying it in the browser. The firmware for the FM-1 itself comes out once it has been tested on the real thing.

Turn your phone sideways for bigger controls.

Off. Sound starts when you switch it on.
Note –
MIDI 0
Breath
Bite
Cutoff
Reso
Amp
Output

Install on your FM-1

Not yet: the firmware isn't released. It will be, here, once it has been tested on a real FM-1.

Have a test build? Install it

Beta. Custom firmware is installed at your own risk. Before you start, download M-VAVE's stock firmware (FM-1 V15, "PC Firmware" at m-vave.com/download) so you can always go back (below).

  1. Connect the FM-1 to this computer with a USB data cable, directly (no hub, probe or Transporter). Close other apps that use MIDI.
  2. Use Chrome or Edge, and allow MIDI (with SysEx) when the browser asks.
  3. Press Install. Don't unplug or close this page while it writes (about a minute). The FM-1 restarts into Windsynth and shows its version.
No release yet: choose a file below.

Back to the stock firmware

This writes M-VAVE's own FM-1 V15 back, from Windsynth (or its safe mode, or any Felucca-family firmware) over the same USB cable. Choose the file you downloaded from M-VAVE: it is checked (SHA-256) before anything is written. If the FM-1 doesn't start at all, it comes up in safe mode after two tries, where this still works; past that, the rescue tool in Windsynth's source (tools/fm1_rescue.py) restores it from a Mac.

Log

  

Playing

  • Connect MIDI and pick your windsynth (or All inputs). Notes play the voice; breath (CC2 by default, or aftertouch or another CC on the Setup page) opens the filter, and with a Mod slot set to Amp, the volume.
  • The bite (pitch bend) bends ±2 semitones by default (Pitch page). Glide follows CC5 by default; another CC, or none, on the Setup page.
  • Last note wins: overlapping notes play legato, without a new attack, and letting one go returns to the one still held.
  • The FM-1's own keys play from F3, every key its printed note, at full breath. OCT− / OCT+ shift them.
  • PRESETS picks one of 64 presets: the first 18 are factory presets, named as you turn to them, and the rest start as the init sound. The header shows it, with a * once you change the sound. SAVE asks "SAVE TO P12": turn PRESETS for another slot, then SAVE again. A preset holds the sound; the breath curve, Pitch 2 (CC depth, transpose, tune), the keys' octave and Setup stay as they are.

Pages

  • HOME Filter: cutoff, resonance, slope, and Breath: how far breath opens the cutoff (+75 to start). Press again for the Engine page, named for the engine (ALGORITHM picks it: Classic, FM, 6-op, Formant, Waveshape, VA, PD (phase distortion) or Harmonic (additive)): its own three knobs, named for what they do (Classic has only Morph, its waveform; 6-op's first picks one of 96 DX7 patches), and Aux: from the engine's main output to its second output alone. Again for Noise: a noise layer under any engine, with level, type (low-pass to high-pass), freq (from the note) and reso.
  • ENV Breath: curve, attack, release.
  • LFO LFO: shape (sine, triangle, saw, square, S&H), rate (5 Hz by default), destination (the Mod slots', plus pitch, in cents) and amount (0 by default: off). Again for LFO 2: fade (how long it takes to come in) and sync (free, or each new phrase restarts it).
  • SEQ Pitch: bend range, Glide (the glide time, 4 ms by default), glide always or legato only. The glide CC adds to Glide, never takes away: at 0 the glide is Glide itself. Again for Pitch 2: CC depth, how much the CC adds at full (400 ms by default, up to 2 s), transpose and tune.
  • SEL Mod 1–4 (press again for the next): source (breath, bite, mod wheel, pressure, velocity), destination (cutoff, resonance, amp, morph, timbre: FM's index, noise: the noise layer's level, harmonics: on Formant, Waveshape, VA and Harmonic, aux: the Aux mix), amount. All four start off: breath to cutoff is the Filter page's Breath.
  • FX Distortion: type (Overdrive, Distort, Fuzz, Fold, Crush), mix, drive, tone. Again for Modulation: type (Chorus, Ensemble, Flanger, Phaser), mix, rate, depth. Again for Delay: mode (Digital, Tape, Analog, Ping-pong), mix, time, feedback. Again for Reverb: type (Cloud, Hall, Plate, Room, Shimmer), mix, decay, tone. Again for Reverb 2: pre-delay, size, mod (on Shimmer: the shimmer's amount), low end. The sound goes through them in that order, and all start at mix 0 but the reverb, a touch of Cloud at 3.
  • GLO Setup: the breath CC (CC2 by default, or aftertouch), the glide CC (CC5 by default, or off), MIDI channel (Omni by default) and the Theme; the header shows the version.
  • PLAY Stage: the note, breath, bite, glide and output over twelve knobs in three rows (Filter, the engine, the effects' mixes). K1–K4 turn the lit row, the SELECT knob moves the row, and PLAY again goes back.
  • EDIT and the SELECT knob step through every page; the four knobs set its four values. What you play is kept by itself. Hold SAVE for 1.5 s for the init sound (SAVE again to confirm).

Mouse, touch and keyboard

  • Drag a knob up or down, or scroll over it. Click or touch keys and buttons; several fingers work on a touch screen.
  • White keys 1–8: Q–I, 9–16: A–K. Black keys 1–11: 1–0, -.
  • Esc HOME, Z / X OCT− / OCT+, ↑ ↓ page.
  • Shift-click (or right-click) a button to hold it down.

What this is

The firmware's UI and instrument compiled to WebAssembly, running at the FM-1's rate: what you hear is what the FM-1 plays. The voice is Mutable Instruments' Plaits, unmodified. The strip under the panel shows what the instrument hears and does. Presets and settings are kept in this browser. The emulator is FoMni's, by way of X0X and FiMba.