1#![warn(missing_docs)]
4
5mod chip_emulator;
6mod config;
7pub mod dsp;
9pub mod emulators;
11mod error;
12mod lofi_chip_source;
13mod lofi_processor;
14
15pub use chip_emulator::ChipEmulator;
17pub use config::{ClassicSystem, HardwareEmulation, LofiConfig};
18pub use emulators::{AkaiS900Emulator, Ay38910Chip, NesChip};
19pub use error::{LofiError, LofiResult};
20pub use lofi_chip_source::LofiChipSource;
21pub use lofi_processor::LofiProcessor;
22
23pub use rill_core::traits::Node;
25
26#[cfg(test)]
27mod tests {
28 use super::*;
29
30 #[test]
31 fn test_quantization() {
32 let test_signal: Vec<f32> = vec![0.1, 0.5, 0.9, -0.3, -0.8];
33
34 let quantized_8bit: Vec<f32> = test_signal
35 .iter()
36 .map(|&s| dsp::quantization::bitcrush(s, 8, false))
37 .collect();
38
39 let quantized_12bit: Vec<f32> = test_signal
40 .iter()
41 .map(|&s| dsp::quantization::bitcrush(s, 12, false))
42 .collect();
43
44 let error_8bit: f32 = test_signal
45 .iter()
46 .zip(quantized_8bit.iter())
47 .map(|(&a, &b)| (a - b).abs())
48 .sum();
49
50 let error_12bit: f32 = test_signal
51 .iter()
52 .zip(quantized_12bit.iter())
53 .map(|(&a, &b)| (a - b).abs())
54 .sum();
55
56 assert!(error_12bit < error_8bit);
57 }
58}