Haave
A simple, dreamy ambient instrument: custom firmware for the M-VAVE FM-1 pocket synth. Haave is Finnish for a daydream, a reverie.
Press PLAY and a gentle chord progression starts and keeps going. Add and remove layers with the white keys, jump to other chords with the black keys, and shape everything live with the four knobs. Every note fits, so it always sounds good. No menus, no drums.
Website: https://thebrodi.github.io/fm1-haave/ · Try it in your browser, no FM-1 needed.
Work in progress. Haave runs on my own FM-1 and in the browser emulator. There is no public release to install yet.
Why Haave
I'm not a music expert, and Haave isn't meant to be a full synthesizer. It deliberately limits what the FM-1 can do: fewer functions and fewer options, so all that's left is playing melodic, dreamy, drifting sounds. I use it for live meditation, together with my singing bowls: slow, soft and relaxing, with nothing to get lost in.
If you want everything the FM-1 can do, use Felucca, which Haave is built on.
How to play
| Control | Does |
|---|---|
| PLAY | Starts / stops the music (it breathes while stopped; fade by hand with the MASTER knob) |
| KNOB 1 — Space | How far away: the room grows while the sound itself falls back, to a distant wash; never louder |
| KNOB 2 — Echo | Echoes, from none to long trails that keep circling, darker each time |
| KNOB 3 — Glow | A filter over everything: muffled, as if under water → bright and airy |
| KNOB 4 — Motion | Still → moving: a slow phaser swirl, the sound drifting left and right, more notes |
| White keys 1–7 | Layers on / off (lit = playing): PAD, BASS, ARP, SPARKLE, MELODY, VOX, SHIMMER |
| White keys 8–16 | Play along on the instrument chosen with SAVE / ARP / SEQ: notes of the chord sounding now and the ones that fit between them, going up. Never a wrong note |
| SAVE / ARP / SEQ | The instrument: SYNTH (press SAVE again for its next sound: WARM, KEYS, GLASS, AIR, HOLLOW), BELLS (the world's bells, the first key a GONG), BASS (soft and round, the same in every world, one note at a time). SYNTH and BASS borrow a layer's sound: that layer fades out over a second or so, then the button stops breathing and the keys play |
| Black keys 1–5 | Chords to move to (vi ii IV V I): press to go there, press again for the same chord with a soft colour |
| Black keys 6–11 | Sprinkles: six little sounds of each world (birds, leaves, drops, chimes, a gong, a laser, a wave…) |
| PRESETS | The world: GLASS, EMBER, DUSK, NIGHT, NEON, LOFI, BOWLS, GARDEN, FOREST, OCEAN, RAIN, CAVE, HANDPAN, CRYSTAL |
| ALGORITHM | The behaviour: DRIFT, RIPPLE, SWELL, CHIME, PULSE |
| SELECT | TIDE, how much it moves by itself: STILL, CALM, FLOWING (layers come and go now and then), WANDERING |
| OCT− / OCT+ | Everything an octave down / up |
| FX SCL ENV LFO EDIT GLO | Punch-in effects while held, from the beat, each fading in and out over a beat: wash, pump (a soft sidechain breath on every beat), freeze, shimmer, swirl (a deep phaser), breathe (only the pad) |
| HOME | WARP while held: the music glides to half speed, and back when let go |
| REC | Nothing yet |
The worlds range from soft vibes and warm electric piano to a dark minor pad with tonewood, 80s strings with a digital marimba, lo-fi keys, a singing bowl over a drone, a kalimba, a soft flute, ocean waves with a soft marimba, rain (brown noise), a deep cave with a hollow log drum, a handpan and crystal singing bowls. The full design and its rules are in HAAVE.md.
Try it in your browser
You need Python 3 with Pillow and fonttools, and Emscripten (brew install emscripten).
python3 -c 'import sys; sys.path.insert(0,"tools"); import build; build.generate()'
sh web/emu/build.sh
python3 -m http.server -d build/emu 8790
Then open http://localhost:8790/ in Chrome or Edge and press Switch on.
Building the firmware
Haave builds like Felucca: see BUILDING.md. That needs Docker Desktop on macOS, the JieLi toolchain and the AC79 SDK. Installing custom firmware on an FM-1 is at your own risk. Back up first, and keep M-VAVE's updater (official V15) ready to go back.
Based on Felucca
Haave is a fork of Felucca by Leo Kuroshita (Hügelton Instruments). It replaces
Felucca's keyboard, UI and screen with Haave's (firmware/src/haave_play.c, firmware/src/haave_ui.c) and keeps
everything else as Felucca made it: the sound engines, effects, USB, update loader and storage. Building with
FELUCCA_HAAVE=0 gives plain Felucca. Felucca's own README is kept in docs/FELUCCA.md.
Credits and licence
Free software: GPL-3.0-only, as Felucca. The engines in firmware/engines are MIT
(Felucca-Engines), the Hügelton Sample Pack is CC0 1.0, and the bundled
fonts and ported DSP keep their own licences (LICENSES/, LICENSING.md,
CREDITS.md).
Haave is developed with the help of AI coding agents.
M-VAVE and FM-1 are trademarks of their respective owners. Haave is not affiliated with or endorsed by them, or by Hügelton Instruments.
Felucca: Copyright (C) 2026 Leo Kuroshita (@kurogedelic), Hügelton Instruments. Haave's changes: Copyright (C) 2026 Dominik Siemon.
