STAMP COMPOSER FM-1

The little field guide

Make a song, one stamp at a time.

Stamp Composer is a playful staff editor built around the M-VAVE FM-1’s own controls. The browser runs the same native application, with simulated controls and audio.

First minute: Start composing → Load Twinkle demo → Play song. Stop playback, choose another character, and press a note key to add your own part. ENV undoes a change.

Your FM-1 at a glance

The FM-1 panel with each control's job in Stamp Composer MASTER volume (the unit's own) SELECT move the cursor PRESETS pick the stamp (the sound) ALGORITHM pick the layer (1 to 8) STAMP EDIT the staff page K1 value K2 value K3 value K4 value 240 x 240 screen KNOB1 K1: tile 1 of 4 KNOB2 K2: tile 2 of 4 KNOB3 K3: tile 3 of 4 KNOB4 K4: tile 4 of 4 K1 to K4 follow the four tiles on the screen, left to right FX mute sound SCL show all / one ENV undo LFO redo EDIT tap: next page GLO song book HOME staff, hold: help SAVE save to slot ARP loop on/off SEQ grid step PLAY play / stop REC copy bar OCT− octave down OCT+ octave up 27 keys, F3 to G5 (OCT− and OCT+ move them) C4 C5 F3 G5

The panel’s printed names are used throughout: PRESETS picks the stamp, ALGORITHM picks the layer, SELECT moves the cursor, SCL is the button beside FX, and KNOB1–4 (K1–K4) follow the four tiles on the screen, left to right. EDIT taps through the pages (STAFF, MIX, SOUND, MIDI, GROOVE, BARS), GLO opens the song book, HOME returns to the staff.

Grips

GripWhat happens
Several keys togetherA chord on one step.
A note key againRemoves that note when it is already at the cursor (same pitch, sound and layer): ERASED. One undo step; no sound. While playing a repeat is skipped.
EDIT + keyErase that pitch at the cursor on any sound or layer (the selected sound’s first, else the most recent); NOTHING TO ERASE if none. At the playhead while playing.
EDIT + FXClear every note at the cursor (only the selected sound’s with SCL on): CLEARED n NOTES.
EDIT + SELECTJump the cursor to the previous / next step that has a note, whatever the grid (staff).
EDIT + K2 / K3Velocity / length of the selected sound’s notes at the cursor (staff).
EDIT + PLAYPlay from the cursor’s bar.
EDIT + OCT− / OCT+Spelling toward flats / sharps (staff).
OCT− + OCT+ togetherFREE PLAY on or off (second press within 150 ms).
Hold HOMEHelp overlay for the page; it stays open after you let go. Press any button, key or knob to close it (that press does nothing else).
REC twice (song book)Arm, then load the slot; on an empty slot, start a new blank song in it. HOME cancels.

Place, move, listen

ControlWhat it does
Note keysOn the staff: place and audition a note at the cursor, or at the playhead (nearest grid step) while the song plays. Multiple notes at the same position form a chord. On every other page the keys only play the selected sound.
SELECTStaff: move the time cursor one grid step. BARS: choose the FROM bar. Song book: choose the slot. Other pages: nothing.
PRESETSChoose a character and sound. The browser palette does the same thing.
ALGORITHMSelect an arrangement layer, 1–8.
PLAY / ARPStart or stop / toggle looping (ARP and SEQ act on the staff only).
SEQCycle quarter, eighth, sixteenth, eighth-triplet and sixteenth-triplet grids.
OCT− / OCT+Shift the keyboard. Notes outside C2–C6 are refused. Both together toggle FREE PLAY (on any page): keys only sound, held notes last while the key is down, nothing is placed. On BARS a single press transposes instead; transposing keeps flats on black keys.

Shape your song

