Firmware

fm1-haave

Rising67/100

Haave: a simple, dreamy ambient firmware for the M-VAVE FM-1, for live meditation (a Felucca fork)

fm1-haave is custom firmware for the M-VAVE FM-1, by @thebrodi. Open source under GPL-3.0.

forM-VAVE FM-1·by@thebrodi

Unclaimed. Is this yours? Sign in with GitHub as @thebrodi to claim it.

Downloads
0
Stars
0
Forks
0
Commits
80
Last commit
Get the source

No release files yet. Build from source.

GPL-3.0· thebrodi/fm1-haave·thebrodi.github.io/fm1-haave/·downloads come from the creator’s GitHub releases

79
Commits
0
Releases
79 commits and 0 releases in the last year
Activity · last 12 months

Haave

License: GPL-3.0-only

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

ControlDoes
PLAYStarts / stops the music (it breathes while stopped; fade by hand with the MASTER knob)
KNOB 1 — SpaceHow far away: the room grows while the sound itself falls back, to a distant wash; never louder
KNOB 2 — EchoEchoes, from none to long trails that keep circling, darker each time
KNOB 3 — GlowA filter over everything: muffled, as if under water → bright and airy
KNOB 4 — MotionStill → moving: a slow phaser swirl, the sound drifting left and right, more notes
White keys 1–7Layers on / off (lit = playing): PAD, BASS, ARP, SPARKLE, MELODY, VOX, SHIMMER
White keys 8–16Play 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 / SEQThe 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–5Chords 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–11Sprinkles: six little sounds of each world (birds, leaves, drops, chimes, a gong, a laser, a wave…)
PRESETSThe world: GLASS, EMBER, DUSK, NIGHT, NEON, LOFI, BOWLS, GARDEN, FOREST, OCEAN, RAIN, CAVE, HANDPAN, CRYSTAL
ALGORITHMThe behaviour: DRIFT, RIPPLE, SWELL, CHIME, PULSE
SELECTTIDE, 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 GLOPunch-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)
HOMEWARP while held: the music glides to half speed, and back when let go
RECNothing 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.