Skip to main content

speech_prep/
lib.rs

1//! # speech-prep
2//!
3//! Speech-focused audio preprocessing for Rust.
4//!
5//! - Voice activity detection (dual-metric: energy + spectral flux)
6//! - Audio format detection plus WAV decoding to 16kHz mono PCM
7//! - Preprocessing (DC removal, high-pass filter, noise reduction, normalization)
8//! - Speech-aligned chunking with overlap handling
9//! - Quality assessment metrics
10//!
11//! ## Usage
12//!
13//! ```rust
14//! use std::sync::Arc;
15//! use speech_prep::{NoopVadMetricsCollector, VadConfig, VadDetector, VadMetricsCollector};
16//!
17//! # fn main() -> Result<(), speech_prep::Error> {
18//! let config = VadConfig::default();
19//! let metrics: Arc<dyn VadMetricsCollector> = Arc::new(NoopVadMetricsCollector);
20//! let detector = VadDetector::new(config, metrics)?;
21//!
22//! let audio_samples = vec![0.0; 16_000];
23//! let _segments = detector.detect(&audio_samples)?;
24//! # Ok(())
25//! # }
26//! ```
27
28#![cfg_attr(test, allow(clippy::unwrap_used))]
29#![cfg_attr(test, allow(clippy::expect_used))]
30#![cfg_attr(test, allow(clippy::panic))]
31#![cfg_attr(test, allow(clippy::indexing_slicing))]
32#![cfg_attr(test, allow(clippy::print_stdout))]
33#![cfg_attr(test, allow(clippy::float_cmp))]
34
35pub mod buffer;
36pub mod chunker;
37pub mod converter;
38mod decoder;
39pub mod error;
40#[cfg(any(test, feature = "fixtures"))]
41pub mod fixtures;
42pub mod format;
43mod monitoring;
44pub mod pipeline;
45pub mod preprocessing;
46pub mod time;
47pub mod types;
48pub mod vad;
49
50pub use buffer::{AudioBuffer, AudioBufferMetadata};
51pub use chunker::{ChunkBoundary, Chunker, ChunkerConfig, ProcessedChunk};
52pub use error::{Error, Result};
53pub use monitoring::VADStats;
54pub use pipeline::{AudioPipelineCoordinator, ProcessingResult, StageLatencies};
55pub use preprocessing::{
56    DcHighPassFilter, HighpassOrder, NoiseReducer, NoiseReductionConfig, PreprocessingConfig,
57    VadContext,
58};
59pub use time::{AudioDuration, AudioTimestamp};
60pub use types::AudioChunk;
61pub use vad::{NoopVadMetricsCollector, SpeechChunk, VadConfig, VadDetector, VadMetricsCollector};