songrec/
lib.rs

1//! # SongRec Library
2//! 
3//! A Rust library for audio fingerprinting and song recognition using Shazam's algorithm.
4//! This library provides both a simple API for one-shot recognition and streaming recognition
5//! for continuous monitoring.
6//! 
7//! ## Features
8//! 
9//! - Audio fingerprinting using Shazam's algorithm
10//! - Song recognition via Shazam's API
11//! - Cross-platform audio recording
12//! - Multiple output formats (JSON, CSV, text)
13//! - Both library and CLI interfaces
14//! 
15//! ## Example
16//! 
17//! ```rust,no_run
18//! use songrec::{SongRec, Config};
19//! 
20//! let config = Config::default();
21//! let songrec = SongRec::new(config);
22//! 
23//! // Recognize a song from an audio file
24//! match songrec.recognize_from_file("song.mp3") {
25//!     Ok(result) => println!("Recognized: {}", result.song_name),
26//!     Err(e) => eprintln!("Error: {}", e),
27//! }
28//! ```
29
30pub mod config;
31pub mod recognition;
32pub mod audio;
33pub mod output;
34
35// Re-export fingerprinting modules
36pub mod fingerprinting {
37    pub mod algorithm;
38    pub mod signature_format;
39    pub mod communication;
40    pub mod user_agent;
41    pub mod hanning;
42}
43
44// Core API
45mod songrec;
46pub use songrec::{SongRec, RecognitionResult, RecognitionStream};
47pub use config::Config;
48pub use output::{OutputFormat, RecognitionOutput};
49
50// Re-export key types for convenience
51pub use fingerprinting::signature_format::DecodedSignature;
52pub use fingerprinting::algorithm::SignatureGenerator;
53
54/// Current version of the library
55pub const VERSION: &str = env!("CARGO_PKG_VERSION");
56
57/// Error types for the library
58#[derive(Debug)]
59pub enum SongRecError {
60    AudioError(String),
61    NetworkError(String),
62    FingerprintingError(String),
63    InvalidInput(String),
64    ConfigError(String),
65}
66
67impl std::fmt::Display for SongRecError {
68    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
69        match self {
70            SongRecError::AudioError(msg) => write!(f, "Audio error: {}", msg),
71            SongRecError::NetworkError(msg) => write!(f, "Network error: {}", msg),
72            SongRecError::FingerprintingError(msg) => write!(f, "Fingerprinting error: {}", msg),
73            SongRecError::InvalidInput(msg) => write!(f, "Invalid input: {}", msg),
74            SongRecError::ConfigError(msg) => write!(f, "Configuration error: {}", msg),
75        }
76    }
77}
78
79impl std::error::Error for SongRecError {}
80
81/// Result type for the library
82pub type Result<T> = std::result::Result<T, SongRecError>;