Files
bass-foundry/docs/patina
nvrl 15853e61ac
Check and Windows preview / check (patina) (push) Successful in 2m20s
Check and Windows preview / check (rivet) (push) Successful in 1m38s
Check and Windows preview / previews (push) Successful in 1m6s
Check and Windows preview / windows (push) Successful in 1m50s
Independent plugin release / publish (push) Successful in 8s
Independent plugin release / plan (push) Successful in 7s
Independent plugin release / build (push) Successful in 2m21s
restructure
2026-11-05 23:58:00 +01:00
..
2026-11-05 23:58:00 +01:00
2026-11-05 23:58:00 +01:00
2026-11-05 23:58:00 +01:00
2026-11-05 23:58:00 +01:00

Patina

Patina smooths a sound’s rough surface without erasing its character. Formerly Resonance Compressor; current version 0.1.0.

A mixing effect for controlling local spectral peaks while retaining the intended sound. Independently designed in Rust; no claim of matching Soothe or Quance.

Patina

Install on Windows

Download the Windows artifact from the Gitea plugin's Gitea release, or the branch pipeline's windows job and extract the ZIP. Copy Patina.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 Patina 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

cargo test --workspace --locked
cargo run --release -p patina-render -- input.wav processed.wav
cargo run --release -p patina-render -- input.wav delta.wav --delta
cargo run --release -p patina-render -- --demo /tmp/patina-demo.wav
cargo run --release -p patina-render -- --benchmark
python scripts/build-plugin.py --plugin patina --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

Gitea Actions cross-builds Windows binaries with MinGW on a Docker-capable runner labelled ubuntu-latest. Branch/PR workflows build a combined preview bundle; patina-v<version> tags check, build, and publish Patina independently. See release workflow for runner setup and release attachments. Actual runner execution remains to be verified on the Gitea instance.

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.

Existing projects and source layout

The CLAP ID io.storyboard.resonance-compressor, parameter IDs, and state format are unchanged. Replace the former plugin file with Patina.clap and rescan; avoid two scanned copies with the same ID. Host project recall still needs verification in FL Studio.

Source is grouped into plugins/patina/{core,ui,render,plugin}. See research, development, and the independent release workflow.