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}