118 return std::isfinite(candidate) ? candidate : current;
136 return 20.0 * std::log10(std::abs(amplitude) + epsilon);
146inline double power_db(
double mean_square,
double epsilon) {
147 return 10.0 * std::log10(mean_square + epsilon);
156 if (!(tau_seconds > 0.0) || !(sample_rate > 0.0))
return 0.0;
157 return std::exp(-1.0 / (tau_seconds * sample_rate));
169inline double knee_term_db(
double over_db,
double knee_db,
double slope) {
170 const double t = over_db + knee_db * 0.5;
171 return (slope - 1.0) * t * t / (2.0 * knee_db);
195 const double over = input_db - threshold_db;
196 if (2.0 * over < -knee_db)
return input_db;
197 if (knee_db > 0.0 && 2.0 * std::abs(over) <= knee_db)
199 return threshold_db + over /
ratio;
210 if (2.0 * over_db <= -knee_db)
return 0.0;
211 if (2.0 * over_db < knee_db)
return knee_term_db(over_db, knee_db, slope);
212 }
else if (over_db <= 0.0) {
215 return (slope - 1.0) * over_db;
Definition dynamics_core.hpp:112
double soft_knee_output_db(double input_db, double threshold_db, double knee_db, double ratio)
The characteristic in the OUTPUT-LEVEL domain: input dB → output dB.
Definition dynamics_core.hpp:193
double one_pole_retain(double tau_seconds, double sample_rate)
α = exp(−1/(τ·fs)) — the RETAIN coefficient (see the file doc block).
Definition dynamics_core.hpp:155
double knee_term_db(double over_db, double knee_db, double slope)
The knee branch's quadratic term: the dB the characteristic bends away from unity inside the knee,...
Definition dynamics_core.hpp:169
double soft_knee_reduction_db(double over_db, double knee_db, double slope)
The same characteristic in the GAIN-REDUCTION domain: dB over threshold → reduction in dB,...
Definition dynamics_core.hpp:208
double power_db(double mean_square, double epsilon)
A mean square → dB, floored by an addend.
Definition dynamics_core.hpp:146
double retain_finite(double candidate, double current) noexcept
Control setters retain their last valid value when automation supplies a non-finite sample.
Definition dynamics_core.hpp:117
double amplitude_db(double amplitude, double epsilon)
An amplitude → dB, floored by an ADDEND rather than a max().
Definition dynamics_core.hpp:135
constexpr double kLevelEpsilon
Level-conversion floor, guarding log10(0).
Definition dynamics_core.hpp:125
@ ratio
base_frequency_hz * ratio.
Definition fm_operator_engine.hpp:20
@ e
Definition formant_filter_bank.hpp:20