1#![forbid(unsafe_code)]
2pub 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}