SubSynth is a powerful subtractive synthesizer implemented as a VST3/CLAP plugin, built with the NIH-plug framework. It combines classic synthesis techniques with modern workflow, offering comprehensive sound design capabilities for electronic music production and sound design.
- 🎹 16-Voice Polyphony - Smooth, responsive voice management
- 🌊 Multiple Waveforms - Sine, Square, Sawtooth, Triangle, and Noise
- 🎚️ Full ADSR Envelopes - Independent control for amplitude and filter parameters
- 🔊 Comprehensive Filtering - Low-pass, High-pass, Band-pass with resonance control
- 🎨 Modern UI - Clean, intuitive interface with custom zCool font
- 🔌 Universal Compatibility - VST3 and CLAP plugin formats
- 💻 Cross-Platform - Windows, macOS (Universal Binary), and Linux
- Windows: Windows 10 or later (64-bit)
- macOS: macOS 10.13 (High Sierra) or later
- Linux: Modern distribution with X11 or Wayland
- DAW: Any VST3 or CLAP compatible host
- Download the latest release from the Releases page
- Extract the archive
- Copy
SubSynth.vst3folder to:C:\Program Files\Common Files\VST3\ - Copy
SubSynth.clapfile to:C:\Program Files\Common Files\CLAP\ - Restart your DAW and rescan plugins
- Download the latest macOS release
- Extract the archive
- Gatekeeper: Right-click the plugin bundle and select "Open" to bypass security
- Alternative: Visit disable-gatekeeper.github.io
- Copy
SubSynth.vst3to:~/Library/Audio/Plug-Ins/VST3 - Copy
SubSynth.clapto:~/Library/Audio/Plug-Ins/CLAP - Restart your DAW
- Download the Linux release
- Extract and copy files:
mkdir -p ~/.vst3 ~/.clap cp -r SubSynth.vst3 ~/.vst3/ cp SubSynth.clap ~/.clap/ chmod +x ~/.vst3/SubSynth.vst3/Contents/x86_64-linux/SubSynth.so chmod +x ~/.clap/SubSynth.clap
- Rescan plugins in your DAW
Required:
- Rust 1.79.0 or later
- Git
Platform-Specific Dependencies:
Linux (Ubuntu/Debian):
sudo apt-get install -y libasound2-dev libgl-dev libjack-dev \
libx11-xcb-dev libxcb1-dev libxcb-dri2-0-dev libxcb-icccm4-dev \
libxcursor-dev libxkbcommon-dev libxcb-shape0-dev libxcb-xfixes0-devmacOS:
xcode-select --installWindows: No additional dependencies required.
# Clone the repository
git clone https://github.com/taellinglin/Subsynth3.git
cd Subsynth3
# Build release version
cargo xtask bundle subsynth --releaseThe compiled plugins will be located in target/bundled/:
SubSynth.vst3- VST3 pluginSubSynth.clap- CLAP plugin
# Build debug version (faster compilation, slower runtime)
cargo xtask bundle subsynth
# Run tests
cargo test --workspace
# Generate documentation
cargo doc --no-deps --openSubSynth features a clean, organized interface using the custom zCool XiaoWei font for enhanced readability.
┌─────────────────────────────────────────────────────────┐
│ SubSynth │
├──────────────────┬──────────────────┬───────────────────┤
│ Gain │ Filter Type │ Filter Cut Env │
│ Waveform │ Filter Cutoff │ - Attack │
│ Filter Type │ Filter Resonance│ - Decay │
│ Filter Cut │ │ - Sustain │
│ Filter Res │ Amp Envelope │ - Release │
│ │ - Attack │ │
│ │ - Decay │ Filter Res Env │
│ │ - Sustain │ - Attack │
│ │ - Release │ - Decay │
│ │ │ - Sustain │
│ │ │ - Release │
└──────────────────┴──────────────────┴───────────────────┘
- Range: -30.0 dB to +30.0 dB
- Default: 0.0 dB
- Description: Controls the overall output volume of the synthesizer
- Usage: Set this to unity gain (0 dB) for standard operation, increase for louder output
Available waveforms with distinct tonal characteristics:
-
Sine - Pure fundamental frequency, smooth and clean
- Use for: Sub bass, pure tones, FM synthesis
-
Square - Rich in odd harmonics, hollow sound
- Use for: Leads, bass, retro game sounds
-
Sawtooth - Full harmonic spectrum, bright and rich
- Use for: Strings, brass, aggressive leads
-
Triangle - Softer than square, contains odd harmonics
- Use for: Flutes, mellow pads, soft leads
-
Noise - Random signal, no pitch
- Use for: Percussion, wind effects, texture
- Range: 0.0 ms to 2000.0 ms
- Default: 5.0 ms
- Description: Time for the note to reach peak volume after trigger
- Tips:
- Fast (0-10ms): Percussive sounds, plucks
- Medium (10-100ms): Piano-like sounds
- Slow (100-2000ms): Pads, strings, ambient textures
- Range: 0.0 ms to 2000.0 ms
- Default: 100.0 ms
- Description: Time to transition from peak to sustain level
- Tips: Shorter decay for punchy sounds, longer for evolving tones
- Range: 0.0 to 1.0 (0% to 100%)
- Default: 0.7 (70%)
- Description: Level maintained while note is held
- Tips:
- Low (0-0.3): Percussion, plucks
- Medium (0.3-0.7): General purpose
- High (0.7-1.0): Pads, sustained notes
- Range: 0.0 ms to 5000.0 ms
- Default: 100.0 ms
- Description: Time for sound to fade after note release
- Tips:
- Fast (0-50ms): Staccato, tight sounds
- Medium (50-500ms): Natural decay
- Slow (500-5000ms): Ambient tails, reverb-like effects
Available filter modes:
- None - Bypass filter, unprocessed oscillator output
- Low-pass - Removes frequencies above cutoff
- Use for: Warmth, removing brightness, classic subtractive synthesis
- High-pass - Removes frequencies below cutoff
- Use for: Thin sounds, removing rumble, special effects
- Band-pass - Only allows frequencies around cutoff
- Use for: Telephone effect, vocal-like sounds, special textures
- Range: 20.0 Hz to 20000.0 Hz
- Default: 20000.0 Hz (wide open)
- Description: Frequency where filter begins to take effect
- Tips:
- Low-pass: Lower values = darker sound
- High-pass: Higher values = thinner sound
- Modulate with envelope for dynamic tonal changes
- Range: 0.0 to 1.0 (0% to 100%)
- Default: 0.0
- Description: Emphasizes frequencies near the cutoff point
- Tips:
- Low (0-0.3): Subtle filtering, natural sound
- Medium (0.3-0.7): Pronounced character, classic analog sound
- High (0.7-1.0): Resonant peak, self-oscillation, screaming leads
Independent ADSR envelope for modulating filter cutoff frequency.
- Range: 0.0 ms to 2000.0 ms
- Default: 50.0 ms
- Description: How quickly the filter opens after note trigger
- Range: 0.0 ms to 2000.0 ms
- Default: 200.0 ms
- Range: 0.0 to 1.0
- Default: 0.5
- Range: 0.0 ms to 5000.0 ms
- Default: 200.0 ms
Independent ADSR envelope for modulating filter resonance.
- Range: 0.0 ms to 2000.0 ms
- Default: 50.0 ms
- Range: 0.0 ms to 2000.0 ms
- Default: 200.0 ms
- Range: 0.0 to 1.0
- Default: 0.0
- Range: 0.0 ms to 5000.0 ms
- Default: 200.0 ms
- Waveform: Sawtooth or Square
- Filter: Low-pass, cutoff ~200-800 Hz
- Amp Envelope: Fast attack (5ms), short decay (50ms), high sustain (0.8), short release (100ms)
- Filter Envelope: Medium attack (50ms), quick decay (100ms), low sustain (0.2)
- Waveform: Sine or Triangle
- Filter: Low-pass, cutoff ~2000 Hz, medium resonance (0.5)
- Amp Envelope: Instant attack (0ms), fast decay (100ms), low sustain (0.1), short release (50ms)
- Filter Envelope: Fast attack (5ms), medium decay (300ms), low sustain (0.1)
- Waveform: Sawtooth
- Filter: Low-pass, cutoff ~5000 Hz, low resonance (0.2)
- Amp Envelope: Slow attack (500ms), medium decay (500ms), high sustain (0.8), long release (1000ms)
- Filter Envelope: Slow attack (800ms), slow decay (1000ms), medium sustain (0.6)
- Waveform: Square or Sawtooth
- Filter: Low-pass, cutoff ~1500 Hz, high resonance (0.7)
- Amp Envelope: Fast attack (5ms), short decay (100ms), high sustain (0.9), short release (100ms)
- Filter Envelope: Medium attack (100ms), quick decay (150ms), high sustain (0.7)
- Polyphony: 16 voices
- Sample Rate: Supports all standard rates (44.1 kHz - 192 kHz)
- Bit Depth: 32-bit floating point internal processing
- Latency: Zero-latency processing
- Voice Stealing: Oldest-first algorithm
- Oscillators: Bandlimited wavetable synthesis
- Filters: State-variable filter implementation
- Envelopes: Linear interpolation ADSR
- Voice Management: Optimized round-robin allocation
- MIDI Channels: Omni (responds to all channels)
- Note On/Off: Full velocity sensitivity
- Pitch Bend: ±2 semitones (standard)
- Sustain Pedal: CC64 support
- Modulation: Supports standard MIDI CC
Windows:
- Verify files are in correct location
- Check DAW plugin search paths
- Rescan plugins in DAW preferences
- Ensure VST3/CLAP folders exist
macOS:
- Bypass Gatekeeper security (right-click > Open)
- Check Console.app for load errors
- Verify bundle is not quarantined:
xattr -d com.apple.quarantine SubSynth.vst3
Linux:
- Check file permissions (chmod +x)
- Verify shared library dependencies:
ldd SubSynth.so - Check JACK/ALSA configuration
Crackling/Distortion:
- Reduce buffer size in DAW
- Lower voice count if CPU limited
- Reduce filter resonance
- Check output gain level
No Sound:
- Check MIDI routing in DAW
- Verify track is armed/enabled
- Check master gain setting
- Ensure filter cutoff is not too low
Subsynth3/
├── plugins/subsynth/ # Main plugin code
│ └── src/
│ ├── lib.rs # Plugin implementation
│ ├── editor.rs # UI code
│ ├── envelope.rs # ADSR envelope
│ ├── filter.rs # Filter implementations
│ ├── waveform.rs # Oscillator waveforms
│ └── assets/ # zCool font files
├── src/ # NIH-plug framework
├── nih_plug_vizia/ # VIZIA UI integration
├── .github/workflows/ # CI/CD configuration
└── target/bundled/ # Build output
# Run all tests
cargo test --workspace
# Run tests with output
cargo test --workspace -- --nocapture
# Run specific test
cargo test --package subsynthThis project follows standard Rust formatting:
cargo fmt
cargo clippyContributions are welcome! Please follow these guidelines:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow Rust style guide
- Add tests for new features
- Update documentation
- Keep commits atomic and well-described
See LICENSE file for details.
- zCool XiaoWei - Used throughout the interface for enhanced readability
- The Rust audio community
- NIH-plug contributors
- All beta testers and users
- GitHub Repository: https://github.com/taellinglin/Subsynth3
- Issues/Bug Reports: https://github.com/taellinglin/Subsynth3/issues
- Demo Track: https://soundcloud.com/taellinglin/8kwealj94t22
- NIH-plug: https://github.com/robbert-vdh/nih-plug
See CHANGELOG.md for detailed version history.
Documentation generated for SubSynth v0.1.0 Last updated: 2026年1月4日