Merge pull request ‘重构:config 单点调度 + 引擎配置对称化 + 文档整理’ (#1) from refactor/config-driven-dispatch-and-docs into main
把书籍内容加工成 N 人对话播客脚本(默认示例双人,独白 / 三人圆桌等同样支持, 角色由脚本自动识别并与当前 backend 段的 speakers 对账),并从 5 个 TTS 引擎里 任选其一生成完整音频:火山引擎 Podcast TTS(自有云)、小米 MiMo-V2.5-TTS(小米第三方云), 以及自托管开源引擎(CosyVoice3 / Fish-Speech / IndexTTS2,远程 GPU)。
backend
speakers
书籍/资料 ─(人工 + skill 提示词)─► MD 播客脚本 │ ▼ md_to_tts_json.py TTS JSON(角色/情绪/停顿/重音标准化) │ ┌───────────────────────┼───────────────────────┐ ▼ ▼ ▼ tts_json_to_podcast.py cosyvoice_call.py index_call.py (火山 WebSocket → MP3) (CosyVoice3 → WAV) (IndexTTS2 → WAV) │ └─ fish_call.py(环境待修,脚本就绪)
.env
MIMO_API_KEY
Fun-CosyVoice3-0.5B
indextts.api_server
emo_text
book_podcast/ ├── README.md ├── docs/ │ ├── USER_MANUAL.md # 用户手册 + 引擎接入与对比 │ ├── ARCHITECTURE.md # 架构 + 数据流 + 数据结构契约 │ └── MAINTENANCE.md # 维护交接 + 路线图 ├── ebook/ # 原始书籍资料(不参与构建) ├── samples/ # 播客脚本样例 ├── prompts/ # 书 → 播客脚本提示词规范 └── app/ ├── configs/ # 角色 + 各后端的配置(config.yaml 及任务配置) ├── run.py # 统一入口:按 config.backend 路由到引擎 ├── md_to_tts_json.py # MD → TTS JSON 入口 ├── md_transform.py # MD 解析与文本规范化(纯函数) ├── tts_json_to_podcast.py # 火山 WebSocket 后端(自有云) ├── cosyvoice_call.py # CosyVoice3 入口(自托管) ├── fish_call.py # Fish-Speech 入口(自托管) ├── index_call.py # IndexTTS2 入口(自托管) ├── mimo_call.py # 小米 MiMo-V2.5-TTS 入口(小米第三方云) ├── cosyvoice_assets/ # 默认 prompt wav(男声 + 女声) ├── tts_engines/ # 自托管 TTS 共享骨架 │ ├── base.py # Segment / render_podcast / WAV 工具 │ ├── runner.py # CLI 入口共享逻辑 │ ├── cosyvoice.py # CosyVoice3 客户端 │ ├── fish.py # Fish-Speech 客户端 │ ├── index.py # IndexTTS2 客户端 │ └── mimo.py # MiMo-V2.5-TTS 客户端 ├── protocols/ # 火山 WebSocket 二进制协议 ├── book_pipeline/ # epub → 分章工具 ├── script/raw/ # 输入 MD 脚本 ├── script/tts/ # 中间 TTS JSON ├── output/ # 生成的音频 └── tests/ # 单元测试
cd app python3 -m venv .venv .venv/bin/pip install -e '.[test]' requests soundfile numpy # 1) MD → TTS JSON .venv/bin/python md_to_tts_json.py --script script/raw/测试.md # 2) 生成音频:统一入口按 config.backend 路由(改一行 config 就换引擎) .venv/bin/python run.py --config configs/config.yaml .venv/bin/python run.py --config configs/config.yaml --backend cosyvoice # 临时覆盖 # 旧入口仍可用(按脚本名决定引擎): .venv/bin/python tts_json_to_podcast.py --tts script/tts/测试_tts.json # 火山 .venv/bin/python cosyvoice_call.py --tts script/tts/测试_tts.json # 本地 CosyVoice3
火山后端需要 .env(见 .env.example);本地后端需要先开 SSH 隧道到远程 GPU 主机, 详见 docs/USER_MANUAL.md。
.env.example
docs/USER_MANUAL.md
阿强:[情绪:emphatic] 这就是**消费主义**最大的谎言。[停顿1s]它告诉你所有烦恼都能靠下一单解决。 小慧:[情绪:warm] 没错。真正的自由,不是买得起,而是不需要。
支持标记:
[情绪:calm|excited|questioning|emphatic|warm|sarcastic|serious|warm|thoughtful]
[停顿0.5s]
[停顿1s]
**重音词**
[打断]
角色名必须出现在 config 当前 backend 段的 speakers 中。
cd app .venv/bin/python -m pytest tests # 13 passed
output/
.venv/
config.yaml
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
Book Podcast
把书籍内容加工成 N 人对话播客脚本(默认示例双人,独白 / 三人圆桌等同样支持, 角色由脚本自动识别并与当前
backend段的speakers对账),并从 5 个 TTS 引擎里 任选其一生成完整音频:火山引擎 Podcast TTS(自有云)、小米 MiMo-V2.5-TTS(小米第三方云), 以及自托管开源引擎(CosyVoice3 / Fish-Speech / IndexTTS2,远程 GPU)。当前状态
.env凭据MIMO_API_KEYFun-CosyVoice3-0.5B,instruct2 + 倍速可控indextts.api_server,emo_text文本情绪目录结构
快速开始
火山后端需要
.env(见.env.example);本地后端需要先开 SSH 隧道到远程 GPU 主机, 详见docs/USER_MANUAL.md。输入格式
支持标记:
[情绪:calm|excited|questioning|emphatic|warm|sarcastic|serious|warm|thoughtful][停顿0.5s]、[停顿1s]**重音词**、[打断]角色名必须出现在 config 当前
backend段的speakers中。测试
安全注意事项
.env、output/、.venv/。config.yaml只放非敏感内容。文档索引