voice_toolkit/
lib.rs

1//! # Voice Toolkit - Rust 语音处理工具库
2//!
3//! `voice-toolkit` 是一个功能强大的 Rust 语音处理工具库,提供统一的接口来处理语音转文本(STT)、
4//! 文本转语音(TTS)和音频处理任务。该库基于 Whisper 模型提供高质量的语音识别功能,
5//! 支持多种音频格式转换和实时语音处理。
6//!
7//! ## 主要特性
8//!
9//! - **语音转文本 (STT)**: 基于 OpenAI Whisper 模型的高质量语音识别
10//! - **文本转语音 (TTS)**: 基于 Index-TTS 的语音合成功能
11//! - **音频处理**: 支持多种音频格式的转换和处理
12//! - **实时流式处理**: 支持实时音频流的转录
13//! - **语音活动检测 (VAD)**: 智能检测语音片段,提高处理效率
14//! - **跨平台支持**: 支持 Windows、macOS 和 Linux
15//! - **GPU 加速**: 可选的 CUDA、Vulkan 和 Metal 加速支持
16//!
17//! ## 快速开始
18//!
19//! ### 基本依赖
20//!
21//! 在 `Cargo.toml` 中添加依赖:
22//!
23//! ```toml
24//! [dependencies]
25//! voice-toolkit = { version = "0.15.0", features = ["stt", "tts", "audio"] }
26//! ```
27//!
28//! ### 语音转文本示例
29//!
30//! ```rust
31//! use voice_toolkit::transcribe_file_unified;
32//!
33//! #[tokio::main]
34//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
35//!     let model_path = "models/ggml-base.bin";
36//!     let audio_path = "audio/hello.wav";
37//!     
38//!     let result = transcribe_file_unified(model_path, audio_path).await?;
39//!     println!("转录结果: {}", result.text);
40//!     
41//!     Ok(())
42//! }
43//! ```
44//!
45//! ### 音频格式转换示例
46//!
47//! ```rust
48//! use voice_toolkit::audio;
49//!
50//! #[tokio::main]
51//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
52//!     let input_path = "audio/input.mp3";
53//!     let output_path = "audio/output.wav";
54//!     
55//!     // 将 MP3 转换为 Whisper 兼容的 WAV 格式
56//!     audio::convert_to_whisper_format(input_path, output_path).await?;
57//!     println!("转换完成: {}", output_path);
58//!     
59//!     Ok(())
60//! }
61//! ```
62//!
63//! ### 文本转语音示例
64//!
65//! ```rust
66//! use voice_toolkit::tts;
67//!
68//! #[tokio::main]
69//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
70//!     let text = "你好,世界!欢迎使用语音工具库。";
71//!     let output_path = "output/hello.wav";
72//!     
73//!     // 使用 Index-TTS 生成语音
74//!     tts::synthesize_text(text, output_path, None).await?;
75//!     println!("语音合成完成: {}", output_path);
76//!     
77//!     Ok(())
78//! }
79//! ```
80//!
81//! ## 功能特性
82//!
83//! ### STT 功能
84//! - 支持多种音频格式:WAV、MP3、FLAC、M4A、OGG 等
85//! - 自动音频格式转换和预处理
86//! - 支持实时流式转录
87//! - 集成语音活动检测 (VAD)
88//! - 性能监控和基准测试
89//!
90//! ### TTS 功能
91//! - 基于 Index-TTS 的高质量语音合成
92//! - 支持多种输出格式
93//! - 可扩展的引擎架构
94//!
95//! ### 音频处理功能
96//! - 音频格式转换
97//! - 音频重采样
98//! - 元数据提取
99//! - Whisper 兼容格式转换
100//!
101//! ## 特性标志
102//!
103//! 该库使用特性标志来控制功能模块的启用:
104//!
105//! - `stt`: 启用语音转文本功能(默认启用)
106//! - `tts`: 启用文本转语音功能
107//! - `audio`: 启用音频处理功能(默认启用)
108//! - `streaming`: 启用实时流式处理(需要 `stt`)
109//! - `cuda`: 启用 CUDA GPU 加速(需要 `stt`)
110//! - `vulkan`: 启用 Vulkan GPU 加速(需要 `stt`)
111//! - `metal`: 启用 Metal GPU 加速(需要 `stt`)
112//!
113//! ## 系统要求
114//!
115//! - **Rust**: 1.70 或更高版本
116//! - **FFmpeg**: 用于音频处理
117//!   - macOS: `brew install ffmpeg`
118//!   - Ubuntu: `sudo apt-get install ffmpeg`
119//!   - Windows: 使用 vcpkg 安装
120//! - **Whisper 模型**: 需要下载 Whisper 模型文件(.bin 格式)
121//!
122//! ## 错误处理
123//!
124//! 该库使用统一的错误处理机制,所有函数都返回 `Result<T, Error>` 类型,
125//! 其中 `Error` 是一个枚举类型,包含了所有可能的错误情况。
126//!
127//! ## 性能考虑
128//!
129//! - 首次加载模型时会有一定的延迟
130//! - 建议在长期运行的应用中复用模型实例
131//! - 使用 GPU 加速可以显著提高处理速度
132//! - 对于实时应用,建议使用流式处理功能
133//!
134//! ## 许可证
135//!
136//! 本项目采用 MIT 或 Apache 2.0 许可证。详情请参阅 [LICENSE](LICENSE) 文件。
137//!
138//! ## 贡献
139//!
140//! 欢迎提交 Issue 和 Pull Request!请参阅 [CONTRIBUTING.md](CONTRIBUTING.md) 了解详情。
141//!
142//! ## 更新日志
143//!
144//! 请参阅 [CHANGELOG.md](CHANGELOG.md) 了解版本更新详情。
145
146// 导入错误处理模块
147mod error;
148pub use error::{Error, Result};
149
150// 重新导出各个模块
151/// 语音转文本 (STT) 模块
152/// 
153/// 该模块提供基于 OpenAI Whisper 模型的语音识别功能,包括:
154/// - 文件转录:处理音频文件并转换为文本
155/// - 流式转录:实时处理音频流
156/// - 语音活动检测 (VAD):智能检测语音片段
157/// - 性能监控:提供转录性能指标
158#[cfg(feature = "stt")]
159pub use rs_voice_toolkit_stt as stt;
160
161/// 音频处理模块
162/// 
163/// 该模块提供音频文件的格式转换、重采样和元数据提取功能,包括:
164/// - 多格式支持:WAV、MP3、FLAC、M4A、OGG 等
165/// - 音频重采样:支持多种采样率转换
166/// - 元数据提取:获取音频文件的详细信息
167/// - Whisper 兼容格式:自动转换为 Whisper 识别所需的格式
168#[cfg(feature = "audio")]
169pub use rs_voice_toolkit_audio as audio;
170
171/// 文本转语音 (TTS) 模块
172/// 
173/// 该模块提供文本到语音的转换功能,包括:
174/// - Index-TTS 引擎:基于 Index-TTS 的高质量语音合成
175/// - 多种输出格式:支持 WAV、MP3 等格式
176/// - 可扩展架构:支持多种 TTS 引擎
177/// - 灵活配置:支持语音速度、音调等参数调整
178#[cfg(feature = "tts")]
179pub use rs_voice_toolkit_tts as tts;
180
181// 重新导出常用的类型和函数
182/// 重新导出文件转录函数
183/// 
184/// 这是 STT 模块的核心函数,用于转录音频文件。
185/// 详见 [`stt::transcribe_file`] 函数文档。
186#[cfg(feature = "stt")]
187pub use rs_voice_toolkit_stt::transcribe_file;
188
189/// 重新导出流式转录器
190/// 
191/// 用于实时音频流转录的结构体。
192/// 详见 [`stt::streaming::StreamingTranscriber`] 结构体文档。
193#[cfg(all(feature = "stt", feature = "streaming"))]
194pub use rs_voice_toolkit_stt::streaming::StreamingTranscriber;
195
196// 统一错误处理包装函数
197#[cfg(feature = "stt")]
198mod stt_wrappers {
199    use super::*;
200    
201    /// 统一错误处理的文件转录函数
202    /// 
203    /// 这是一个包装函数,提供了统一的错误处理接口。它会调用底层的 `stt::transcribe_file`
204    /// 函数,并将错误转换为统一的 `Error` 类型。
205    /// 
206    /// ## 参数
207    /// 
208    /// * `model_path` - Whisper 模型文件的路径
209    /// * `audio_path` - 要转录的音频文件路径
210    /// 
211    /// ## 返回值
212    /// 
213    /// 返回 `Result<TranscriptionResult, Error>`,其中:
214    /// - `Ok(TranscriptionResult)` 包含转录结果,包括文本、时间戳和置信度
215    /// - `Err(Error)` 包含错误信息,可能是模型加载错误、音频处理错误等
216    /// 
217    /// ## 示例
218    /// 
219    /// ```rust
220    /// use voice_toolkit::transcribe_file_unified;
221    /// 
222    /// #[tokio::main]
223    /// async fn main() -> Result<(), Box<dyn std::error::Error>> {
224    ///     let model_path = "models/ggml-base.bin";
225    ///     let audio_path = "audio/hello.wav";
226    ///     
227    ///     match transcribe_file_unified(model_path, audio_path).await {
228    ///         Ok(result) => {
229    ///             println!("转录结果: {}", result.text);
230    ///             println!("处理时间: {:?}", result.processing_time);
231    ///         }
232    ///         Err(e) => {
233    ///             eprintln!("转录失败: {}", e);
234    ///         }
235    ///     }
236    ///     
237    ///     Ok(())
238    /// }
239    /// ```
240    /// 
241    /// ## 注意事项
242    /// 
243    /// - 首次调用时需要加载模型,可能会有较长的延迟
244    /// - 建议在长期运行的应用中保持模型实例以避免重复加载
245    /// - 支持多种音频格式,会自动转换为 Whisper 兼容的格式
246    /// - 对于大文件,建议使用流式转录功能
247    pub async fn transcribe_file_unified<P1, P2>(
248        model_path: P1,
249        audio_path: P2,
250    ) -> Result<crate::stt::TranscriptionResult>
251    where
252        P1: Into<std::path::PathBuf>,
253        P2: AsRef<std::path::Path>,
254    {
255        crate::stt::transcribe_file(model_path, audio_path)
256            .await
257            .map_err(Error::from)
258    }
259}
260
261/// 导出统一错误处理函数
262/// 
263/// 这是推荐使用的文件转录函数,提供了统一的错误处理接口。
264/// 详见 [`transcribe_file_unified`] 函数文档。
265#[cfg(feature = "stt")]
266pub use stt_wrappers::transcribe_file_unified;