Skip to main content

dasp_interpolate/
floor.rs

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