This is a SIMD-accelerated audio synthesizer written in C++ with the JUCE framework, using vectorized math to simulate polyphonic audio synthesis with filters, envelopes, LFOs, and sine and saw wavetable oscillators.
It's optimized for both x86-64 (SSE) and ARM64 (NEON) platforms, in order to highlight the SIMD techniques in a JUCE context.
Some rudimentary factory presets are included in the plugin - they will be created automatically on first execution of the plugin.
- Multiple synthesis formats (AU, VST3, Standalone)
- Up to 16-voice polyphony
- Multiple waveforms (sine, saw, square) using wavetables
- Sub-oscillator with keyboard tracking
- Unison feature with detune
- ADSR envelopes
- LFO modulation
- Filter per voice
- 4x oversampling to reduce aliasing
- Preset management system
- Includes a basic set of Factory Presets for testing purposes.
- Built using the JUCE framework
- Uses SIMD (Single Instruction Multiple Data) optimization for efficient processing
- Supports both x86 (SSE/SSE2/SSE4.1) and ARM (NEON) architectures
- Implements wavetable synthesis with 2048-point tables
- Uses modern C++17 features
- Note: An initial attempt at integrating Tony Hardy-Bicks' DFM1 Filter is available in the "dfm1-filter-integration" development branch!
-
Move file operations to a background thread to prevent audio glitches.
-
Add a modulation matrix for more flexible routing
-
Implement additional LFO waveforms
-
Add envelope curves/shapes
-
Add filter types (currently has one filter type)
-
Implement additional oscillator waveforms
-
Add effects section (reverb, delay, etc.)
-
Add MIDI learn functionality for parameters
-
Implement undo/redo for parameter changes
-
Add parameter smoothing for all controls
-
Consider splitting the Voice struct into smaller components (Oscillator, Envelope, etc.)
-
Move DSP-related code into separate classes
-
Create a dedicated parameter management class
-
Add more robust error handling for file operations
-
Implement graceful fallbacks for missing presets
-
Add parameter validation
-
Add unit tests for DSP algorithms
-
Implement automated testing for preset loading/saving
-
Add performance benchmarks
-
Use more C++17 features:
// Instead of raw pointer management:
std::optional<Filter> filter;
std::variant<float, double> sampleType;
- Consider implementing the PIMPL idiom to reduce compilation dependencies and improve build times.
- Add detailed parameter documentation
- Include performance considerations and CPU usage guidelines
- Document the SIMD optimization strategy
- Add code comments explaining DSP algorithms
(c) 2025, seclorum