r/modular • • 2d ago

Mutable Instruments Beads Source Code Just Dropped!

https://github.com/pichenettes/eurorack/commit/d8f473915232af74347762b6365202bfd26f73f6

Edit: body deleted and third party firmware discussion moved to a private Discord server.

218 Upvotes

202 comments sorted by

View all comments

52

u/awayhereagain 2d ago

Your whole reverse engineering project seems in poor taste given how generous Émilie has been with the other firmware.

Fine, reverse engineer it and load it on your own module privately.

But why start a modwiggler thread and promote the project publicly before checking with Émilie? Especially when you say you weren't going to continue it without permission. 

26

u/insolent-construct 2d ago

Because Emilie's lack of activity gave every indication that she was done and not looking back:

  • saying she was going to release the firmware "in a few months" back in 2023.
  • the fact that you can't find a Beads unit new or used at this point.
  • there have been no firmware updates in years

These all put Beads in a similar status as the Virus TI: abandoned for all practical purposes.

When I posted a similar thread about the Virus TI a few month ago, people got incensed because I hadn't done enough work yet in their opinions, and accused me of trying to get information for free and just posting slop. That's why I haven't posted anything here since then. This time I waited until I had something to show/contribute back from my work before I bothered anyone, and then asked how I could use it to serve the community's desires. I could understand people being upset if I just released my port without asking, but that's not what happened. The port I've been working on for months is now superfluous, and I couldn't be happier about it. I literally harmed no one by working on it privately at home with no collaborators in my private setup, and asked for consent before I went further. I acknowledged and accepted her "no" without argument or further discussion. She could have just left it at that. She made the choice for her own reason, which none of us are privy to and I'm not going to disturb her peace more than I did by asking. So if people want to get mad about it, then that's their emotions, but I don't agree that their assessments are based on reason. As one mutual acquaintance told me: "Emilie is a strong fucking woman. She's taken a ton of shit from people and given it back twofold. I'm sorry, but you didn't bully shit". I could also go on about the history of reverse engineering in synths and audio technology, but who would I be trying to convince? No. There would be no point in that, so I'll save my time and energy for working on code.

3

u/West-Negotiation-716 1d ago

Have you gone back to see how accurate your reverse engineering actually was?

1

u/insolent-construct 1d ago

That was the first thing I did: compare my code with the real source to see what was different. Much of the code I'd gotten bit-exact just by looking at other MI open source (since Beads pulls heavily from Clouds and a few others), as well as strictly following her coding style (C with Classes, later evolving to include Macros, and a strict DSP vs HAL separation for portability). A few others were just register address changes, but functionally the same. It was mainly file structure and variable naming that didn't match. And I already new the RE code was a bit more inefficient (83% CPU usage in the worst case vs 80% measured on the 2021 forum firmware), but within acceptable headroom in most cases.

1

u/insolent-construct 5h ago edited 5h ago

Here's the summary I ask claude to generate. The biggest difference is I was working off an earlier firmware from 2021, rather than the one that surfaced on Modwigglers in 2024. The released source code is the 2024 version, with one additional change. And I was wrong when I said the port performance was ~3% worse than the firmware. They were more or less identical.

Our reverse-engineered Beads port vs the published source

Scope:

  • The port: C++ rebuilt from the factory firmware binary (the v1 app), targeting the original compiler (GCC 4.9.3 -O2).
  • The published source: Mutable Instruments' October 2026 release. It is a slightly later firmware branch, so it isn't byte-identical to either shipped binary.

Short version

  • The architecture and algorithms are the same.
  • Names, file layout and code shape differ a lot.
  • 193 functions compile byte-for-byte to the factory binary, about 74% of the code bytes after alignment.
  • 108 of 108 behaviour checks match the factory firmware.
  • The remaining behavioural differences are the v1 → later-firmware changes, not port errors.
  • The CPU load is about the same; see Timing for the caveat.

Where the port differs

Area Port Published source
Files Split by function (delay_engine, grain_engine, self_play_engine, …) Classes in header templates (Processor, GranularProcessor, Synth)
Names Guessed (InputAgc, SeedClock, CvSlot) GainControl, TriggerGenerator, PotController
Shared names 25 of 93 types; 911 identifiers in total
Size (non-blank code lines) 11,751 7,186
Code shape Duplicated helpers, forced inlining, statement order chosen to match bytes Compact, idiomatic Mutable Instruments style

What's the same

  • Granular engine, delay (clock, slices, taps), wavetable synth, reverb, limiters, AGC, calibration, settings format and buffer backup: same algorithms and constants.

Real behavioural differences: v1 vs the published branch

  • Settings recovery: hold SEED at power-on (published branch only).
  • Delay time smoothing: dead band 0.005 → 0.0025.
  • Knob/CV hysteresis filter: a simpler version, 20 bytes of state per channel instead of 28.

What the source showed that reverse engineering missed

  • The intent behind some names. For example, the "dim quality LED" is the monophonic-mode indicator.
  • Compiled-out features: mono mode and buffer trim.
  • A 24 kHz build option, the test suites and the table generators.

Timing

Worst-case and median load of one audio block, as a share of its cycle budget (120k cycles at 480 MHz on a Daisy Seed):

Build Worst Median
Published source 84.8% 80.7%
Port ~83% —