Dexed FM engine for openFrameworks
README
Development status: ofxDexed is new and only lightly exercised. Dexed, tuning-library, and MTS-ESP sources are vendored underaddons/ofxDexed/libs/dexed/(seelibs/dexed/VENDOR.txtfor pins). GPL-3.0 applies to Dexed’s own code and several companion files;libMTS-ESPand tuning-library use their own permissive licenses — check each tree if you ship binaries.
ofxDexed
JUCE-free integration of Dexed’s MSFA FM engine for openFrameworks:
- Compiles
Source/msfa/,EngineMkI/EngineOpl, and ODDSoundlibMTSClient. - Replaces Dexed’s
msfa/tuning.ccwithsrc/dexed_msfa_tuning.cppso SCL/KBM parsing never calls into JUCE. ofxDexedSynthexposesprepare(), INIT VOICE loading, MIDI (ofxMidi/ raw bytes), interleaved stereo rendering, and Yamaha SysEx paths (single-voice + 32-voice cartridge) compatible with Dexed’s handling.ofxDexedCartridge(src/ofxDexedCartridge.) ports Dexed’sCartridgeclass (packed/unpacked voice data) without JUCE.
Updating the vendored Dexed tree
This fork tracks plain files under
libs/dexed (no nested .git). To pull a newer Dexed + pins:addons/ofxDexed/scripts/fetch_dexed.ps1 # PowerShell — exits if a snapshot is already present
addons/ofxDexed/scripts/fetch_dexed.sh # Bash — sameDelete
addons/ofxDexed/libs/dexed/ first if the script reports the tree is already vendored. After upgrading, remove nested .git folders under libs/dexed if you want to keep a flat vendor, and refresh libs/dexed/VENDOR.txt.You do not need JUCE for this addon.
Cartridge & SysEx (ofxDexedSynth)
loadCartridge(data, len)— parse a buffer for a 4104-byte Yamaha DX7 bulk SysEx (same scan logic as DexedCartridge::load).setProgram/getCurrentProgram— pick one of 32 presets after a valid load (MIDI program change matches Dexed when a cartridge is loaded).clearCartridge— drop the bank and return to the INIT patch.applySysexVoiceParameters— 156 bytes: 155 voice parameters + checksum at [155] (the block passed to Dexed’supdateProgramFromSysex).processMidiBytes— routes Yamaha single-voice and 32-voice SysEx the same way as Dexed’s processor (sub-status nibble 0 only).
Example
addons/ofxDexed/example-dexed-midi — ofxMidi + ofxImGui + ofxImGuiStyle + live audio (ofSoundStream). Copy into apps/ and generate a project including the addons listed in addons.make.ECS / inspectors
Optional
ofxDexedKit (sibling addon) adds a DexedSynthUi POD + inspector::registerProperties for ofxEnTTInspector. It does not auto-wire the DSP — copy parameters into ofxDexedSynth in your systems.Done / not done
| Done | Not done yet |
|---|---|
Multi-voice MIDI, INIT VOICE, cartridge .syx + incoming 32-voice / single-voice SysEx, program change, Mark I/OPL/modern cores, modulation CCs, pitch bend | Remote parameter SysEx (sub-status 1), Scala file UI, full Dexed plugin parameter map |
Licenses
Upstream Dexed is GPL-3.0. This addon adds MIT-style glue where noted in file headers; the heavy lifting remains under Dexed / Google MSFA Apache-2.0 headers inside the Dexed repo.
ofxAddons