Skip to main content

Crate novel_tts

Crate novel_tts 

Source
Expand description

novel-tts 是一个专门为小说阅读设计的文本转语音(TTS)库。 它基于 kokoro-tts 引擎, 提供了针对长文本(如小说章节)优化的流式处理功能。

§功能特性

  • 📚 专为小说阅读优化的TTS解决方案
  • 🌊 流式音频处理,支持边生成边播放
  • 🎵 支持多种语音选择
  • 🔁 实时字符位置追踪,便于同步文本高亮
  • ⏹️ 支持播放控制(暂停、取消)
  • 📦 自动下载和管理TTS模型文件
  • 🧵 异步API设计,适用于现代Rust应用

§快速开始

use novel_tts::{NovelTTS, CheckpointModel, VoicesData, ChapterTTS};
use kokoro_tts::Voice;

// 初始化模型和语音数据
let model = CheckpointModel::default();
let voices = VoicesData::default();

// 检查并下载必要的模型文件
if !model.is_downloaded() {
    model.async_download(|downloaded, total| {
        println!("模型下载进度: {}/{}", downloaded, total);
    }).await?;
}

if !voices.is_downloaded() {
    voices.async_download(|downloaded, total| {
        println!("语音数据下载进度: {}/{}", downloaded, total);
    }).await?;
}

// 创建TTS实例
let novel_tts = NovelTTS::new(&model, &voices).await?;
let mut chapter_tts = novel_tts.chapter_tts();

// 准备要转换的文本
let text = "这是小说的第一段落。\n这是第二段落。".to_string();

// 流式处理文本到音频
let (audio_queue, mut position_rx) = chapter_tts.stream(
    text,
    Voice::Zf006(1),
    |error| eprintln!("TTS处理错误: {:?}", error)
)?;

// 监听字符位置更新
tokio::spawn(async move {
    while let Some((start, end)) = position_rx.recv().await {
        println!("正在朗读字符位置: {} 到 {}", start, end);
    }
});

Re-exports§

pub use kokoro_tts;

Modules§

download
文件下载管理模块
queue
TTS队列模块,提供音频流队列功能
utils

Structs§

ChapterTTS
TTS章节处理器,负责将文本转换为音频并管理播放队列
CheckpointModel
TTS检查点模型管理器
NovelTTS
NovelTTS主结构体
Player
TTS播放器结构体
VoicesData
语音数据管理器

Enums§

NovelTTSError
novel-tts库的错误类型枚举

Type Aliases§

Result
novel-tts库的Result类型别名