feat: add resonance compressor and Windows CI

This commit is contained in:
nvrl committed 2026-11-05 23:37:24 +01:00
1 parent 3281535a04
commit 3c5b05fdec
31 files changed
+6340 -57

No files matched your search

+91
View File
@@ -0,0 +1,91 @@
# Resonance Compressor 0.1
A mixing effect for controlling local spectral peaks while retaining the intended
sound. Independently designed in Rust; no claim of matching Soothe or Quance.
![Resonance Compressor](resonance-editor.png)
## Install on Windows
Download the Windows artifact from the GitLab pipeline's **windows** job and
extract the ZIP. Copy `Resonance Compressor.clap` into
`C:\Program Files\Common Files\CLAP\`. In FL Studio 2024.1 or newer, open
Options → Manage plugins, enable Verify plugins, and Find installed plugins.
Load Resonance Compressor in a mixer effect slot. Keep the font license with
redistributed packages.
## Work with it
Loop a troublesome passage in context. Restrict Low/High frequency, then adjust
Amount and Max cut. Sensitivity is a prominence threshold: lower catches more.
Neighborhood defines the spectral reference; Cut width smooths the attenuation.
Attack and Release smooth gain changes; Transient guard briefly relaxes cuts.
Double-click the plot to add one of four focus points. Positive sensitivity
makes the detector more eager; negative values protect the region by raising
the threshold. Drag a point, wheel to change width, or use its numeric fields.
Range boundary handles constrain where processing may act. Focus is detector
weighting, not a static EQ boost and not an absolute protection guarantee.
Cyan shows spectral input energy, coral the attenuation, violet detector focus.
The left scale is calibrated per-bin spectral power; the right scale is cut dB.
Delta plays delayed dry minus wet before output trim. Use it to inspect changes,
then return to normal monitoring to decide whether the music improved.
Mix is a linear blend of aligned signals. Bypass keeps the same latency.
Use Output for matched-level comparison. Spectral attenuation is not a limiter:
sample peaks can increase even when frequency gains never exceed unity.
Four starting presets and A/B comparison help explore alternatives. All controls
are visible. The instrument-style sidebar holds Amount, Mix, and Output; the
spectrum includes filled energy traces, cut overlays, meter rails, and range
handles, using the plugin’s cyan/coral/violet palette. Host parameters and window size persist; Delta does not. The editor
supports numeric entry, keyboard focus, and direct graph editing.
## Timing and limits
Mixing only: 4096-sample analysis windows at 44.1/48 kHz, 8192 at 88.2/96 kHz,
16384 at 176.4/192 kHz, with eight overlaps. Delay is one window, about 85–93 ms.
The plugin reports it for host compensation. Supported layouts are mono and
linked stereo; supported rates are those six standard rates.
The engine uses complex RustFFT with supplied scratch buffers, WOLA reconstruction,
a log-frequency prominence detector, bounded soft-knee cuts, and temporal/frequency
smoothing. Original bin phases are retained. This is not a minimum-phase filter
bank, a live monitoring effect, a limiter, or an automatic separation of tone and
unwanted resonance. No external sidechain, Learn, M/S, or pitch detector in v0.1.
## Build and offline evaluation
```sh
cargo test --workspace --locked
cargo run --release -p resonance-render -- input.wav processed.wav
cargo run --release -p resonance-render -- input.wav delta.wav --delta
cargo run --release -p resonance-render -- --demo /tmp/resonance-demo.wav
cargo run --release -p resonance-render -- --benchmark
python scripts/build-plugin.py --plugin resonance-compressor --target x86_64-pc-windows-gnu
```
The renderer accepts mono/stereo PCM16/24/32 and float32 RIFF/WAVE, capped at
256 MiB; WAV extensible/RF64 are not accepted. It writes float32 WAV, compensates
the processing delay, retains original duration, and refuses existing output.
An optional settings JSON uses the core's Settings structure.
## CI and acceptance
The root GitLab pipeline runs checks in a Linux Docker executor and cross-builds
**Windows binaries only** using MinGW. It needs an available untagged Docker
runner, outbound access to Debian/Rust/Cargo/Git dependencies, and no Windows
runner. The Windows job produces both CLAPs, setup guides, licenses, checksums,
and a ZIP. Runner execution must be verified on the actual GitLab instance;
local verification is not a remote pipeline run.
Before calling host support complete, test FL Studio discovery as an effect,
automation, plugin delay compensation, parallel dry/wet alignment, repeated loading,
project restoration, mono/stereo, all supported sample rates, and render tails.
Judge through real patches with matched listening levels: preserve vowel motion,
snare punch, bass body, and stereo placement. Synthetic tests do not establish
artistic usefulness.
Local benchmark: AMD Ryzen 7 PRO 3700U, optimized build, stereo 48 kHz, FFT
4096/hop 512: five seconds processed in 0.233 seconds (about 4.7% of one
core in that run). This is not a worst-case multi-instance guarantee.
Binary file not shown.

After

Width:  |  Height:  |  Size: 702 KiB