explainroo
explainroo is a free, open source tool that lets your AI agent make explainer videos with a voice. It runs on your own computer and needs no API key.
翻訳待ち
Emulator for the M-VAVE FM-1 pocket synth: runs its firmwares unchanged in the browser and natively
翻訳待ち
Loading the full README.
Read the full README ↗The M-VAVE FM-1 is a pocket FM synthesizer, and a small community writes its own firmwares for it: drum machines, grooveboxes, ambient generators, a chord harp. This project emulates the FM-1 itself, its CPU, screen, keys, knobs and audio, so every one of those firmwares runs unchanged in a browser, on a computer or as an instrument plugin in a DAW (AU, VST3). You can try a firmware before you install it, write one without a synth on the desk, or just play.
Play it: joakimeriksson.github.io/fm1-emu: pick a firmware, press Start, play with the computer keyboard, the mouse, a touch screen or a MIDI keyboard.
With sound: nine of the firmwares in 50 seconds.
https://github.com/user-attachments/assets/6849316e-7239-497e-b617-be74317dc2b1
The browser keeps the firmware you run and automatically saves flash changes, including settings
and patches saved through the firmware's own controls. Each exact firmware version has its own
save. Save & backup offers a manual save, portable .fm1save backup export/import, reset,
and a check for firmware updates. This also works with locally opened packages and on the
SMK-37 page. Edits held only in firmware RAM need its normal save command first; browser saves
survive reloads but clearing browser data removes them. Export a backup to keep a separate copy.
The page hosts no firmware: it downloads each one from its author's own site when you start
it, the same update package you would install on a real FM-1. M-VAVE's own firmware can't be
fetched that way, so download FM-1.fwsc from M-VAVE and open it on the page.
And the M-VAVE SMK-37: a 37-key keyboard with the FM-1's chip inside, whose community ports run here too (below).
Also here: FM-1 SID (fm1-sid/, a submodule: clone with
--recurse-submodules), a firmware that turns the FM-1 into a Commodore 64 SID
synth, with a step sequencer and stereo chorus, delay and reverb, that also plays C64 tunes
and GoatTracker songs (its page plays all of HVSC).
On a real FM-1 it is its own firmware on fm1-dock, which
keeps USB, the installers and the rescue.
The community firmwares: every one on the FM-1 Firmware Hub that
runs here (its packages, fetched from the Hub; tools/hub_catalog.mjs follows its catalog), and a
few more from fm1-editor.com/firmware. Also FM-1 SID, and
M-VAVE's stock firmware (V13 and V15) with both CPU cores running. The ones the Hub doesn't list
are our own list, web/firmwares-own.json: add a firmware there, and the tool appends it. The page
also lists, last and marked as not yet run here, whatever else the Hub has a package for, so a new
firmware is playable the day it is published. The list, each firmware with its author and a
link that opens it on the page: docs/FIRMWARES.md. (?fw= takes the Hub's ids
too; &embed=1 shows only the device and its controls, for a window on another site;
?package=URL plays a package from another site (https, with CORS on) that the list doesn't have,
&name= naming it: other hubs' "Try", older versions; ?chip=uc25hq80 gives the FM-1 the flash
part of units sold since autumn 2026, JEDEC B3 60 14, in place of the stock Puya, as fm1-live's
--flash-chip uc25hq80 does: a firmware that knows only the Puya keeps its saves in RAM there.)
A page on this site can hand the emulator a try-out (web/tryout.js): &flash=PATH lays flash
sectors over the package's fresh flash (records of a 4-byte little-endian offset and the 4096-byte
sector, as the saves keep them), &script=PATH plays an input script from the boot (fm1-live's
FM1_BENCH_KEYS: ms:mHEX MIDI into the DIN jack, ms:id keys, ms:eN:clicks encoders). Both
come from the page's own origin only, the try-out starts by itself where the browser lets it, and
it is a session of its own: the browser's saved flash is neither loaded nor overwritten. fm1-dock's
catalog uses it for its "Try it": a module installed and picked
(fm1-dock's tools/tryit.py).
MIDI in works through the emulated MIDI IN jack, so each firmware reads MIDI with its own driver: Web MIDI on the page (Chrome, Edge, Firefox), any MIDI input natively. M-VAVE's firmware listens on channel 2 in the emulator (not yet checked on a real FM-1); Felucca plays its parts on channels 1–4.
M-VAVE's SMK-37 (Pro / Elite, the MKE-P37 and the Donner Starrykey 37 Play share its hardware) is a 37-key keyboard with 16 RGB pads, 8 knobs, 4 faders, pitch and mod wheels and a screen, around the FM-1's chip: same flash layout, audio and update path, only the panel is wired differently. genkigenki's fm1-to-smk37 kit maps that wiring and ports FM-1 firmwares to it. The emulator models the SMK-37's panel from that map, and a package's identity says which board it runs on.
Play it: joakimeriksson.github.io/fm1-emu/smk37.
The firmwares come from genkigenki's install page
(node tools/smk37_catalog.mjs refreshes the list). M-VAVE's own SMK-37 firmware runs as the
MIDI controller it is (screen, buttons, pads, keys; it names the chord you hold): with PATCH on, the
keys play its DX7 synth from this emulator's own bank (the factory patches are not in the package; the
notes also go to USB / Bluetooth MIDI), slower than real time in the browser so far.
This is the beginning of the README. Read the rest at the original. Read the full README ↗