先整理栏目,再准备配音
栏音保存栏目配置,从 Markdown 提取章节标题并登记每期内容,还提供 MiniMax 客户端记录可复用音色档案。完整单集音频制作流程尚未完成。
连载音频项目需要一致的单集结构,也需要明确记录准备使用的音色配置。栏音把这些准备工作放在一起,使每篇文章在合成前都可以检查。
- Markdown 章节 — 按配置的标题级别提取有序章节列表。
- 本地单集登记 — 来源路径和解析后的章节元数据保存到 .lanyin/episodes.json。
- 可复用音色档案 — 音色锁文件记录选定的服务商 Voice ID 及其配置。
config.py 读取 lanyin.toml 并管理本地登记文件;chapter.py 使用 MarkdownIt 提取标题、去掉强调等语法。add 按来源路径保存章节数据。voice_lock.py 通过 MiniMax 上传选定参考音频并保存返回档案;synthesize_episode 目前仍抛出 NotImplementedError。
| 组件 | 职责 |
|---|---|
Column TOML |
name and heading level |
Markdown parser |
ordered chapter titles |
Episode registry |
source and chapter metadata |
Voice profile |
provider voice ID |
需要 Python 3.12+ 和 uv。章节示例不需要音频服务或密钥。
git clone https://github.com/SuperMarioYL/lanyin.git
cd lanyin
uv venv --python 3.12
source .venv/bin/activate
uv pip install -e .示例内含完整 Markdown 单集内容,在临时目录创建栏目、保存解析后的章节并重新读取登记文件,只生成元数据。
.venv/bin/python examples/presentation_demo.pyOne locally registered episode with three chapter titles; all timing offsets remain zero.
{
"column_id": "cache-notes",
"episodes": 1,
"chapters": [
{
"title": "认识缓存",
"start_offset": 0.0,
"end_offset": 0.0
},
{
"title": "失效策略",
"start_offset": 0.0,
"end_offset": 0.0
},
{
"title": "下一步",
"start_offset": 0.0,
"end_offset": 0.0
}
]
}
Scope: chapter parsing and local episode registry; offsets are placeholders, no audio synthesized.
完整命令与输出保存在 docs/demo-results.json. 输入和复现代码均随仓提供。
保留已有录制供参考;上方文字示例给出当前可复现的操作。
在准备保存 lanyin.toml 的目录运行 init。add 会替换来源路径字符串相同的登记条目,便于重复更新。voice show 显示现有音色锁,未创建时返回 1。创建音色锁需配置服务商变量,再以有权使用的参考音频运行 voice lock --sample ./voice.mp3 --name "Narrator"。
lanyin init my-column --heading-level 2
lanyin add ./examples/ep01.md
lanyin voice show[column] 定义 column_id、column_name、chapter_heading_level(默认 2)和 platform_target(xiaoyuzhou 或 ximalaya)。.lanyin/voice-lock.json 保存音色档案,.lanyin/episodes.json 保存来源及标题。服务商操作需要 MINIMAX_API_KEY,MINIMAX_GROUP_ID 是可选端点配置。由于带时间信息的合成流程尚未接通,章节偏移初始均为零。
本地解析器和登记功能无需 API。音色锁路径需要服务商账户并上传参考样本。generate_rss 可将给定单集元数据生成 XML,但不会合成音频、托管文件或证明播客平台接收成功。
| 路径 | 已实现职责 |
|---|---|
| Markdown | heading-based chapter extraction |
| TOML | column configuration |
| JSON | episode and voice metadata |
| MiniMax API | voice-profile request client |
| RSS helper | XML generation from supplied metadata |
- lanyin build 是占位入口,返回 2,不会生成带章节的 MP3。
- RSS 导出需要已生成音频的单集,当前 add 流程不会产生它们。示例 RSS URL 是说明性内容,不代表已发布音频。
- 记录示例未测量音色质量、跨集一致性或平台导入。
已实现栏目初始化、Markdown 章节、单集登记、服务商客户端和音色档案保存。后续需完成章节合成、带时间的 ID3 帧、音频拼接和完整导出流程。托管、订阅和音色市场尚未实现。
许可见 LICENSE. 反馈问题时请提供最小输入、执行命令和实际输出。
