Vx7
VX7 — Open-source Yamaha DX7 emulator in Python. 6-operator FM synthesis, 32 factory presets, real-time audio, MIDI support, tkinter GUI.
Install / Use
/learn @gpasquero/Vx7README
VX7 - Virtual DX7 Synthesizer
A Python GUI application that emulates the legendary Yamaha DX7 FM synthesizer, with authentic aesthetics, 6-operator FM synthesis, original factory presets, and optional MIDI support.
Features
- 6-Operator FM Synthesis — Full implementation of the DX7's FM engine with all 32 algorithms
- 32 Factory Presets — Original ROM1A bank: BRASS, STRINGS, PIANO, E.PIANO, ORGAN, BELLS, and more
- Authentic DX7 GUI — Dark brown panel, green LCD display, membrane-style buttons, algorithm diagram
- 16-Voice Polyphony — With voice stealing, just like the original hardware
- DX7 Envelopes — 4-rate/4-level envelope generators per operator with accurate rate-to-time curves
- LFO — 6 waveforms (Triangle, Saw Down, Saw Up, Square, Sine, Sample & Hold)
- Optional MIDI Support — Auto-detects MIDI devices, fully configurable, works without MIDI
- Computer Keyboard — Play notes with your QWERTY keyboard (two octaves mapped)
- On-Screen Keyboard — 4-octave clickable piano (C2-C6)
- Real-Time Audio — Low-latency output (~5.8ms) via PortAudio
Requirements
- Python 3.10+ with Tkinter (Tk 8.6+)
- macOS, Linux, or Windows
Installation
# Clone the repository
git clone https://github.com/gpasquero/vx7.git
cd vx7
# Install dependencies
pip install -r requirements.txt
macOS (with Homebrew)
brew install python-tk@3.12
/opt/homebrew/bin/python3.12 -m pip install --break-system-packages numpy sounddevice python-rtmidi
Usage
python main.py
Or on macOS with Homebrew Python:
/opt/homebrew/bin/python3.12 main.py
Keyboard Mapping
| Keys | Notes |
|------|-------|
| Z S X D C V G B H N J M | C3 to B3 (lower octave) |
| Q 2 W 3 E R 5 T 6 Y 7 U | C4 to B4 (upper octave) |
| Up / Down arrows | Previous / Next preset |
| Escape | Quit |
MIDI
MIDI input is optional. If a MIDI controller is connected, VX7 auto-detects it on startup. If python-rtmidi is not installed, the app runs normally with the on-screen and computer keyboards.
Project Structure
vx7/
├── main.py # Entry point + controller
├── requirements.txt # Dependencies
├── engine/
│ ├── envelope.py # DX7 4-rate/4-level envelope generator
│ ├── operator.py # FM operator with KLS, velocity scaling
│ ├── algorithm.py # All 32 DX7 algorithms + rendering
│ ├── lfo.py # LFO with 6 waveforms
│ ├── voice.py # Single voice (6 ops + LFO + algorithm)
│ └── synth.py # 16-voice polyphonic synthesizer
├── presets/
│ └── factory.py # 32 ROM1A factory presets
├── gui/
│ ├── styles.py # Colors, fonts, dimensions
│ ├── display.py # LCD display emulation (green glow + scanlines)
│ ├── panel.py # DX7-style control panel
│ └── app.py # Main application window
├── audio/
│ └── output.py # Real-time audio output (sounddevice)
└── midi/
└── handler.py # Optional MIDI input handler
Factory Presets (ROM1A)
| # | Name | # | Name | # | Name | # | Name | |---|------|---|------|---|------|---|------| | 1 | BRASS 1 | 9 | PIANO 2 | 17 | MARIMBA | 25 | PIPES | | 2 | BRASS 2 | 10 | PIANO 3 | 18 | KOTO | 26 | HARP 1 | | 3 | BRASS 3 | 11 | E.PIANO 1 | 19 | FLUTE 1 | 27 | GUITAR 1 | | 4 | STRINGS 1 | 12 | E.PIANO 2 | 20 | FLUTE 2 | 28 | SYN-LEAD | | 5 | STRINGS 2 | 13 | E.PIANO 3 | 21 | OBOE | 29 | BASS 1 | | 6 | STRINGS 3 | 14 | HARPSICH | 22 | TRUMPET | 30 | BASS 2 | | 7 | ORCHSTRA | 15 | CLAV 1 | 23 | ORGAN 1 | 31 | TUB BELL | | 8 | PIANO 1 | 16 | VIBE | 24 | ORGAN 2 | 32 | BELLS |
Status
This project is in beta. Known issues:
- GUI layout has overlapping elements in some sections (work in progress)
- Preset parameters are approximations of the original DX7 SysEx data
- Some algorithms may need fine-tuning for accuracy
License
MIT License
Acknowledgments
Inspired by the Yamaha DX7 (1983), one of the most influential synthesizers ever made.
Related Skills
claude-opus-4-5-migration
104.6kMigrate prompts and code from Claude Sonnet 4.0, Sonnet 4.5, or Opus 4.1 to Opus 4.5
model-usage
345.4kUse CodexBar CLI local cost usage to summarize per-model usage for Codex or Claude, including the current (most recent) model or a full model breakdown. Trigger when asked for model-level usage/cost data from codexbar, or when you need a scriptable per-model summary from codexbar cost JSON.
openhue
345.4kControl Philips Hue lights and scenes via the OpenHue CLI.
sag
345.4kElevenLabs text-to-speech with mac-style say UX.
