parent
42c42dff9b
commit
44b9a4cad0
|
@ -1,5 +1,7 @@
|
||||||
//! Different ranges for numeric parameters.
|
//! Different ranges for numeric parameters.
|
||||||
|
|
||||||
|
use crate::util;
|
||||||
|
|
||||||
/// A distribution for a floating point parameter's range. All range endpoints are inclusive.
|
/// A distribution for a floating point parameter's range. All range endpoints are inclusive.
|
||||||
#[derive(Debug, Clone, Copy)]
|
#[derive(Debug, Clone, Copy)]
|
||||||
pub enum FloatRange {
|
pub enum FloatRange {
|
||||||
|
@ -43,6 +45,19 @@ impl FloatRange {
|
||||||
2.0f32.powf(factor)
|
2.0f32.powf(factor)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Calculate a skew factor for [`FloatRange::Skewed`] that makes a linear gain parameter range
|
||||||
|
/// appear as if it was linear when formatted as decibels.
|
||||||
|
pub fn gain_skew_factor(min_db: f32, max_db: f32) -> f32 {
|
||||||
|
let min_gain = util::db_to_gain(min_db);
|
||||||
|
let max_gain = util::db_to_gain(max_db);
|
||||||
|
let middle_db = (max_db + min_db) / 2.0;
|
||||||
|
let middle_gain = util::db_to_gain(middle_db);
|
||||||
|
|
||||||
|
// Check the Skewed equation in the normalized function below, we need to solve the factor
|
||||||
|
// such that the a normalized value of 0.5 resolves to the middle of the range
|
||||||
|
0.5f32.log((middle_gain - min_gain) / (max_gain - min_gain))
|
||||||
|
}
|
||||||
|
|
||||||
/// Normalize a plain, unnormalized value. Will be clamped to the bounds of the range if the
|
/// Normalize a plain, unnormalized value. Will be clamped to the bounds of the range if the
|
||||||
/// normalized value exceeds `[0, 1]`.
|
/// normalized value exceeds `[0, 1]`.
|
||||||
pub fn normalize(&self, plain: f32) -> f32 {
|
pub fn normalize(&self, plain: f32) -> f32 {
|
||||||
|
|
Loading…
Reference in a new issue