A Yamaha DX7 FM synthesizer emulator in Rust.
E.PIANO 1 solo — "Greatest Love of All" intro (DX7's iconic FM electric piano):
https://github.com/knoguchi/dx7/raw/main/demo/epiano1_intro_demo.mp4
- dx7-core — Platform-independent synthesis engine (no-std capable, zero dependencies)
- dx7-app — CLI application with real-time audio, MIDI input, keyboard control, and MIDI file rendering
cargo build --release
Play with computer keyboard or a connected MIDI controller:
cargo run --release --package dx7-app
Keyboard controls:
ASDFGHJKL;— white keys (C4-E5)WETYUOP— black keysZ/X— octave down/up1-9,0— select patchQ/Esc— quit
cargo run --release --package dx7-app -- --sysex sysex/factory/rom1a.syx --patch 0
cargo run --release --package dx7-app -- --render output.wav --note 60 --velocity 100 --duration 3
cargo run --release --package dx7-app -- --midi-file song.mid --sysex sysex/factory/rom1a.syx --patch 3 --render output.wav
Render a MIDI file using the built-in General MIDI sound set (128 programs mapped to DX7 patches):
cargo run --release --package dx7-app -- --midi-file song.mid --render output.wav --gm
Use --track 1 --track 2 to render specific tracks only.
cargo run --release --package dx7-app -- --list-midi
The sysex/ directory contains DX7 patch banks organized by source:
factory/— 8 official factory ROM banks (ROM1A–ROM4B)vrc/— 24 Voice ROM Cartridge banks (VRC101–VRC112)greymatter/— Grey Matter E! expansion banks
- 6 identical FM operators with 32 algorithm topologies
- 24-bit phase accumulator, 10-bit sine ROM in log domain
- Integer log/exp domain math matching the YM21280 OPS chip
- Per-operator amplitude envelopes, pitch envelope, LFO
- 4th-order Butterworth output filter at 10.5 kHz (DX7 reconstruction filter)
- DC-blocking filter, stereo reverb, and soft saturation
- GM sound set with 128 programs and synthesized drum machine (channel 10)
- music-synthesizer-for-android (msfa) engine
