# SM-26 A simple subtractive synthesizer plugin built with JUCE / C++. * **VST3** + **Audio Unit** (macOS arm64), **VST3** (Linux) * 4 rotary knobs on the front panel whose meaning follows the selected preset * 52 factory presets (Bass / Lead / Pad / Keys / Pluck / FX / Stab / Arp) * tempo-synced delay (follows the host transport / BPM) * 4x80 HD44780-style pixel display with a cascaded on-screen menu * left/right/up/down navigation diamond + ENTER / ESC controls the menu * status footer with the git revision and local build time ## Build Requires a C++17 compiler, CMake >= 3.22 and (on Linux) X11/ALSA dev headers. ```sh make # clones JUCE (once) into deps/ and builds make install # installs + ad-hoc signs + un-quarantines make uninstall # removes the installed plugins make distclean # wipes build/ ``` * macOS installs to `~/Library/Audio/Plug-Ins/` (AU + VST3). * Linux installs to `~/.vst3/`. If a freshly installed AU is not visible to `auval` / your DAW: ```sh sudo killall -HUP coreaudiod ``` ## Usage * Ship MIDI into the plugin; the 4 front-panel knobs drive whichever parameters the current preset maps them to (e.g. cutoff/resonance/ envelope/delay, but many other routings exist). * **Nav diamond + ENTER/ESC** drive the on-screen menu: * root menu -> PRESETS / OSCILLATORS / FILTER / ENVELOPE / DELAY / SYSTEM * up/down = move, left/right = adjust value, ENTER = open/confirm, ESC = back * The LCD shows the current preset, the four knob mappings with live values, host BPM and voice count. The delay can be set to a rhythmic subdivision (SYNC) and locks to the host tempo. ## Layout ``` Build: Makefile -> CMake -> JUCE (deps/juce) Source/ PluginProcessor.* audio processor + DSP shell SynthEngine.* osc/filter/ADSR/delay voice engine Presets.* 52 preset definitions + knob routings SynthParams.* parameter model + formatting PluginEditor.* panel, knobs, nav diamond, footer LcdDisplay.* 4x80 HD44780-style display renderer MenuSystem.* cascaded menu state machine tools/gen_buildinfo.sh generates git-version + build-time header ```