2026-08-05 23:12:17 +02:00
|
|
|
# Monostep
|
2026-08-05 19:56:39 +02:00
|
|
|
|
|
|
|
|
A monophonic 2-oscillator step-sequencer synthesizer implemented as a VST3 plugin with JUCE.
|
|
|
|
|
|
|
|
|
|
## Features
|
|
|
|
|
|
|
|
|
|
- 16-step monophonic sequencer (pattern length 1-16)
|
|
|
|
|
- 2 oscillators with sine / triangle / saw / square waves, detune, and mix
|
|
|
|
|
- Subtractive filter (cutoff, resonance) with ADSR and glide
|
|
|
|
|
- Per-step gates, pitches (+/- 6 semitones), fine tuning (cents), and slide (legato)
|
|
|
|
|
- Matrix editor with click-to-toggle steps, drag-to-pitch, and a slide row
|
|
|
|
|
- Rotary-knob GUI with zoom (100% - 200%), a step panel with fine-tune, and a
|
2026-08-05 23:12:17 +02:00
|
|
|
live orange play-position highlight
|
2026-08-05 19:56:39 +02:00
|
|
|
- Footer status bar showing the git commit and build date
|
|
|
|
|
- Pattern stored in the plugin state (save/restore with the DAW)
|
|
|
|
|
|
|
|
|
|
## Requirements
|
|
|
|
|
|
|
|
|
|
- macOS 12.0 or later (arm64)
|
|
|
|
|
- CMake 3.22 or newer
|
|
|
|
|
- A C++17 compiler (Xcode command-line tools)
|
|
|
|
|
- [JUCE](https://github.com/juce-framework/JUCE)
|
|
|
|
|
|
|
|
|
|
## Building
|
|
|
|
|
|
|
|
|
|
The build expects JUCE in `../juce` relative to this repository. If JUCE lives
|
|
|
|
|
somewhere else, point `JUCE_DIR` at it during configuration.
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
# 1. Get JUCE next to this repository:
|
|
|
|
|
git clone --depth 1 https://github.com/juce-framework/JUCE.git ../juce
|
|
|
|
|
|
|
|
|
|
# 2. Configure:
|
|
|
|
|
cmake -S . -B build
|
|
|
|
|
|
|
|
|
|
# or, for a custom JUCE location:
|
|
|
|
|
cmake -S . -B build -DJUCE_DIR=/path/to/juce
|
|
|
|
|
|
|
|
|
|
# 3. Build the plugin:
|
2026-08-05 23:12:17 +02:00
|
|
|
cmake --build build --target Monostep_VST3
|
2026-08-05 19:56:39 +02:00
|
|
|
```
|
|
|
|
|
|
|
|
|
|
The VST3 plugin is written to:
|
|
|
|
|
|
|
|
|
|
```
|
2026-08-05 23:12:17 +02:00
|
|
|
build/Monostep_artefacts/Release/VST3/Monostep.vst3
|
2026-08-05 19:56:39 +02:00
|
|
|
```
|
|
|
|
|
|
2026-08-05 20:05:38 +02:00
|
|
|
### Quick start with make
|
2026-08-05 19:56:39 +02:00
|
|
|
|
2026-08-05 20:05:38 +02:00
|
|
|
A `Makefile` wraps configure, build, and install. Just run `make`:
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
make # build the plugin and copy it into ~/Library/Audio/Plug-Ins/VST3/
|
|
|
|
|
make test # build and run the headless host test
|
|
|
|
|
make clean # remove the build directory
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Installing (manual copy)
|
|
|
|
|
|
2026-08-05 23:12:17 +02:00
|
|
|
The VST3 plugin ships as a macOS bundle (`Monostep.vst3`). Copy the whole
|
2026-08-05 20:05:38 +02:00
|
|
|
bundle into your DAW's VST3 directory:
|
2026-08-05 19:56:39 +02:00
|
|
|
|
|
|
|
|
```sh
|
2026-08-05 23:12:17 +02:00
|
|
|
cp -R build/Monostep_artefacts/Release/VST3/Monostep.vst3 \
|
2026-08-05 19:56:39 +02:00
|
|
|
~/Library/Audio/Plug-Ins/VST3/
|
|
|
|
|
```
|
|
|
|
|
|
2026-08-05 20:05:38 +02:00
|
|
|
Notes for macOS:
|
|
|
|
|
|
|
|
|
|
- The per-user VST3 directory is `~/Library/Audio/Plug-Ins/VST3/`; create it
|
|
|
|
|
with `mkdir -p` if it does not exist. A system-wide copy would go to
|
|
|
|
|
`/Library/Audio/Plug-Ins/VST3/` but requires `sudo`.
|
2026-08-05 23:12:17 +02:00
|
|
|
- When updating, remove the old bundle first (`rm -rf` on the `Monostep.vst3`
|
2026-08-05 20:05:38 +02:00
|
|
|
inside the target directory) so stale files do not remain.
|
|
|
|
|
- Your DAW may cache the plugin list — quit and relaunch it (or rescan plugins)
|
2026-08-05 23:12:17 +02:00
|
|
|
after installing before looking for Monostep.
|
2026-08-05 20:05:38 +02:00
|
|
|
|
2026-08-05 19:56:39 +02:00
|
|
|
## Running the tests
|
|
|
|
|
|
|
|
|
|
Build the headless host test and run it against the built plugin:
|
|
|
|
|
|
|
|
|
|
```sh
|
2026-08-05 23:12:17 +02:00
|
|
|
cmake --build build --target MonostepTestHost
|
|
|
|
|
build/MonostepTestHost_artefacts/Release/MonostepTestHost \
|
|
|
|
|
build/Monostep_artefacts/Release/VST3/Monostep.vst3
|
2026-08-05 19:56:39 +02:00
|
|
|
```
|
|
|
|
|
|
|
|
|
|
The host scans the VST3, renders a buffer, and verifies that the pattern
|
|
|
|
|
survives a state save/load round-trip. Expect `ALL TESTS PASSED`.
|