sevensense_audio/lib.rs
1//! # sevensense-audio
2//!
3//! Audio processing and segmentation for the 7sense bioacoustics platform.
4//!
5//! This crate provides:
6//! - Audio file decoding (WAV, FLAC, MP3, Ogg)
7//! - Sample rate conversion and normalization
8//! - Spectrogram generation
9//! - Segment detection and extraction
10//! - Audio quality analysis
11//!
12//! ## Architecture
13//!
14//! The crate follows Domain-Driven Design with clean architecture:
15//! - **Domain Layer**: Core entities (Recording, CallSegment) and repository traits
16//! - **Application Layer**: Use cases and services (AudioIngestionService)
17//! - **Infrastructure Layer**: Technical implementations (file readers, resamplers)
18//!
19//! ## Example Usage
20//!
21//! ```rust,no_run
22//! use sevensense_audio::application::AudioIngestionService;
23//! use sevensense_audio::infrastructure::{SymphoniaFileReader, RubatoResampler, EnergySegmenter};
24//! use std::path::Path;
25//! use std::sync::Arc;
26//!
27//! # async fn example() -> Result<(), Box<dyn std::error::Error>> {
28//! // Create infrastructure components
29//! let reader = Arc::new(SymphoniaFileReader::new());
30//! let resampler = Arc::new(RubatoResampler::new(32000)?);
31//! let segmenter = Arc::new(EnergySegmenter::default());
32//!
33//! // Create the service
34//! let service = AudioIngestionService::new(reader, resampler, segmenter);
35//!
36//! // Ingest an audio file
37//! let mut recording = service.ingest_file(Path::new("recording.wav")).await?;
38//!
39//! // Segment the recording to find calls
40//! let segments = service.segment_recording(&mut recording).await?;
41//! println!("Found {} call segments", segments.len());
42//! # Ok(())
43//! # }
44//! ```
45
46#![warn(missing_docs)]
47#![warn(clippy::all)]
48#![warn(clippy::pedantic)]
49#![allow(clippy::module_name_repetitions)]
50
51pub mod domain;
52pub mod application;
53pub mod infrastructure;
54pub mod spectrogram;
55
56// Re-export main types
57pub use domain::entities::{Recording, CallSegment, SignalQuality};
58pub use domain::repository::RecordingRepository;
59pub use application::services::AudioIngestionService;
60pub use application::error::{AudioError, AudioResult};
61pub use spectrogram::{MelSpectrogram, SpectrogramConfig};
62
63/// Standard target sample rate for all processing (32 kHz).
64pub const TARGET_SAMPLE_RATE: u32 = 32_000;
65
66/// Standard segment duration for analysis (5 seconds).
67pub const STANDARD_SEGMENT_DURATION_MS: u64 = 5_000;
68
69/// Crate version information.
70pub const VERSION: &str = env!("CARGO_PKG_VERSION");