Skip to content

Commit bca3fde

Browse files
committed
clamp some parameters to valid values
1 parent ab9546a commit bca3fde

File tree

9 files changed

+17
-12
lines changed

9 files changed

+17
-12
lines changed

changelog.md

+4
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
# v0.10.3 - February 9, 2025
2+
3+
- Clamp some parameters to valid values
4+
15
# v0.10.2 - January 17, 2025
26

37
- Add `Static/StreamingSoundData::unsliced_duration` (thanks @Roms1383!)

crates/kira/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "kira"
3-
version = "0.10.2"
3+
version = "0.10.3"
44
authors = ["Andrew Minnich <aminnich3@gmail.com>"]
55
edition = "2021"
66
license = "MIT OR Apache-2.0"

crates/kira/src/effect/compressor.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ impl Effect for Compressor {
8686
for (i, frame) in input.iter_mut().enumerate() {
8787
let time_in_chunk = (i + 1) as f64 / num_frames as f64;
8888
let makeup_gain = self.makeup_gain.interpolated_value(time_in_chunk);
89-
let mix = self.mix.interpolated_value(time_in_chunk);
89+
let mix = self.mix.interpolated_value(time_in_chunk).0.clamp(0.0, 1.0);
9090

9191
let input_decibels = [
9292
20.0 * frame.left.abs().log10(),
@@ -114,7 +114,7 @@ impl Effect for Compressor {
114114
right: amplitude[1] * frame.right,
115115
} * makeup_gain_linear;
116116

117-
*frame = output * mix.0.sqrt() + *frame * (1.0 - mix.0).sqrt()
117+
*frame = output * mix.sqrt() + *frame * (1.0 - mix).sqrt()
118118
}
119119
}
120120
}

crates/kira/src/effect/delay.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,8 @@ impl Effect for Delay {
101101
// output mix of input and read buffer
102102
for (i, frame) in input.iter_mut().enumerate() {
103103
let time_in_chunk = (i + 1) as f64 / num_frames as f64;
104-
let mix = self.mix.interpolated_value(time_in_chunk);
105-
*frame = self.temp_buffer[i] * mix.0.sqrt() + *frame * (1.0 - mix.0).sqrt()
104+
let mix = self.mix.interpolated_value(time_in_chunk).0.clamp(0.0, 1.0);
105+
*frame = self.temp_buffer[i] * mix.sqrt() + *frame * (1.0 - mix).sqrt()
106106
}
107107
}
108108
}

crates/kira/src/effect/distortion.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ impl Effect for Distortion {
6262
for (i, frame) in input.iter_mut().enumerate() {
6363
let time_in_chunk = (i + 1) as f64 / num_frames as f64;
6464
let drive = self.drive.interpolated_value(time_in_chunk).as_amplitude();
65-
let mix = self.mix.interpolated_value(time_in_chunk);
65+
let mix = self.mix.interpolated_value(time_in_chunk).0.clamp(0.0, 1.0);
6666

6767
let mut output = *frame * drive;
6868
output = match self.kind {
@@ -76,7 +76,7 @@ impl Effect for Distortion {
7676
};
7777
output /= drive;
7878

79-
*frame = output * mix.0.sqrt() + *frame * (1.0 - mix.0).sqrt()
79+
*frame = output * mix.sqrt() + *frame * (1.0 - mix).sqrt()
8080
}
8181
}
8282
}

crates/kira/src/effect/eq_filter.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ impl Coefficients {
111111
fn calculate(kind: EqFilterKind, frequency: f64, q: f64, gain: Decibels, dt: f64) -> Self {
112112
// In my testing, the filter goes unstable when the frequency exceeds half the sample rate,
113113
// so I'm clamping this value to 0.5
114-
let relative_frequency = (frequency * dt).clamp(0.0, 0.5);
114+
let relative_frequency = (frequency * dt).clamp(0.0001, 0.5);
115115
let q = q.max(MIN_Q);
116116
match kind {
117117
EqFilterKind::Bell => {

crates/kira/src/effect/filter.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -81,10 +81,10 @@ impl Effect for Filter {
8181
.resonance
8282
.interpolated_value(time_in_chunk)
8383
.clamp(0.0, 1.0);
84-
let mix = self.mix.interpolated_value(time_in_chunk).0;
84+
let mix = self.mix.interpolated_value(time_in_chunk).0.clamp(0.0, 1.0);
8585

8686
let sample_rate = 1.0 / dt;
87-
let g = (PI * (cutoff / sample_rate)).tan();
87+
let g = (PI * (cutoff / sample_rate).clamp(0.0001, 0.5)).tan();
8888
let k = 2.0 - (1.9 * resonance);
8989
let a1 = 1.0 / (1.0 + (g * (g + k)));
9090
let a2 = g * a1;

crates/kira/src/effect/reverb.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ impl Effect for Reverb {
155155
for (i, frame) in input.iter_mut().enumerate() {
156156
let time_in_chunk = (i + 1) as f64 / num_frames as f64;
157157
let stereo_width = self.stereo_width.interpolated_value(time_in_chunk) as f32;
158-
let mix = self.mix.interpolated_value(time_in_chunk).0;
158+
let mix = self.mix.interpolated_value(time_in_chunk).0.clamp(0.0, 1.0);
159159

160160
let mut output = Frame::ZERO;
161161
let mono_input = (frame.left + frame.right) * GAIN;

crates/kira/src/frame.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ impl Frame {
4949
if panning == Panning::CENTER {
5050
return self;
5151
}
52-
let left_right_mix = (panning.0 + 1.0) * 0.5;
52+
let panning = panning.0.clamp(-1.0, 1.0);
53+
let left_right_mix = (panning + 1.0) * 0.5;
5354
Self::new(
5455
self.left * (1.0 - left_right_mix).sqrt(),
5556
self.right * left_right_mix.sqrt(),

0 commit comments

Comments
 (0)