ControlWhat it does
K1 / K2 / K3 / K4Tempo / new-note velocity / new-note length / song end (shown as bars and beats: 4B+2 is 4 bars and 2 beats).
EDIT (tap)Step through the pages: staff, MIX, SOUND, MIDI, GROOVE, BARS, then back to the staff. Only a clean tap counts: pressing anything else while EDIT is held does not change the page. GLO opens the song book.
Press a note againRemoves it if that pitch, sound and layer is already at the cursor (ERASED, one undo step, no sound). Chords toggle note by note. While playing a repeat is skipped.
Hold EDIT + a noteErase that pitch at the cursor on any sound or layer: the selected sound’s first, else the most recently added; NOTHING TO ERASE if none. Holding to erase does not change pages. While playing it erases at the playhead.
Hold EDIT + FXClear every note at the cursor (with SCL on, the selected sound’s only): CLEARED n NOTES. One undo step.
Hold EDIT + SELECTJump the cursor to the previous or next step that has a note, whatever the grid. Notes at the cursor sit on teal boxes.
Hold EDIT + K2 / K3Change the velocity / length of the selected sound’s notes at the cursor. One hold is one undo step.
Hold EDIT + OCT− / OCT+Sharps and flats: step the spelling for new notes toward FLAT / SHARP (AUTO in between and at start: Bb Eb Ab, C# F#) and respell the selected sound’s black-key notes at the cursor (one undo step). Flats sit on the next letter’s line with a flat sign; the header reads Bb3. Spelling never changes the sound; a single press waits a moment so OCT− + OCT+ still toggle FREE PLAY.
Hold EDIT + PLAYPlay from the start of the cursor’s bar.
ENV / LFOUndo / redo, up to sixteen changes (stopped only).
RECStaff: duplicate the current bar into the next bar. Song book: arm and load (an empty slot: new blank song). BARS: copy the range.
FX / SCLMute the selected sound (silent, level kept, not saved) / filter the view to that sound. On MIX they mute and solo the selected layer instead; on BARS FX moves the range.
HOMETap to return to the staff and the beginning of the song. Hold it for about half a second to open this page’s list of controls; it stays open (SELECT or K1 turn its second page) until you press anything.

The other pages

PageK1 / K2 / K3 / K4
MIXBeats per bar (2–12) / sound volume / layer volume / song end (knobs stopped only). FX mutes and SCL solos the selected layer, even while playing; these are not saved.
SOUNDTune ±12 semitones / tone (dark to open) / decay (short to long) / pan left to right. Saved with the song.
MIDIThe sound’s channel (OFF, 1–16) / mode (OFF, ON, MIDI ONLY) / clock (OFF, OUT, IN) / the MIDI-in channel (OMNI, 1–16). Notes go out per sound with velocity and length; clock IN follows an outside machine and the header shows EXT. Incoming MIDI notes act like keys, on the chosen channel only; clock and Start/Stop always get through.
GROOVESwing 0–75 / human 0–100 (a little random timing and loudness, the same every play) / swing grid 8TH or 16TH (which off-beats swing) / human mode TIME+VEL, TIME or VEL.
BARSFrom bar / to bar / target bar / transpose amount 1–12. REC copies, FX moves, SEQ deletes, ARP inserts empty bars, OCT− transposes down, OCT+ up. SCL limits copy, move and transpose to the selected sound. A change that would not fit is refused whole, and each one can be undone.

On SOUND, MIDI, GROOVE and BARS the knobs turn only while the song is stopped; a refused change says STOP FIRST. The time signature (MIX, K1) is the number of beats over 4, and bar lines follow it.

Swing and triplets: swing delays the off-beats of the chosen grid. Notes on triplet positions are not swung, because triplets already carry the swung feel; SWING 33 moves an off-beat eighth onto the triplet position.

Keep something good

GLO opens the song book. K1 selects one of eight slots, or the DEMO entry after slot 8 (Twinkle Twinkle; REC twice loads it, SAVE refuses it). SAVE writes your current song. Press REC twice to load the selected slot. A slot with nothing saved shows EMPTY when chosen: REC twice there starts a new blank song in it (ENV brings the old song back). Stop playback before saving, loading or changing settings. The song is also autosaved a few seconds after you stop touching things, and comes back (RESTORED) when the app starts again, in the same browser.

Browser saves use local storage. Clearing browser data removes them, so Export song makes a portable .scf copy. Import replaces the current song and can be undone with ENV. The demo also replaces the current song, with a second-click check when a song already has notes.

Keyboard & accessibility

White keys: Q–I and A–K. Black keys: 1–0 and minus. Z/X change octave; P plays and O duplicates the bar. Tab through every control; use arrow keys on knobs, Space or Enter on buttons. Drag a knob vertically with a mouse or touch. Shift-click latches a key or button.

The native app supplies screen-reader status for the current view. The simulator supports a system screen reader; it does not include a separate speech engine. All character buttons have sound names, keyboard focus and selected-state labels.

What this preview is

Thirty-one recognizable character stamps, eight layers, a shared voice pool and 384 notes per song, between C2 and C6. Audio uses the Mario Paint sound pack, a swappable asset pack with its own notice (Nintendo’s sounds and art are not MIT-licensed). This is a native-app simulation, not a PI32 firmware binary running in a CPU emulator. The firmware has not yet been tested on a physical FM-1; section chains and other ideas remain in development.

Nintendo characters and original artwork belong to their respective rights holders and are separate from the application’s MIT license. This fan project is not affiliated with Nintendo or M-VAVE. The source repository includes asset provenance and dependency notices.

← Back to the music playground

If something goes wrong (on a real FM-1)

After two failed starts the FM-1 shows SAFE MODE: PLAY tries again, REC opens the chip’s update mode, and the installer still works. Holding REC while powering on also opens update mode. Holding OCT− and OCT+ together while powering on opens the panel calibration (it quits by itself after 30 seconds if you leave it; finishing it rewrites the stored panel map). While running, the platform ignores long OCT− + OCT+ holds. This firmware has not been tested on a physical FM-1; see the project’s Install page before using it.