mfctl #
Like kubectl but for your MicroFreak synth.
Usage #
Live state editing #
mfctl getdumps your live controls as a YAML filemfctl apply <yaml>applies it to the live state
The YAML has an optional metadata section and equally optional apiVersion/kind just for fun; spec, however, is mandatory. Here's a basic example:
metadata:
name: MyAwesomePatch
spec:
oscillator:
type: Modal
decay: 30
filter:
cutoffHz: 1000
resonance: 40
mfctl apply translates this patch into sysex incantations that are specific to firmware v5 - hence apiVersion: microfreak/v5 is the only acceptable one, and you might want to add it to the top.
mfctl get does not read your current preset - it reads the live values; hence it won't tell you the preset name nor the sequence tracks (metadata will be empty), but the whole control panel is covered.
Format conversion #
mfctl can also convert back and forth between YAML and .mbp (Arturia) formats
mfctl import <file.mbp>outputs YAML to stdoutmfctl export <file.yaml>outputs .mbp (Boost serialization format) to stdout
Miscellaneous #
mfctl schemadumps a JSON schema that you can use e.g. for autocompletion with yaml-language-servermfctl validate <file.yaml>validates the patch without applying it
Acknowledgements #
Elektroid is an excellent tool for preset/wavetable management. It uses a completely different set of sysex opcodes that deals with permanent storage. Its existence is why mfctl scope can stay deliberately small.
Ghidra, Unicorn and, for SysEx parser, also angr are the tools that were used to decipher the firmware - by LLMs of course, which have become amazing at this recently.
License #
This project is MIT-licensed - just like the Plaits oscillator engines' code.
If you want to express your gratitude, https://ko-fi.com/datyoma is the right address.
- Rust 91%
- JavaScript 7%
- HTML 1%
- Docker <1%
- Makefile <1%