Skip to content

Releases: glvno/matryoshka

Matryoshka 1.7.0

Choose a tag to compare

@glvno glvno released this 30 Oct 22:28
61aaaa1

Matryoshka 1.7.0 gives every FM-1 engine five hand-written presets, named for what they're for, and makes sure none of the factory sounds clip. An update now also refreshes the factory patches you haven't edited, so these fixes reach your FM-1 without a FACTORY RESET. Also in this release: PRESET's first turn reaches a real preset, Cassia 1's resonance waves can be picked, preset names can no longer push a big patch over the FM-1's size, and Io 4 and Oracle V presets that overloaded now fit.

Install: open https://matryoshka.lol/, go to the Flash tab, and install FM-1_717 (v1.7.0). It plays patches from 1.6; the patch format is unchanged. On the first boot after the update the FM-1 says FACTORY PATCHES UPDATED and rewrites the factory slots you have not edited; slots you saved stay as they are. Cassia 1 presets you stored on an FM-1 no longer match its engine (its wave rows changed).

Checked on these exact bytes: the emulator smoke test (237 checks) and the owner's hands-on check on our test FM-1. The scripted checks (118) and CPU measurements ran on the test FM-1 against main's build of the same code.

Changes

  • Io 4's Unison Lead preset has no vibrato: with it, the four unison voices overloaded the FM-1 on the first key and it played on three ("ONE PART LESS"). Without it the test rig measured no shed (2026-10-30, #453). Ensemble Pad can still drop a part at four notes.
  • An oscillator whose pitch moves costs less (#453). On the test rig Io 4's Unison Lead and Ensemble Pad overloaded and dropped a part; the trigger was their vibrato (vco / mod = 0.03): an oscillator works out its phase increment (exp2_scale) every sample its pitch input moves, so a vibrato, a glide or a note's start pays it every sample. exp2_scale now does its arithmetic in 32 bits where the result fits them (every phase increment) and is bit for bit the same (tools/engine_exact.sh, 304 kits; exact_test against the 64-bit form on every pitch from -70 to +40 octaves for twelve bases and 20 million random pairs). On the CPU model (tools/cpu, 4 notes held, 400 blocks), peak block before → after: Ensemble Pad 565 k → 548 k cycles (about 2,444 → 2,370 µs of the 2,902 µs block), Unison Lead 565 k → 550 k; the vibrato's extra cost in Ensemble Pad 55 k → 43 k cycles a block; the note-start block of Io 4's other presets 556 k → 544 k. Every factory check's peak block -0.4 % on average (npm run cpu-hot), most in Vernon 100 (-2.7 %), Acid at 4 parts (-2.7 %) and Monolith D (-2.3 %), none slower. Rig data: docs/measurements/2026-10-30-rig-io4-*.json. Host-tested; not yet on a device.
  • Oracle V's Poly-Mod Bell preset plays three voices, not five: its phase modulation costs about a third more per voice, and four voices measured 2,923 µs of the FM-1's 2,902 µs audio block on the test rig, so it could crackle and the editor treated a patch at that preset as a sandbox patch (CPU estimate 108 % → 67 %). Measured 2026-10-30, docs/measurements/2026-10-30-rig-oracle-v-presets.json.
  • Loading a preset no longer makes a factory patch too big for the FM-1 (#452). Io 4, Briefcase 3 and Vernon 100 sat a few bytes under the FM-1's 3,840 patch bytes, and the preset name a load stores (up to 12 bytes) took them over: the patch turned into a sandbox patch (SANDBOX, the memory bar over, "Plays here, with no FM-1 limits: 1.1× its memory"), Live sync paused and the FM-1 went into sandbox mode, and Send refused it. The FM-1 budget now counts 12 bytes for every engine's preset name, named or not, so a preset load or store never changes whether a patch fits (D-284). Another device's preset name goes to the FM-1 only while it fits, else it is left out, as the FM-1 itself does. The four factory patches that then did not fit are trimmed by names only, no module, sound or player lost, and the FM-1's display shows several of them whole for the first time (it cut names at 12 characters). Patch bytes counted, before → after (the binary itself in brackets): Io 4 3,850 at its presets → 3,839 (3,827): its bend/mod pages are lever, its portamento page porta. Briefcase 3 3,849 → 3,839 (3,827): the envelope pages are env. Vernon 100 3,850 → 3,833 (3,821): amplitude shaper (shown AMPLITUDE SH) is amp shaper, keys/oct crs / keys/oct fine (KEYS/OCT FIN) are kb/oct crs / kb/oct fine, sustain on/off (SUSTAIN ON/O) is sus on/off, and the slashed knob names lose their spaces (osc 1/env 1, hi/lo, kb1/kb2, white/pink, osc 3/ext, osc 4/ext, env 1/env 2). <7PH 3,851 → 3,840 (3,828): its Silver Box's waveform, tuning and resonance rows are wave, tune and reso. Every other factory patch already fitted with the room counted (Wanderer the closest, 3,836). Structures, presets, sounds and CPU estimates are unchanged; an FM-1 rewrites these four untouched slots in the bank. Host- and emulator-tested; not yet on a device.
  • Cassia 1 reaches its resonance waves, and its rows are the Casio CZ-1's (#430). Each line's wave row is a choice of the eight waveforms by name (saw, square, pulse, dbl sine, saw-pulse, reso 1, reso 2, reso 3), and its wave 2 row of off and seven of them (saw .. reso 2: a choice row holds eight); they were numbers from -4 to 4, so the resonance waves could not be chosen and loading any preset, Init included, turned line 2 from reso 1 to saw-pulse. Wave 2 off plays the line's wave alone, as on the CZ. line has the CZ's four positions, 1, 2, 1+1' and 1+2', and replaces the separate 1+1' row; line 2's ring and noise rows are one mod row, 1 off, 2 ring, 3 noise, as on the CZ. vib depth is in semitones: a step is a cent (it was 12) and a click on the FM-1 8 cents (it was 96). Reso Pad plays line 2 on reso 1, its DCW sweep moving the resonance; the other presets keep their waves, numbers and sound. Preset cards take a named choice row's names (line 2 / wave = reso 1) and list them in the header. The structure of Cassia 1 changes with it: a preset you stored on an FM-1 for Cassia 1 no longer matches it (the factory ones are regenerated, and an FM-1 rewrites an untouched Cassia 1 slot in the bank). The factory patch takes 3,805 of the FM-1's 3,840 patch bytes (3,741 before) and the CPU estimate says 63 % (58 % before). Peaks in the browser engine, 2 notes held 3 s, at the patch's Output of 0.51 before #440: Init 1.000 with 12 samples clipped → 0.859 (line 2 is reso 1 again), Reso Pad 0.944 → 0.848, the others unchanged; at the Output of 0.43 that #440 set: Init 0.725, PD Bass 0.445, PD Brass 0.862, Glass Bell 0.784, Reso Pad 0.715, Tine Piano 0.780, none over the 0.88 headroom. Host-tested; not yet on a device.
  • No factory patch or factory preset clips (#440). Every FM-1 factory patch, and every factory preset of its engines, was played with as many keys held as its voices allow (at most 8: notes 60 64 67 71 72 76 79 83), with all of a Drum map's keys and with its patterns running; sixteen presets and the Plucked String patch clipped. A preset far louder than its engine's others is turned down on its card, at a level after any drive or resonance, so its sound stays; then the generators lower a patch's Output (never raise it) until the loudest way of playing it peaks at 0.88 at most, at the FM-1's rate and at 48 kHz (D-854). A test keeps every FM-1 factory patch under 0.95. Peaks in the browser engine (3 s held, 48 kHz), before → after: Oracle V's Vintage Strings 1.10 → 0.84 (oscillator levels 0.5 / 0.5 → 0.37 / 0.37) and Unison Bass 0.92 → 0.82 (→ 0.44 / 0.44); Hera 6's Brass 1.13 → 0.79, Strings 1.80 → 0.78, Bass 1.83 → 0.80, Organ 2.95 → 0.77 (its VCA 1 → 0.8, 0.5, 0.5, 0.3) and Init 0.97 → 0.84; Sallen 20's Growl Bass 1.51 → 0.76 (VCO levels 0.5 / 0.45 → 0.27 / 0.24) and Noise Sweep 1.44 → 0.74 (0.5 → 0.26); Expander S's Unison Lead 1.20 → 0.83 (VCO levels 0.5 / 0.5 → 0.35 / 0.35); Io 4's Ensemble Pad 1.36 → 0.82, Arp Pluck 1.02 → 0.82, Unison Lead 2.15 → 0.82, PWM Brass 1.40 → 0.81 (its VCA level 1 → 0.6, 0.8, 0.38, 0.58); 8 Lire's Trill Delay 1.00 → 0.86 (vol 0.7 → 0.6); Cassia 1's Init and PD Brass 1.02 → 0.86; Basic Poly's Glass Bell 1.60 → 0.82; Supersaw Stack's Thin Saw Keys 1.06 → 0.82; Plucked String 1.28 → 0.81. What sounds quieter, by the patch's Output: Basic Poly 0.31 → 0.16 (all its presets about 6 dB down, for Glass Bell's eight sines), Plucked String 0.88 → 0.56 (4 dB), Supersaw Stack 0.54 → 0.42 (2 dB), Cassia 1 0.51 → 0.43 (1.5 dB), Hera 6 0.77 → 0.67 (1.2 dB), Canvas 1 → 0.91, Sallen 20 1 → 0.93 and the 808 Kit 0.32 → 0.30 (under 1 dB), Expander S 0.78 → 0.77, Algo Four 0.55 → 0.54; Perun 4 0.24 → 0.25 (its level rule run again). The presets cut on their cards are that much quieter besides (Hera 6's Organ about 10 dB, Io 4's Unison Lead 8 dB, Sallen 20's two and Io 4's Ensemble Pad and PWM Brass 4 to 6 dB). The XLs (browser only) take the same Output rule: Algo Four XL 0.28 → 0.12 (eight voices peaked 1.88), Expander S XL 0.66 → 0.43, Hera 6 XL 0.5 → 0.36, Spokes 6 XL 0.59 → 0.49, 808 Kit XL 0.41 → 0.39, Perun 4 XL 0.28 → 0.29. The FM-1's engine (the golden host build) peaks within 2 % of the browser's on all 241 of these ways of playing (at the FM-1's rate), 0.88 at most. An FM-1 rewrites an untouched factory slot in the bank. Host-tested; not yet on a device.
  • An update brings factory patches changed without a format change (#441). The FM-1 rewrote the untouched factory slots of its bank only when the patch format changed, so an update that retuned a factory patch (Drift Poly's headroom, #437) left the old one in the bank: the test rig's Drift Poly still clipped. The boot now also rewrites them when the firmware's factory patches differ from the ones the bank was brought to (a fingerprint in the settings record, which grows from 13 to 16 bytes; an older firmware still reads it), and says FACTORY PATCHES UPDATED. A slot you edited and saved, or one already holding today's p...
Read more

Matryoshka 1.6.0

Choose a tag to compare

@glvno glvno released this 29 Oct 03:39
07cdef9

Matryoshka 1.6.0 changes how the FM-1 decides what its keys play. SEL arms a device so the keys play it, and SEL again disarms it. On the environment page, SEL layers several devices. REC now records the same way on every page. Also in this release: the piano roll's black keys pick rows, ties on drum grids, and two XL fixes.

Install: open https://matryoshka.lol/, go to the Flash tab, and install FM-1_716 (v1.6.0). It plays patches from 1.5; the patch format is unchanged.

Checked on these exact bytes: the emulator smoke test (182 checks), the scripted checks on our test FM-1 (108 checks), and the owner's hands-on check on that FM-1.

Changes

  • On the FM-1, SEL arms what the keys play (#395). SEL on a device page arms that device and disarms the others,
    so the keys play it; an instrument whose keys come through a track and an Arpeggiator (every factory instrument) is
    armed with them, and REC records that track. On a device with no keys input, or an Arpeggiator alone, the bar says
    NOTHING HERE TAKES KEYS and nothing changes. In the editor, arming an instrument works the same way. SEL on an armed device's page
    disarms it again (the others stay armed; the last one out leaves the keys wired). SEL on
    an environment row adds that device to the armed ones or takes it out (a layer or a split); REC there no longer arms.
    With nothing armed the keys are wired: Main's cables decide where they go, as before, and
    the footer says KEYS WIRED after the patch's name. A patch loads wired. The SEQ page arms the track it shows when it
    opens and when ALGO picks another. SEL no longer opens the SEQ page (SEQ does), a row's device pages, or an
    assembly's preset list; a device's presets are still stepped with PRESET or ALGO on its environment row. On the SEQ
    page the track line's SEQ+REC: CLEAR hint no longer fits next to ARMED.
  • On the FM-1, REC records the same way on every page (#395). With the transport stopped, REC starts it and
    records; running, REC records; REC again stops recording and the transport goes on. PLAY stops both. What records is
    every armed Steps track, over the notes already there, and a track armed while REC is on records from then on (ALGO
    on the SEQ page included). REC never changes the page: it no longer opens the SEQ page, and SEQ is the only way
    there. With no track armed REC still runs and the bar says REC: NO TRACK ARMED. On a drum grid a black key now always
    sounds its row and picks it, and while recording it also records the hit; SELECT moves the row silently. On the piano
    roll, all 27 keys play and record while REC records, and the black keys pick rows otherwise. Gone: REC with nothing
    armed recording hits from the black keys, REC on the SEQ page while stopped, and REC arming the roll's track itself.
  • On the FM-1's piano roll the black keys pick the rows, not the track (#387). Black keys 1 to 8 are the 8 pitches
    on screen, black key 1 the bottom one, and they follow the window as SELECT scrolls it. With the transport stopped
    the row picked sounds, with REC on or off; its black key is lit, as on the drum grid. ALGO picks the track. Before,
    black key n switched to track n, so in a one-track patch only the first did anything. SEQ held or REC held + a black
    key still mutes or arms track n, and a live take still plays all 27 keys.

Patches

  • 8 Lire XL's TUNE is continuous, as the Lyra-8's knob: each tune row is an Offset into its voice's pitch, ±4
    octaves in hundredths of an octave (12 cents), from the voice's own tuning. It stepped in semitones before. The default
    sound is unchanged (rendered sample for sample); the XL has 151 modules (143) and an estimated 146 % CPU (144 %).
  • Meridian 8 XL's gate inputs take any voltage, as the NOON's: the inputs gate 1..gate 8 power their channel
    directly, after its mute button, so an offset, a held gate, an LFO or an oscillator there drones the channels that
    hold a sound (DOT, for one) with no key held. The keys still play the channels as before. The default sound is
    unchanged (rendered sample for sample); the XL has 180 modules (172) and an estimated 148 % CPU (143 %).

Fixes

  • Choosing what an assembly's card shows: a switch row's check box no longer covers its name. On rows with
    named positions (a Selector, such as Io 4's ASSIGN or LEGATO) the name now moves right of the box and gets more of the
    row, as on a slider's row (#342).
  • Space after clicking Octave down / Octave up starts the transport again. The button no longer keeps the focus
    after a click, so Space no longer pressed it a second time. Reached from the keyboard, it keeps the focus (#208).
  • Ties on the FM-1's drum-track grids, and ties that reach (#368). On the SEQ page, LFO held + a white key now
    ties a note on a track that plays a Drum map, as it already did on the piano roll. A Drum map row stays up while its
    note sounds, so a tie holds a voice that sustains, such as a Lire plate or an Elvira voice. On both grids the tie
    now reaches: the row's last note before that step is extended to end on it, so one press ties step 1 through step
    16 (before, the key only tied the note sounding on the step before). LFO + a step inside a note ends it there, and
    LFO + its last step makes it one step again (before, a tied step cut the note before it). With no note before the
    step the bar says NOTHING TO TIE; a tie does not run across the end of the loop. The grid draws a tied note's steps
    dim and joined, and a white key on a step a tie runs through cuts the tie there and starts a hit. Notes made longer
    in the editor's piano roll now show their length on the FM-1 too.
  • Held black keys on the FM-1's drum grids (#368). On a drum track's SEQ page a black key now sounds its row for as
    long as it is held, not as a one-step hit, with REC on or off and the transport running or stopped. With REC on and
    the transport running it records a note lasting the whole steps it was held (at least one), on the nearest step, the
    same way a live take records melodic notes. The white keys still place steps while REC records.
  • Wording: cursor entry and step write. The editor's recording with the transport stopped (the keys held together
    fill the cursor's step) is now called cursor entry, in its tooltips and help. Placing steps with the white keys, on
    the FM-1 or on a Steps card, is step write.

Matryoshka 1.5.1 (web only)

Choose a tag to compare

@glvno glvno released this 27 Oct 23:38
ec7d934

Fixes

  • The editor starts about three times faster. It no longer works out, as the page loads, every factory patch, the
    FM-1 budget of every patch in the Open picker, and the presets of every XL. A factory patch is built when it is first
    opened. The picker's FM-1 · NN % and SANDBOX chips are worked out after the page is up, while it is idle (all of them
    at once if the picker is opened first); they read as before. The factory presets of an engine are made when an engine
    of that structure is first shown. Structure fingerprints and the patch check no longer compare every cable with every
    other one. The Library's Patches section is drawn when it is shown, and remembers which patches fit the FM-1. Measured
    in headless Chrome on the built site, empty browser storage: on an M-series Mac, the page was ready
    (DOMContentLoaded) after 0.33 s (1.22 s before), with 0.56 s of script (1.13 s); with the CPU slowed 4× and a
    9 Mbit/s, 70 ms network, after 1.69 s (4.21 s), with 1.03 s of script (2.98 s). With a browser that holds 50 saved
    patches, a 64-slot bank and 20 library assemblies, mostly in the 1.3 and 1.4 formats, and an XL open: 0.47 s
    (1.42 s) on the Mac and 1.98 s (4.90 s) slowed. Script time is counted until 4 s after load, so it includes the
    chips worked out while idle (all but a few of them in the slowed run with stored patches).
  • The browser tab's icon is 12 KB instead of the 841 KB full-size logo.

Web only: the FM-1 firmware is unchanged from 1.5.0 (v1.5.0, FM-1_715). Open https://matryoshka.lol/.

Matryoshka 1.5.0

Choose a tag to compare

@glvno glvno released this 27 Oct 21:41
5a2ee4e

Matryoshka 1.5.0 brings three FM-1 factory instruments to full parity with the controls and architecture of their originals (Silver Box / TB-303, Monolith D / Minimoog Model D, Sallen 20 / MS-20), adds pattern memory and songs to Steps, and rebuilds seven more FM-1 instruments around their originals' panels. It also fixes an FM-1 freeze that could hit anyone with the FM-1 plugged into a computer where no app reads its MIDI.

Fixes for bugs that could have cost us a user

  • No more freezes when the FM-1 is plugged into a computer that isn't listening. If no app on the computer read the FM-1's MIDI, every message the FM-1 sends for the editor (a knob turned, a step entered) waited up to 0.2 s for room. Entering steps quickly froze the screen, the LEDs and the keys for seconds, and the sound cut out: the longest pass of the main loop measured 7.46 s on our test FM-1 (Elvira 2, sequencer running, steps entered by hand). The first fix brought that to 0.33 s; now a message waits at most 0.05 s, and after one such wait the FM-1 stops waiting until the computer reads again (the editor syncs when it connects). The owner confirmed by hand on the test FM-1 that the freeze is gone.
  • If you saw hitches on 1.4: 1.4 had the same 0.2 s wait, so an FM-1 on a computer with nothing reading its MIDI could pause for a moment on knob turns or step entry. 1.5's larger editor messages made it far worse, which is how we found it; 1.5 fixes both.
  • Turning VOICES too high no longer silences the instrument. When one more voice needed more engine memory than was left (Cassia 1's fifth voice could), the row was left at −1 and the patch went silent. Now the FM-1 keeps the last setting that plays, shows NO ROOM and does not send the rejected value to the editor, and audio pauses while the engine rebuilds. Checked with the host panel test; not yet checked on a device.
  • Editor messages over USB stay in order. The FM-1 dropped an editor message that arrived while it was still handling the one before (the editor had to retry). It now holds later messages and handles them in turn. Entering sandbox mode now tells the FM-1 first, so it mutes and keeps the sandbox's first page instead of discarding it. Host and emulator tested.
  • A patch the editor says fits now really fits. The patch-bytes budget left out the 9-byte record a panel button adds when ARP, FX or LFO is not a plain gate, so a patch within 9 bytes of the 3,840-byte limit passed the editor's check and was then refused by the FM-1. The budget now counts exactly what is sent (Oracle V: 1,290 → 1,299 bytes).
  • Inserted assemblies keep their macro ranges (#367). Saving an assembly and inserting it again turned a macro's set range into ordinary added modulation, so it played differently. Each inserted copy now keeps its own ranges; a test checks the sound and that editing one copy leaves the others alone.
  • Morphing patches play the same on the FM-1 as in the browser (#355). Once a patch had a morph B set, the FM-1 morphed every module and the browser only the modules with a B side, so some values could sound different on the FM-1. Patch format 36 records which modules morph; patches stored earlier keep how they play when loaded and upgraded.

App-wide improvements

  • Pattern memory and songs. Each Steps track holds up to 64 patterns, each with its own length and rate (or the track's), saved in the patch. Songs chain them: up to 8 songs of up to 64 entries, each a pattern plus a shift of up to an octave either way (Drum map tracks are never shifted). While playing, each track changes pattern at the end of its own pass; a song loops, and PLAY starts it at its first entry.
  • Patterns and songs on the FM-1. PRESET on the SEQ page picks the pattern (1 to 64); while playing, the top bar shows both numbers (P03>P04) until each track has switched. Tapping SEL on the SEQ page opens the new SONG page: K1 sets an entry's pattern (on END it adds one, FX + K1 inserts a copy), K2 its shift, K4 switches between song and pattern, ALGO picks song 1 to 8, SEQ + REC deletes an entry (asked first). Tested in the emulator; needs this firmware (patch format 48).
  • Patterns and songs in the editor. Each Steps card and the piano roll have a pattern strip (‹ P01 ›, or [ / ]) that picks the pattern, blinks while a track waits for the end of its pass, sets a pattern's length and rate, copies every track's pattern to the next empty one and clears this track's. SONG opens a songs drawer (songs 1 to 8; add, insert, delete and drag entries; the playing entry is highlighted). The editor follows the FM-1's choices and edits them over the link.
  • Patterns cost nothing in patches that don't use them. The new section is written only when a patch has patterns or songs, with 16-bit note words where it can (half the size), so every factory patch's FM-1 binary is byte for byte as before. The FM-1's note pool grows from 512 to 1,536 notes per patch: engine state 21,096 → 31,512 bytes of RAM (stand-in estimate, tools/pool_sizes.sh: 389,222 → 399,638 of 417,792 bytes); Steps 14,212 → 14,282 cycles per block (host build).
  • Steps play modes: backward, ping-pong and random alongside forward. Swing and live recording follow the steps actually played, and a note near the end of the grid can last up to 64 steps, so it keeps its length when the track plays backward.
  • Steps: two more rates and more swing. 1/2 (eight times slower than 1/16) and 1/64 (four times faster), and swing up to 80 % (75 % before), on the card, in the roll and on the FM-1's SEQ page. Cables and macros into rate and swing still cover 1/4 to 1/32 and 50 to 75 %, so older patches play exactly as before.
  • One card row can set several modules (#357). In pick mode, "one row with…" joins a row to another of the same range (say two filters' cutoff): the row, a cable or macro on it, a card preset and the FM-1's knob all move both; "split" separates them. Such a row shows ×2, ×3 after its name. FM-1 cost: 1,280 bytes more of the pool (383,080 → 384,360 of 417,792) and 916 bytes more firmware (CI build). Host-tested, not yet on a device.
  • Named Selector positions (#358). Pick mode's "names" gives a Selector's positions names such as SAW, SQUARE, PULSE; the card, Main's knobs and the FM-1's page show them (in capitals on the FM-1), and the row offers only the positions in use.
  • One at a time. Arrange mode's "one at a time" shows controls the original edits one at a time as a single set under a picker: the Casio CZ's eight envelope steps become one rate and one level under a "step" row, and the FM-1 gives each step a page. Copies of card controls can span several FM-1 pages.
  • New modules (1 of 2): the Selector (one stepped row picks one of eight inputs, each with a value added, and raises that position's gate so one choice can switch several things; optional crossfade up to 100 ms; about 0.4 % of the FM-1's CPU plus 0.1 % per cabled gate, model estimate), Phase distortion (PD Osc on the FM-1: all eight Casio CZ waveforms with DCW, a second waveform on every other cycle, pm and sync; about 2 to 4 % per copy, estimate) and Env 8 (the CZ's eight-step envelope with sustain and end steps; about 1 to 1.4 % per copy, estimate).
  • New modules (2 of 2): the Follower (after the Korg MS-20's External Signal Processor: any signal into a pitch, an envelope and a trigger, with signal level, low cut, high cut, cv adjust and threshold), Ratio (the Yamaha DX100's 64 frequency ratios as a pitch offset) and Rate Env (DX-style attack / decay / release rates, zero-rate holds, keyboard rate scaling and pedal hold).
  • Longer and wider ranges on five modules (#351, on the FM-1 too), each a new row whose default plays as before: ADSR long (decay to 12 s, release to 19.2 s); LFO phase, range (slow ÷25 down to 0.0008 Hz, fast ×2 up to 80 Hz), dir (backward) and mult (synced cycles /8 to x8, down to a 1/128 triplet); Delay note (1/32, 1/2T, 1/2 dotted, 1/1T, 1/1 dotted) and swell (feedback to 1.98 with a soft clip); Reverb freeze; Pulse inf.
  • LFO: a continuous wide rate of 0.0008 to 55 Hz, a shape input that sweeps from falling saw through triangle to rising saw (and sets the pulse width), a pulse output at the same time, and a rate row that shows the rate the LFO actually runs at in its slow and fast ranges.
  • Filters and oscillators: the Multimode filter adds hp6 (a resonant 6 dB per octave high pass, after the MS-20) and an opt-in osc switch that makes it self-oscillate at full resonance; patches that leave osc off are written in the older format and cost no extra memory. The Ladder adds an audio-rate cutoff input (the old input keeps its behaviour). The Oscillator adds sharktooth (a triangle / saw hybrid) and reverse saw, with unison, sync and phase modulation.
  • Voicing: a separate unison voice count that keeps the polyphonic count; SHARE, which spreads the voices across held notes like the Jupiter-4's UNISON II (both engines keep all 128 held keys); lowest / highest held-voice gates; a key-press trigger; and options to turn off voice stealing and reset the rotation to voice one after all keys lift. Older patches keep their allocation. The ADSR adds a hold input for MIDI sustain that still lets new notes attack.
  • Drum map REPEAT: a Drum map can repeat its rows across the keybed so every key plays a row (a black key plays the row of the white key below it); on the FM-1 the keys that played nothing on a Drum map then play a row too. Off by default. Needs this firmware; not yet played on a device.
  • Older patches keep working. Patches saved on the FM-1 before this release load and sound the same; new parameters take their defaults, and saving again stores the new format. The editor checks which patch formats the firmware supports before syncing and tells an FM-1 on older firmware to update.

Faster and lighter

  • **Lower CPU use ac...
Read more

Matryoshka 1.4.2

Choose a tag to compare

@glvno glvno released this 26 Oct 23:34
e3145af

Patch release for #363: incoming MIDI notes no longer wait for FM-1 screen redraws.

  • Fixes notes disappearing or arriving together while turning SELECT/ALGO or pressing octave buttons. USB and TRS input share the corrected path.
  • Keeps the 1.4.1 browser features and the 1.4.0 firmware engine and patch format. Other unreleased work is not included.
  • Includes the Cassia 1 patch already published in the 1.4.1 browser in the firmware's factory set. Existing saved banks stay intact; it can also be sent from the editor.

The exact release firmware passed 158 emulator smoke checks, 26 emulator scenarios and 26 device scenarios. On the test rig it played 50/50 notes through SELECT and ALGO changes and 200/200 through octave changes at 20 ms spacing; timing matched idle playback. Those precise timing measurements used USB MIDI; the TRS parser is also covered by the host regression.

Update through the Install page, or download matryoshka-1.4.2.fwsc below. The zip includes the package, application binary, checksums, build log and licences.

Firmware: v1.4.2, identity FM-1_714. Package SHA-256:
9f995387835b513e9adec606a3649e076794013ca5765e3bf3a1e9a4ccda0f0a.

Matryoshka 1.4.1

Choose a tag to compare

@glvno glvno released this 26 Oct 17:02
c78cf9c

Web only. The firmware is 1.4.0's (v1.4.0, FM-1_714): see 1.4.0 for the package. New factory patches now ship in the browser first; the FM-1 gets them with its next firmware release.

  • A new engine, Cassia 1, after the Casio CZ-1: phase distortion. Each voice has the CZ's two lines: line 1 sweeps
    from a sine to the CZ saw or square, line 2 is the CZ's resonance waveform, a resonant peak that sweeps. Each line
    has its DCW envelope, with one DCA envelope, line mix, line 2 detune, key follow, velocity and vibrato. Three voices on the
    FM-1 (75 % of its CPU, estimated). Its factory patch is in the browser now and comes to the FM-1 with the next firmware
    release; until then, send it to the FM-1 over the editor link.
  • Cassia 1 XL in the browser: all eight CZ waveforms (saw, square, pulse, double sine, saw-pulse; resonance I, II
    and III) and a second waveform on every other cycle, both lines with their own DCW and DCA envelopes of six steps
    (the CZ has eight), the 1+1' line mode, a pitch envelope, ring and noise modulation, vibrato with delay, key follow,
    velocity and aftertouch. Four voices with two lines, as the CZ-1; eight with one.
  • Every XL now has its original's whole panel, after the original's manual; what is still missing is listed in the
    XL's notes with the reason (a module we do not have yet, hardware, or samples). Among the additions:
    • Oracle V XL: saw, triangle and pulse on oscillator B, the Rev 3 filter, velocity and aftertouch, unison detune,
      chord memory, the release switch, the Vintage knob.
    • Hera 6 XL: the DCO range, PWM mode, key transpose, bender amounts, portamento, assign modes, hold.
    • Expander S XL: eight SEMs, each with its own knobs, and the Eight Voice keyboard (split, unison, portamento).
      An "all SEMs" section at the top moves each control on all eight at once, keeping their differences.
    • Algo Four XL: one algorithm row (1 to 8), velocity, level and rate scaling, LFO delay and sync, portamento,
      pitch bend range, key shift.
    • 8 Lire XL: the FAST switches, touch (velocity and pressure per plate), the rear jacks as inputs.
    • Elvira 2 XL: all eleven MOD programs, twelve filter types, the reverb, the ATT and ADD utilities, the jacks.
    • Meridian 8 XL: mute and CV mute buttons, nine LINK buttons, the touch plates, individual outputs.
    • Perun 4 XL: the LFO on any knob, CONTROL ALL, CHORD and DIGITAL NOISE modes, four sequencer tracks with
      chance, groove and fill, the BBD's controls and the compressor.
    • 909 Kit XL: mid tom, crash and ride, TOTAL ACCENT and per-drum accent, flam, shuffle and scale.
    • Spokes 6 XL: all six machines on every track, chance, fill lanes, retrigs, the LFO on any destination,
      velocity routes, pads.
  • The XLs are heavier in the browser. With four notes held, in Chrome on a recent Mac, as a share of real time:
    Spokes 6 XL 61 %, Cassia 1 XL 39 %, Elvira 2 XL 37 %, Expander S XL 23 %, the others 6 % to 20 %. Big XLs share as a
    stored link.

1.4.0

Choose a tag to compare

@glvno glvno released this 26 Oct 04:27
fc3f678
  • A new engine, Spokes 6, after the Elektron Model:Cycles: six FM tracks (kick, snare, metal, perc, tone, chord),
    each with pitch, decay, color, shape, sweep and contour, plus volume and a delay send. Its factory patch comes last,
    after <7PH: three Steps tracks (DRUMS, TONE, CHORD) play a 16-step groove in A minor at 120 BPM, and the keys play TONE.
    It estimates 85 % of the FM-1's CPU (not yet measured on a device).
  • Spokes 6 XL in the browser: the same with a reverb, stereo pan, distortion and an LFO per track, and phase
    modulation on the snare and metal. It is a sandbox patch (146 % of the FM-1's CPU).

Firmware: matryoshka-1.4.0.fwsc, v1.4.0 / FM-1_714, sha256 8d6790a7177c6582d97df765620e063aabf6702797771dba1ea162aead13e017. Install from the site's Install panel. Checked on the emulator (emu:smoke 156 / 0 on these bytes); not checked on a device before release. An FM-1 that already has a bank keeps it: Spokes 6 is written to a slot by FACTORY RESET.

1.3.5

Choose a tag to compare

@glvno glvno released this 25 Oct 21:25
dd28be2

Web only. The firmware is 1.3.3's (v1.3.3, FM-1_713): see 1.3.3 for the package.

  • Arrange mode is redone. Each heading and its pages sit in a faint outline, each FM-1 page in a fainter one with its own ⠿ handle, and the heading field shows the FM-1's name for its pages, "filter (FILTER)". A drag shows one line where it will land: a row can go to the start, middle or end of any page that has room, a page anywhere between pages, a section to the top of any column. Moving things never reshuffles the other pages.
  • Arrange mode: + heading under any section or at the top of a column, and + page break between any two rows of a page; a page break you added has a × to join the pages again. A heading keeps its place when you move all its rows away, and is saved with the patch (the FM-1 and the normal card skip it).

1.3.4

Choose a tag to compare

@glvno glvno released this 25 Oct 19:04
0bce7b0

Web only. The firmware is 1.3.3's (v1.3.3, FM-1_713): see 1.3.3 for the package.

  • An assembly made of assemblies keeps the names they gave their controls and jacks: promoting a nested "hold pitch" slider onto the outer card shows "hold pitch", not the Macro's "value".
  • A control promoted from a nested assembly lands under a heading named after it and its page there ("Lire 5-8", label "hold"), next to the other controls from that page. Factory assemblies and saved patches are unchanged.

Matryoshka 1.3.3

Choose a tag to compare

@glvno glvno released this 25 Oct 18:08
c466610
  • Syncing with an FM-1 on firmware older than 1.2 now says to update it (with a button to the install panel),
    instead of failing with "the firmware refused the patch".
  • The sidebar stays the same in Patch, Emu and Library; Get started, Audio on / Panic and MIDI are there in all three.
    Library's Patches, Assemblies, Presets and Community are tabs at the top. The logo takes you back to the canvas.
  • 909 Kit XL has an arpeggiator (ARP, off until pressed) between its DRUMS track and the drum map, like every other XL.
  • Make assembly (Ctrl/Cmd+G) works on a selection of assemblies alone: group two engines into one and promote just
    the controls you want.
  • Emu: muting a track on a synced FM-1 (SEQ + a black key) now blinks that key on the emulator too, and letting go of
    SEQ no longer flips the emulator to the SEQ page.
  • 8 Lire and Elvira 2 (and their XLs) call their piano roll rows VOICE 1, VOICE 2, ... instead of KICK, SNARE, ...;
    the browser's roll and the FM-1's SEQ page now show the same names on the same notes.

Also in this release (1.3.2, never released on its own)

  • FM-1: the footer's octave (= OCT =, OCT +, - OCT) changes as soon as you press OCT- / OCT+, not only once something
    else redraws the screen.

Firmware: matryoshka-1.3.3.fwsc, v1.3.3 / FM-1_713, sha256 3f7e9ce26df06c5c635dcecae70d08f00d88a70deced6903536affafa644f0ce. Install from the site's Install panel.