ferraus_analysis/lib.rs
1//! # ferraus-analysis
2//!
3//! Reusable audio analysis. Every public function takes an [`AudioBuffer`] and returns a
4//! serde-serialisable struct, so other crates (mastering, stretch, delay sync,
5//! transcription, scores) reuse exactly the numbers the `analyze` commands print.
6//!
7//! | Module | Main entry points |
8//! | --- | --- |
9//! | [`tempo`] | [`detect_tempo`] → [`TempoResult`]; [`tempo::onset_envelope`], [`tempo::transient_density`] |
10//! | [`loudness`] | [`loudness()`] / [`loudness_with`] → [`LoudnessReport`]; [`true_peak`], [`loudness::integrated_lufs`], [`loudness::loudness_outliers`] |
11//! | [`spectrum`] | [`spectrum::spectrum`], [`spectrum::third_octave_levels`], [`spectrum::tone_balance`], [`spectrum::tone_balance_vs_curve`] |
12//! | [`stereo`] | [`stereo::stereo_analysis`] → [`stereo::StereoReport`]; [`stereo::correlation`], [`stereo::low_correlation`] |
13//! | [`levels`] | [`levels::detect_silence`], [`levels::detect_clipping`], [`levels::stats`], [`levels::crest_factor_db`] |
14//! | [`chords`] | [`detect_chords`] → [`ChordResult`]; [`chords::chromagram`] |
15//! | [`compare`] | [`compare::compare`] → [`compare::CompareReport`]; [`compare::similarity`], [`compare::mfcc`] |
16//! | [`problems`] | [`problems::diagnose`] → [`problems::ProblemsReport`] and the individual detectors |
17//! | [`mastering`] | [`mastering::dynamics`], [`mastering::looks_mastered`], [`mastering::mastering_analysis`] |
18//!
19//! Loudness values that cannot be measured are `-inf` in Rust and `null` in JSON.
20
21pub mod chords;
22pub mod compare;
23pub mod levels;
24pub mod loudness;
25pub mod mastering;
26mod ops;
27pub mod problems;
28pub mod spectrum;
29pub mod stereo;
30pub mod tempo;
31pub mod util;
32
33pub use chords::{detect_chords, ChordOptions, ChordResult, ChordSegment};
34pub use compare::{compare, similarity, CompareOptions, CompareReport, SimilarityReport};
35pub use ferraus_core::AudioBuffer;
36pub use levels::{detect_clipping, detect_silence, stats, ClippingReport, SilenceReport, StatsReport};
37pub use loudness::{loudness, loudness_with, true_peak, LoudnessReport, LoudnessTimeline};
38pub use mastering::{mastering_analysis, DynamicsReport, MasteredHeuristic, MasteringAnalysis};
39pub use problems::{diagnose, Problem, ProblemsReport, Severity};
40pub use spectrum::{BandLevel, Resolution, SpectrumReport, ToneBalance};
41pub use stereo::{stereo_analysis, StereoReport};
42pub use tempo::{detect_tempo, TempoOptions, TempoResult};
43
44use ferraus_core::OpSpec;
45
46/// Ops this crate contributes to the command registry: `analyze tempo|loudness|silence|
47/// spectrum|clipping|chords|similarity|problems|stats|stereo` and `compare`.
48pub fn ops() -> Vec<OpSpec> {
49 ops::ops()
50}