Skip to content

Commit 66e8b83

Browse files
Merge pull request #164 from vaffeine/fix/issue-162-interpolator-reset
Add reset method to Interpolator
2 parents 465c104 + bcb937f commit 66e8b83

File tree

4 files changed

+22
-0
lines changed

4 files changed

+22
-0
lines changed

dasp_interpolate/src/floor.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,4 +45,8 @@ where
4545
fn next_source_frame(&mut self, source_frame: Self::Frame) {
4646
self.left = source_frame;
4747
}
48+
49+
fn reset(&mut self) {
50+
self.left = Self::Frame::EQUILIBRIUM;
51+
}
4852
}

dasp_interpolate/src/lib.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,9 @@ pub trait Interpolator {
4848

4949
/// To be called whenever the Interpolator value steps passed 1.0.
5050
fn next_source_frame(&mut self, source_frame: Self::Frame);
51+
52+
/// Resets the state of the interpolator.
53+
///
54+
/// Call this when there's a break in the continuity of the input data stream.
55+
fn reset(&mut self);
5156
}

dasp_interpolate/src/linear.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,4 +59,9 @@ where
5959
self.left = self.right;
6060
self.right = source_frame;
6161
}
62+
63+
fn reset(&mut self) {
64+
self.left = Self::Frame::EQUILIBRIUM;
65+
self.right = Self::Frame::EQUILIBRIUM;
66+
}
6267
}

dasp_interpolate/src/sinc/mod.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,4 +121,12 @@ where
121121
self.idx += 1;
122122
}
123123
}
124+
125+
fn reset(&mut self) {
126+
self.idx = 0;
127+
self.frames.set_first(0);
128+
for frame in self.frames.iter_mut() {
129+
*frame = Self::Frame::EQUILIBRIUM;
130+
}
131+
}
124132
}

0 commit comments

Comments
 (0)