charon_audio/
lib.rs

1//! # Charon
2//!
3//! Modern Rust music source separation library using state-of-the-art ML inference.
4//!
5//! Charon provides a complete, pure-Rust implementation for audio source separation,
6//! inspired by Demucs but built with modern Rust ML frameworks (ONNX Runtime via `ort`,
7//! and HuggingFace Candle).
8//!
9//! ## Features
10//!
11//! - **Multiple ML Backends**: Support for ONNX Runtime (production-ready, hardware accelerated)
12//!   and Candle (pure Rust, flexible)
13//! - **Audio Processing**: Complete audio I/O with Symphonia (decode any format),
14//!   Rubato (high-quality resampling), and Hound (WAV encoding)
15//! - **Real-time Processing**: Support for real-time audio separation using CPAL
16//! - **Hardware Acceleration**: CUDA, TensorRT, Metal, Accelerate support
17//! - **Parallel Processing**: Multi-threaded audio processing with Rayon
18//!
19//! ## Quick Start
20//!
21//! ```rust,no_run
22//! use charon_audio::{Separator, SeparatorConfig};
23//!
24//! # fn main() -> anyhow::Result<()> {
25//! // Create a separator with default settings
26//! let separator = Separator::new(SeparatorConfig::default())?;
27//!
28//! // Separate an audio file
29//! let stems = separator.separate_file("input.mp3")?;
30//!
31//! // Save individual stems
32//! stems.save_all("output_dir")?;
33//! # Ok(())
34//! # }
35//! ```
36
37pub mod audio;
38pub mod error;
39pub mod model_zoo;
40pub mod models;
41pub mod performance;
42pub mod processor;
43pub mod realtime;
44pub mod separator;
45pub mod utils;
46
47#[cfg(target_arch = "wasm32")]
48pub mod wasm;
49
50// Re-export main types
51pub use audio::{AudioBuffer, AudioFile, AudioFormat};
52pub use error::{CharonError, Result};
53pub use model_zoo::{ModelMetadata, ModelZoo};
54pub use models::{ModelBackend, ModelConfig};
55pub use performance::{AudioKNN, BatchProcessor, PerformanceHint, PerformanceHints, SimdOps};
56pub use processor::{ProcessConfig, Processor};
57pub use realtime::RealtimeSeparator;
58pub use separator::{Separator, SeparatorConfig, Stems};
59
60#[cfg(target_arch = "wasm32")]
61pub use wasm::WasmSeparator;
62
63#[cfg(test)]
64mod tests {
65    #[test]
66    fn test_version() {
67        assert_eq!(env!("CARGO_PKG_VERSION"), "0.1.0");
68    }
69}