Fix NaNs in negative out of bounds skewed params
This would result in a NaN, and the clamping wouldn't catch that.
This commit is contained in:
parent
c1d72f0e80
commit
c7f5cd1cec
2 changed files with 5 additions and 5 deletions
|
@ -83,7 +83,6 @@ struct DiopserParams {
|
||||||
|
|
||||||
/// The filter's center frequqency. When this is applied, the filters are spread around this
|
/// The filter's center frequqency. When this is applied, the filters are spread around this
|
||||||
/// frequency.
|
/// frequency.
|
||||||
/// FIXME: Entering -3 or another invalid value will set the parameter to NaN
|
|
||||||
#[id = "cutoff"]
|
#[id = "cutoff"]
|
||||||
filter_frequency: FloatParam,
|
filter_frequency: FloatParam,
|
||||||
/// The Q parameter for the filters.
|
/// The Q parameter for the filters.
|
||||||
|
|
|
@ -43,8 +43,10 @@ impl FloatRange {
|
||||||
/// normalized value exceeds `[0, 1]`.
|
/// normalized value exceeds `[0, 1]`.
|
||||||
pub fn normalize(&self, plain: f32) -> f32 {
|
pub fn normalize(&self, plain: f32) -> f32 {
|
||||||
match &self {
|
match &self {
|
||||||
FloatRange::Linear { min, max } => (plain - min) / (max - min),
|
FloatRange::Linear { min, max } => (plain.clamp(*min, *max) - min) / (max - min),
|
||||||
FloatRange::Skewed { min, max, factor } => ((plain - min) / (max - min)).powf(*factor),
|
FloatRange::Skewed { min, max, factor } => {
|
||||||
|
((plain.clamp(*min, *max) - min) / (max - min)).powf(*factor)
|
||||||
|
}
|
||||||
FloatRange::SymmetricalSkewed {
|
FloatRange::SymmetricalSkewed {
|
||||||
min,
|
min,
|
||||||
max,
|
max,
|
||||||
|
@ -53,7 +55,7 @@ impl FloatRange {
|
||||||
} => {
|
} => {
|
||||||
// There's probably a much faster equivalent way to write this. Also, I have no clue
|
// There's probably a much faster equivalent way to write this. Also, I have no clue
|
||||||
// how I managed to implement this correctly on the first try.
|
// how I managed to implement this correctly on the first try.
|
||||||
let unscaled_proportion = (plain - min) / (max - min);
|
let unscaled_proportion = (plain.clamp(*min, *max) - min) / (max - min);
|
||||||
let center_proportion = (center - min) / (max - min);
|
let center_proportion = (center - min) / (max - min);
|
||||||
if unscaled_proportion > center_proportion {
|
if unscaled_proportion > center_proportion {
|
||||||
// The part above the center gets normalized to a [0, 1] range, skewed, and then
|
// The part above the center gets normalized to a [0, 1] range, skewed, and then
|
||||||
|
@ -72,7 +74,6 @@ impl FloatRange {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.clamp(0.0, 1.0)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Unnormalize a normalized value. Will be clamped to `[0, 1]` if the plain, unnormalized value
|
/// Unnormalize a normalized value. Will be clamped to `[0, 1]` if the plain, unnormalized value
|
||||||
|
|
Loading…
Add table
Reference in a new issue