feat: bipolar mid-bulge low-curve anchored at silence and the knee

Rework Low Curve from a one-sided saturating bend into a bipolar mid-bulge: the
low region is anchored at BOTH the silence floor and the knee, Low Slope tilts
the straight line between them, and Low Curve (-1..1) bows that line in the
middle (4*t*(1-t), peak +/-12 dB) without moving either endpoint. Positive
bulges up (boost the quiet middle), negative down (suppress). Still serial.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Mikkeli Matlock
2026-06-26 21:19:04 +09:00
parent a4c542b2d9
commit 45735f71f7
2 changed files with 36 additions and 31 deletions
+3 -2
View File
@@ -71,7 +71,8 @@ pub struct CompressorParams {
/// Low shaper slope at the silence floor (1 = unity; >1 fans up/boost, <1 fans down/cut).
#[id = "lowslope"]
pub low_slope: FloatParam,
/// Low shaper curvature (0 = straight line, 1 = max bend toward a bounded saturation).
/// Low shaper curvature (1..1): bipolar mid-bulge, 0 = straight. +bulges up (boost quiet
/// middle), bulges down (suppress). Endpoints (silence + knee) stay fixed.
#[id = "lowcurve"]
pub low_curve: FloatParam,
#[id = "attack"]
@@ -182,7 +183,7 @@ impl Default for CompressorParams {
.with_smoother(SmoothingStyle::Linear(20.0))
.with_value_to_string(formatters::v2s_f32_rounded(2)),
low_curve: FloatParam::new("Low Curve", 0.0, FloatRange::Linear { min: 0.0, max: 1.0 })
low_curve: FloatParam::new("Low Curve", 0.0, FloatRange::Linear { min: -1.0, max: 1.0 })
.with_smoother(SmoothingStyle::Linear(20.0))
.with_value_to_string(formatters::v2s_f32_percentage(0))
.with_string_to_value(formatters::s2v_f32_percentage()),