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