Skip to main content

speech_prep/preprocessing/
mod.rs

1//! Audio preprocessing module for clean, analysis-ready audio.
2//!
3//! This module provides the preprocessing and quality foundation for the crate.
4//!
5//! # Components
6//!
7//! - **DC Offset Removal**: Removes DC bias using exponential moving average
8//!   (EMA)
9//! - **High-Pass Filtering**: Attenuates low-frequency rumble (<80 Hz) using
10//!   Butterworth biquad filters
11//! - **Noise Reduction**: Spectral subtraction with adaptive noise profiling
12//!   (≥6 dB SNR improvement)
13//! - **Chunk Continuity**: Maintains filter state across streaming boundaries
14//!
15//! # Performance
16//!
17//! - **DC/High-Pass**: <2ms per 500ms chunk (achieved: 0.014-0.127ms)
18//! - **Noise Reduction**: <15ms per 500ms chunk (expected: ~7ms)
19//! - **Optimization**: Precomputed coefficients, zero-allocation inner loops
20//!
21//! # Example Pipeline
22//!
23//! ```rust,no_run
24//! use speech_prep::preprocessing::{
25//!     DcHighPassFilter,
26//!     NoiseReducer,
27//!     NoiseReductionConfig,
28//!     PreprocessingConfig,
29//!     VadContext,
30//! };
31//!
32//! # fn main() -> speech_prep::error::Result<()> {
33//! // Step 1: DC removal + high-pass
34//! let dc_config = PreprocessingConfig::default();
35//! let mut dc_filter = DcHighPassFilter::new(dc_config)?;
36//! let raw_samples = vec![0.0; 8000];
37//! let dc_clean = dc_filter.process(&raw_samples, None)?;
38//!
39//! // Step 2: Noise reduction
40//! let noise_config = NoiseReductionConfig::default();
41//! let mut noise_reducer = NoiseReducer::new(noise_config)?;
42//! let vad_ctx = VadContext { is_silence: false };
43//! let denoised = noise_reducer.reduce(&dc_clean, Some(vad_ctx))?;
44//! # Ok(())
45//! # }
46//! ```
47
48pub mod dc_highpass;
49pub mod noise_reduction;
50pub mod normalization;
51pub mod quality;
52
53pub use dc_highpass::{DcHighPassFilter, HighpassOrder, PreprocessingConfig, VadContext};
54pub use noise_reduction::{NoiseReducer, NoiseReductionConfig};
55pub use normalization::Normalizer;
56pub use quality::{QualityAssessor, QualityMetrics};