Skip to main content

use_signal/
lib.rs

1#![forbid(unsafe_code)]
2//! Thin facade for the `use-signal` workspace.
3//!
4//! The crate reexports the focused signal-processing crates directly so
5//! consumers can opt into one dependency while still using the smaller APIs.
6//!
7//! # Examples
8//!
9//! ```rust
10//! use use_signal::*;
11//!
12//! let sample = Sample::new(-0.25).unwrap();
13//! let windowed = apply_window(&[1.0, 2.0, 3.0], WindowKind::Hann).unwrap();
14//! let filtered = moving_average_filter(&windowed, 2).unwrap();
15//!
16//! assert_eq!(sample.abs(), 0.25);
17//! assert_eq!(peak_amplitude(&filtered).unwrap(), 1.0);
18//! ```
19
20pub use use_amplitude;
21pub use use_amplitude::*;
22pub use use_frequency;
23pub use use_frequency::*;
24pub use use_sample;
25pub use use_sample::*;
26pub use use_signal_energy;
27pub use use_signal_energy::*;
28pub use use_signal_normalize;
29pub use use_signal_normalize::*;
30pub use use_signal_window;
31pub use use_signal_window::*;
32pub use use_simple_filter;
33pub use use_simple_filter::*;
34pub use use_zero_crossing;
35pub use use_zero_crossing::*;
36
37#[cfg(test)]
38mod tests {
39    use super::{
40        apply_window, moving_average_filter, normalize_peak, peak_amplitude, signal_energy,
41        zero_crossing_count, Frequency, Sample, WindowKind,
42    };
43
44    #[test]
45    fn facade_reexports_workspace_apis() {
46        let sample = Sample::new(-0.25).unwrap();
47        assert_eq!(sample.abs(), 0.25);
48
49        let frequency = Frequency::new(440.0).unwrap();
50        assert!(frequency.period_seconds() > 0.0);
51
52        let windowed = apply_window(&[1.0, 2.0, 3.0], WindowKind::Hann).unwrap();
53        assert_eq!(windowed.len(), 3);
54
55        let normalized = normalize_peak(&[-2.0, 0.0, 1.0]).unwrap();
56        assert_eq!(peak_amplitude(&normalized).unwrap(), 1.0);
57
58        assert_eq!(signal_energy(&[1.0, -1.0]).unwrap(), 2.0);
59        assert_eq!(zero_crossing_count(&[-1.0, 1.0, -1.0]), 2);
60
61        let filtered = moving_average_filter(&[1.0, 3.0, 5.0], 2).unwrap();
62        assert_eq!(filtered, vec![1.0, 2.0, 4.0]);
63    }
64}