diff --git a/plugins/examples/sine/src/lib.rs b/plugins/examples/sine/src/lib.rs index 6b7c8fe9..1a5b286d 100644 --- a/plugins/examples/sine/src/lib.rs +++ b/plugins/examples/sine/src/lib.rs @@ -187,7 +187,7 @@ impl Plugin for Sine { }; for sample in channel_samples { - *sample = sine * util::db_to_gain(gain); + *sample = sine * util::db_to_gain_fast(gain); } } diff --git a/plugins/spectral_compressor/src/compressor_bank.rs b/plugins/spectral_compressor/src/compressor_bank.rs index 7a66536f..ef728157 100644 --- a/plugins/spectral_compressor/src/compressor_bank.rs +++ b/plugins/spectral_compressor/src/compressor_bank.rs @@ -881,9 +881,9 @@ impl CompressorBank { // This threshold must never reach zero as it's used in divisions to get a gain ratio // above the threshold - *threshold = util::db_to_gain(threshold_db).max(f32::EPSILON); - *knee_start = util::db_to_gain(knee_start_db).max(f32::EPSILON); - *knee_end = util::db_to_gain(knee_end_db).max(f32::EPSILON); + *threshold = util::db_to_gain_fast(threshold_db); + *knee_start = util::db_to_gain_fast(knee_start_db); + *knee_end = util::db_to_gain_fast(knee_end_db); } } @@ -910,9 +910,9 @@ impl CompressorBank { let knee_end_db = threshold_db + (params.compressors.upwards.knee_width_db.value() / 2.0); - *threshold = util::db_to_gain(threshold_db).max(f32::EPSILON); - *knee_start = util::db_to_gain(knee_start_db).max(f32::EPSILON); - *knee_end = util::db_to_gain(knee_end_db).max(f32::EPSILON); + *threshold = util::db_to_gain_fast(threshold_db); + *knee_start = util::db_to_gain_fast(knee_start_db); + *knee_end = util::db_to_gain_fast(knee_end_db); } } diff --git a/src/util.rs b/src/util.rs index 227bf378..c36c912a 100644 --- a/src/util.rs +++ b/src/util.rs @@ -43,8 +43,9 @@ pub fn gain_to_db(gain: f32) -> f32 { } /// An approximation of [`db_to_gain()`] using `exp()`. Does not treat values below -/// [`MINUS_INFINITY_DB`] as 0.0 gain to avoid branching. Will run faster on most architectures, but -/// the result may be slightly different. +/// [`MINUS_INFINITY_DB`] as 0.0 gain to avoid branching. As a result this function will thus also +/// never return 0.0 for normal input values. Will run faster on most architectures, but the result +/// may be slightly different. #[inline] pub fn db_to_gain_fast(dbs: f32) -> f32 { const CONVERSION_FACTOR: f32 = std::f32::consts::LN_10 / 20.0;