PulpCompressor #
Category: validation Type: Effect Path: examples/pulp-compressor/
Summary #
A dynamics compressor with optional sidechain input. The first Pulp example with multiple input buses. Validates the multi-bus architecture, sidechain routing, and more complex DSP processing across three plugin formats.
What It Demonstrates #
- Multi-bus input configuration: main stereo input plus an optional sidechain bus
- Optional bus declaration (
true flag on the sidechain bus descriptor)
- Sidechain detection: uses
sidechain_input() API to access the second input bus when connected
- Automatic fallback to main input for detection when sidechain is not connected
- Envelope follower with separate attack and release coefficients
- Gain reduction computation based on threshold and ratio
- Makeup gain parameter
- No standalone target (standalone has no sidechain routing)
| Format |
Supported |
| VST3 |
Yes |
| AU v2 |
Yes |
| CLAP |
Yes |
| Standalone |
No (no sidechain routing in standalone) |
| Platform |
Supported |
| macOS |
Yes |
| Windows |
Build stubs present, not yet validated |
| Linux |
Build stubs present, not yet validated |
Key Files #
| File |
Purpose |
pulp_compressor.hpp |
Processor with multi-bus input, envelope follower, and gain reduction |
vst3_entry.cpp |
VST3 format entry point |
au_v2_entry.cpp |
Audio Unit v2 entry point |
clap_entry.cpp |
CLAP format entry point |
test_pulp_compressor.cpp |
Unit tests for compression behavior and sidechain routing |
CMakeLists.txt |
Build configuration using pulp_add_plugin() |
Parameters #
| ID |
Name |
Unit |
Range |
Default |
| 1 |
Threshold |
dB |
-60 to 0 |
-20 |
| 2 |
Ratio |
:1 |
1 to 20 |
4 |
| 3 |
Attack |
ms |
0.1 to 100 |
10 |
| 4 |
Release |
ms |
10 to 1000 |
100 |
| 5 |
Makeup |
dB |
0 to 30 |
0 |
| 6 |
Bypass |
(toggle) |
0 to 1 |
0 |
Known Limitations #
- No AU-specific validation test (auval) is configured, unlike PulpGain and PulpTone. Only CLAP dlopen and pluginval (VST3) validation tests are present.
- Peak detection is per-sample across channels, not RMS-based.
- No look-ahead or latency compensation is implemented despite the existing guide mentioning latency reporting.