Firmware

FM-Cat1

Rising58/100

Cat Piano: custom firmware that turns the M-VAVE FM-1 into a cat piano (real meows, 4 banks, sequencer, arp). GPL-3.0, from Fart Machine One / FoMni / X0X / Felucca.

FM-Cat1 is custom firmware for the M-VAVE FM-1, by @thefriendlyhedgehog. Open source under GPL-3.0.

forM-VAVE FM-1·by@thefriendlyhedgehog

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

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

No release files yet. Build from source.

GPL-3.0· thefriendlyhedgehog/FM-Cat1·downloads come from the creator’s GitHub releases

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

Cat Piano

A cat piano for the M-VAVE FM-1: each of the 27 keys plays a real cat's meow, tuned to its note. Four banks of cats, held notes that keep meowing, a pitch-bend knob, a four-track sequencer, an arpeggiator, reverb and delay. Forked from Fart Machine One, which is built on FoMni, X0X and Felucca.

Cat Piano screen

Listen (host renders of the firmware): the four banks, four tracks recorded live, the arpeggiator. Development notes: firmware review, cat piano plan, sequencer and dual-core plan.

Status: runs on an FM-1 (installed with tools/fm1_install.py) and passes its host tests. CPU load on the device is still to be measured (hold FX); the sequencer's per-track and per-step settings have no panel controls yet (see the roadmap).

Controls

ControlBehaviour
27 keysPlay a meow at that key's note. Hold a key to keep it meowing; let go and it finishes. Up to eight overlap; the oldest is cut first.
PRESETThe bank: MEOW, KITTENS, TOMCATS, HUNGRY. The screen names it.
ALGOPitch bend, 10 cents a detent, up to 2 semitones either way. It springs back when you let go.
PLAYStart all four tracks from step 1, or stop playback and recording and silence everything.
REC (tap)Start recording from step 1 if stopped; during playback, overdub on or off.
SEL + white key 1-4Choose the track (cat) to play and record into, even while recording. PRESET sets that track's bank.
REC (hold 1 s)Clear the selected track.
FX (hold)Audio load: CPU now and its peak since FX went down, xruns, voices sounding.
ARP (tap)Arpeggiator on or off (lit when on). With it on, held keys and MIDI notes are played one a step, in time with the tempo, and recorded as heard.
ARP (hold) + knobsKNOB 1 rate (1/32 to 1/4, triplets too), KNOB 2 mode (UP, DOWN, UP-DN, DN-UP, PLAYED, RANDOM, CONVERGE, DIVERGE, PINKY, THUMB, CHORD), KNOB 3 octaves 1-3, KNOB 4 gate 5-100 %, ALGO latch (right on, left off).
SELECTTempo, 40-240 BPM.
KNOB 1 / 2 / 3 / 4Reverb, delay level, delay time (80-500 ms), delay repeats (0-70%).
MASTERVolume.

Four tracks, each with its own cat (bank), 16 sixteenths long by default. Notes are recorded to the step nearest where you heard them (key-to-ear latency taken off), up to four per step, each with its velocity and the length you held it, so a held meow plays back sustained. The engine (firmware/src/dsp/seq.c, after SLOOP and Felucca) also does per-track length (1-64), division and swing, per-step nudge, ratchets, chance, a:b and fill conditions, and mute; the panel controls for those are the next step. Patterns are kept in RAM only: switching off clears them.

MIDI in, channel 1: the bank's 27 notes (MEOW: 67-93) play the matching key with velocity; note-off lets it finish. Pitch bend covers 2 semitones. CC 120 and 123 stop the loop and silence the sound.

The cats

BankKeysCats
MEOWG4-A6two takes per note, played in turn: Kerzoven's purry and soft mews, IgnasD's meow, AntumDeluge's kitten, a British Shorthair asking for food, Heismark's impatient cat
KITTENSC5-D7small, high mews: a Greek street cat, Heismark, Kerzoven, the kitten
TOMCATSG3-A5low and long: a Siamese, the British Shorthair, a pleading cat
HUNGRYD4-E6Heismark's impatient and pleading cats

Each bank has a take every three semitones, pitch-shifted to that note with its formants kept (so a cat sounds like the same cat, not a chipmunk), and each key resamples its nearest take by a semitone at most. Takes are stored as 22.05 kHz 2nd-order ADPCM (about 4.6 bits a sample, 27-58 dB SNR) with a sustain loop for held keys. Sources, crops and licences: samples/banks.json, LICENSING.md.

Install

python3 -m venv .venv && . .venv/bin/activate
python -m pip install -r requirements-install.txt
python tools/fm1_install.py --info                 # finds the FM-1, changes nothing
python tools/fm1_install.py build/cat-piano.fwsc   # asks before it writes

The package identity is FM-1_963. To go back, use the FM-1 Firmware Hub or M-VAVE's updater. Holding OCT- while switching on starts the USB rescue. See INSTALL.md. Installing firmware is at your own risk.

Build and test

See BUILDING.md: the JieLi toolchain runs in a linux/amd64 container on macOS.

sh tests/run_tests.sh      # host tests: pitch of every key, sustain, bend, DSP, codec, sequencer, UI, storage, USB
./build.sh                 # -> build/cat-piano.fwsc

tests/fmo/demo.omni renders a listening demo with the host simulator (sh host/build_host.sh, then build/host/omni_host tests/fmo/demo.omni build/demo).

Your own meows

Authoring needs numpy, ffmpeg and the Rubber Band CLI (brew install rubberband); the firmware build itself does not.

  1. Put WAVs (16-bit PCM) under samples/ and list each sound in samples/banks.json under sources: its file, a start/end crop in seconds, and license, author and source.
  2. python3 tools/measure_pitch.py samples/banks.json --write measures each crop's pitch as root_hz. Check it by ear or on a spectrogram: meows glide. Add "root_checked": "how" to keep a value you set by hand.
  3. Add the ids to a bank's pool (a bank: name of up to 10 characters, note0 its lowest key, optional takes per anchor), then python3 tools/render_banks.py writes samples/rendered/.
  4. python3 tools/import_samples.py --banks samples/rendered/banks.json writes the firmware bank, then ./build.sh. Up to 8 banks and 460 KB of ADPCM (about 36 s of audio) fit.

Licence

GPL-3.0-only, as the firmwares it comes from: give the source to anyone you give the firmware to. The meow recordings are CC0 1.0 or public domain, except one under CC BY 4.0 whose attribution must travel with the firmware. Credits and third-party notices are in LICENSING.md. M-VAVE and FM-1 are trademarks of their owners; this project is not affiliated with them.

Roadmap

  • Panel controls and a step-grid screen for track length, division, swing, nudge, ratchets, conditions and mute (the engine and its tests already have them).
  • Pattern save and load (sections A-D, chaining, undo) in the flash store.
  • MIDI clock in and out; sequenced notes to MIDI out.
  • Dual core (after Felucca 1.6.1), only if the measured CPU load calls for it.