-
Notifications
You must be signed in to change notification settings - Fork 65
/
Copy pathfloor.rs
52 lines (45 loc) · 1.39 KB
/
floor.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
//! A floor interpolator implementation.
//!
//! ### Required Features
//!
//! - When using `dasp_interpolate`, this module requires the **floor** feature to be enabled.
//! - When using `dasp`, this module requires the **interpolate-floor** feature to be enabled.
use crate::Interpolator;
use dasp_frame::Frame;
use dasp_sample::Duplex;
/// Interpolator that rounds off any values to the previous value from the source.
///
/// ### Required Features
///
/// - When using `dasp_interpolate`, this item requires the **floor** feature to be enabled.
/// - When using `dasp`, this item requires the **interpolate-floor** feature to be enabled.
pub struct Floor<F> {
left: F,
}
impl<F> Floor<F> {
/// Create a new Floor Interpolator.
///
/// ### Required Features
///
/// - When using `dasp_interpolate`, this item requires the **floor** feature to be enabled.
/// - When using `dasp`, this item requires the **interpolate-floor** feature to be enabled.
pub fn new(left: F) -> Floor<F> {
Floor { left: left }
}
}
impl<F> Interpolator for Floor<F>
where
F: Frame,
F::Sample: Duplex<f64>,
{
type Frame = F;
fn interpolate(&self, _x: f64) -> Self::Frame {
self.left
}
fn next_source_frame(&mut self, source_frame: Self::Frame) {
self.left = source_frame;
}
fn reset(&mut self) {
self.left = Self::Frame::EQUILIBRIUM;
}
}