Skip to content
SuperMarioYLPublic

About

Prepare serialized audio columns with Markdown chapter parsing, a local episode registry and MiniMax voice-profile locking.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

English · Website · GitHub

Hero diagram

栏音 LanYin

先整理栏目,再准备配音

栏音保存栏目配置,从 Markdown 提取章节标题并登记每期内容,还提供 MiniMax 客户端记录可复用音色档案。完整单集音频制作流程尚未完成。

为什么需要它

连载音频项目需要一致的单集结构,也需要明确记录准备使用的音色配置。栏音把这些准备工作放在一起,使每篇文章在合成前都可以检查。

  • Markdown 章节 — 按配置的标题级别提取有序章节列表。
  • 本地单集登记 — 来源路径和解析后的章节元数据保存到 .lanyin/episodes.json。
  • 可复用音色档案 — 音色锁文件记录选定的服务商 Voice ID 及其配置。

架构

Architecture diagram

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.py

实际运行示例

Process diagram

One 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 是可选端点配置。由于带时间信息的合成流程尚未接通,章节偏移初始均为零。

集成与职责分工

Integrations diagram

本地解析器和登记功能无需 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. 反馈问题时请提供最小输入、执行命令和实际输出。

About

Prepare serialized audio columns with Markdown chapter parsing, a local episode registry and MiniMax voice-profile locking.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages