A modular polyphonic MIDI synth voice plugin built with the JUCE C++ framework.
Designed for rapid experimentation with per-voice DSP modules, control mapping, and automation.
Part of an ongoing research and engineering project integrating hardware MIDI controllers with modern synthesis architectures.
MIDIControl001 implements a real‑time plugin environment in which each active MIDI note instantiates a self‑contained VoiceX — a modular voice that combines an OscillatorX and EnvelopeX (or their future variants). The system is designed so that adding new synthesis modes (VoiceB, VoiceC, etc.) requires no change to the plugin’s overall structure.
- Cross‑platform: Built with JUCE (VST3 / AU / Standalone).
- Thread‑safe: Uses
AudioProcessorValueTreeStatefor GUI ↔ DSP synchronization. - Extensible: Swap in new oscillator/envelope modules per voice.
- Realtime‑safe: Parameter snapshots and smoothed values prevent clicks or zipper noise.
- Human‑tuned: All CC controls normalized and perceptually mapped to musical ranges.
| Category | Description |
|---|---|
| Voice Model | Modular VoiceX structure with dedicated OscillatorX + EnvelopeX per note |
| Parameter Handling | AudioProcessorValueTreeState + per‑block ParameterSnapshot |
| Polyphony Management | VoiceManager handles allocation, stealing, and global gain smoothing |
| MIDI Control | CCs normalized (0–127 → 0–1); persistent state between notes |
| Extensibility | Add new voice types (VoiceB, VoiceC, …) without changing host logic |
| Visualization | Lock‑free GUI feedback loop for meters and waveform previews |
| DSP Safety | All parameter reads lock‑free; all updates real‑time safe |
See the full engineering whitepaper in docs/architecture.md.
That document replaces older internal diagrams and fully details:
- The
PluginProcessor↔VoiceManager↔VoiceXdataflow - Real‑time parameter snapshotting and smoothing
- Modular DSP composition and controller mapping
- Design rules for new voice types and extensions
graph TD
Host["Host (DAW / Standalone / CLI)"] --> Processor["PluginProcessor"]
Processor --> VM["VoiceManager"]
VM --> VX["VoiceX (per-note)"]
VX --> OSC["OscillatorX"]
VX --> ENV["EnvelopeX"]
VM -->|mixdown| Audio["AudioBuffer<float>"]
Audio --> Host
- JUCE 7.x or newer
- CMake 3.25+
- C++17 or newer compiler (tested with AppleClang 13+)
git clone https://github.com/TYLERSFOSTER/MIDIControl001.git
cd MIDIControl001
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j./build/MIDIControl001_artefacts/Release/Standalone/MIDIControl001.app/Contents/MacOS/MIDIControl001Or load the VST3/AU binary in your DAW.
- Fork the repository.
- Implement new voice logic under
Source/dsp/voices/. - Add tests under
Tests/dsp/voices/. - Document architectural changes in
docs/architecture.md. - Submit a pull request to
mainwith a short engineering summary.
See the full Voice Type Roadmap in docs/VOICE_TYPES_ROADMAP.md.
That document details the planned evolution from the baseline VoiceA / OscillatorA / EnvelopeA to more advanced synthesis architectures such as:
VoiceDopp— dual-modulator voice with cross-coupled envelopesVoiceLET— Lorentz-equivalent synthesis modelVoiceEns— ensemble and frequency-band layering system
Each new type builds on the modular VoiceX framework described above, extending MIDIControl001 into a flexible, research-grade synthesis platform.
This project is distributed under the MIT License.
See LICENSE for details.
Created and maintained by Tyler Foster.