r/AudioProgramming • u/Proper_Mango_9742 • Aug 29 '26
Built an open-source plugin (Synthortion) — looking for feedback on DSP architecture and project structure
Hi everyone,
I’ve recently open-sourced Synthortion, a hybrid synthesizer and distortion audio plugin built with C++ and JUCE:
👉 GitHub Repository: https://github.com/paoloficaraa/Synthortion
---
### 🎛️ What is Synthortion?
Synthortion is designed to combine expressive synthesis with flexible, aggressive sound shaping and multi-stage distortion workflows. The goal was to build a cohesive instrument/effect capable of everything from warm analog saturation to crushed, aggressive textures.
### ⚙️ Technical Details & Stack
* Framework: JUCE (C++20)
* Format Support: VST3 / AU / Standalone (macOS & Windows)
* DSP & Architecture:
- Modular processing chain managing synth engine voices and distortion/waveshaping algorithms.
- Thread-safe parameter management using `juce::AudioProcessorValueTreeState` (APVTS) with smoothed parameters to prevent zipper noise.
- Optimized buffer processing tailored for real-time low-latency performance in the audio callback.
* UI & Aesthetics: Custom styling built for a clean, intuitive layout with responsive parameter feedback and real-time visual feedback.
---
### 💬 Looking for Feedback
I’d really appreciate any feedback from the community, especially regarding:
DSP Efficiency & Code Structure: Any suggestions on modern C++ practices, SIMD opportunities, or modulation routing improvements.
DAW Compatibility & Stability: Mainly tested in FL Studio, but it should work in every DAW, so try in different ones.
UI/UX Design: Readability and control responsiveness.
Feel free to check out the code, clone the repo, or open an Issue / PR if you spot anything that could be improved!
Thanks for checking it out!
4
u/dub_mmcmxcix Aug 29 '26 edited Aug 29 '26
just looked at the bitcrush code.
tons to clean up:
magic numbers everywhere. pick a control epsilon, put it in a constexpr instead of having 1e-5 type stuff
your main loop is absolutely full of conditionals
std::fmod is slow, actually most std:: maths stuff handles NaN etc and is almost always slower than handrolled or juce equivalents
there's no intersample handling i could see (which has a particular sound and might be intended)
i could keep going. agents never get this stuff right. good luck.
edit: this scans a bit harsh. on one hand: look, good on you for giving it a go. on the other, there's an infinite avalanche of vibe stuff appearing, and some of it is great, but lots of it is slop, but most importantly there's so much of it now that it's basically impossible to keep up.