- name
- toni-voice
- description
- 使用用户已确认的 Toni 声线制作单人播客、视频画外音及中英文口播;适用于调用 toni-voice,或明确要求用 Toni/用户本人的既定声音生成音频。支持口播稿整理、长音频续做及按镜头配音,不用于选择其他人的声线。
# Toni Voice
把用户的内容制作成以 Toni 本人声音朗读的可交付音频。主要用途是单人播客、视频画外音和日常口播,声线选择已经完成。
## 私有配置与安装
本公开包同步 2026-09-22 更新后的执行代码和规则,不分发 Toni 原声、prompt、批准试听、个人来源记录或本机路径。安装本包本身不会获得 Toni 的声音;不得把随机声音标成 Toni。
现有机器继续使用本地 `voice.json`、`runtime.json`、`assets/`。新电脑经本人授权私下迁移这些文件并校验哈希;机器路径重新配置。若没有本人资产且用户要建立自己的声音,转 `ai-podcast` 录入新 profile,不冒用 Toni 身份。实际声线版本以本地现行 profile 为准,以下日期仅描述本次同步基线。
CPU/Mac 运行或包含写稿、发布的完整任务,读取同目录层级的 `../ai-podcast/SKILL.md`。其 Python 入口通过 `--voice-profile` 读取这里的本地配置,使用单独 runtime;不会修改本包已批准的 CUDA 默认参数。GPU 不可用的自动回退限制只约束本包原 CUDA 入口,不阻止用户明确选择 AI podcast 的 CPU/MPS 流程。
## 固定声线
- 使用 **2026-09-22 用户批准的清晰、明亮版本**。听感基准为 `assets/approved-reference.mp3`,对应用户指定的 `新录音参考版.mp3`;无损母版为 `assets/approved-zh.wav`。
- 长稿听感基准及批准语言以私有 `voice.json` 的 `approved_longform` 为准;中文长稿批准不等于英文已验收。保持真实原声提示,不把合成品再用作克隆来源。
- `voice.json` 记录此次确认、来源哈希与两份原声提示:默认 `narration` 对应 `assets/voice.pt` 和 `assets/reference.wav`;需要提问、追问或强调的段落可明确选择 `question`,对应 `assets/question.pt` 和 `assets/reference-question.wav`。两者都来自用户本次 60 秒原声,不把合成 MP3 再编码成克隆参考。
- 中文、英文共用这组本人原声提示;此次听感批准来自中文样本。遗留的 `approved-en.wav` 是旧版历史文件,不作为新版英文已验收的证据。资产生成前逐一校验哈希;历史声线保留备份,不重新进行声线选型。
- 按用户本次要求合成该声线,不重复询问声线选择或本地合成授权。公开发布、上传外部服务或替别人发言仍由当前任务的授权决定。
- 这是参考声音克隆,不是已微调的专属模型。跨语言英文使用同一中文参考;不要保证特定英语口音。
## 按用途组织内容
**单人播客**:把用户提供的材料或已授权研究结果整理为自然的单人讲述,保留论点、事实和用户语气。避免虚构 Toni 的亲身经历,或擅自加入第二位主持人、对谈结构、固定广告和品牌开场。已有定稿时直接使用;需要新写或改写时按当前任务授权完成口播稿,事实或关键立场不明确时再询问。长稿按完整意思分段,最终交付一条连续音频;章节可基于实际段落时间生成。
**画外音/配视频**:沿用镜头或段落顺序。已有时码时把每段文字、目标秒数写入任务清单;目标时长应能容纳自然语速。字数明显过多时先缩写或协调时长,不靠大段静音、重复句子或强行变速凑时长。交付完整配音及可单独使用的段落音频、时间映射;不自行加入背景音乐。
**普通口播**:按指定语言朗读给定文本。未要求改写或翻译时,不更改实质内容,不自动增加“我是 Toni”“声音克隆试听”等测试句。
把数字、缩写和难读专名转换为适合朗读的写法时保留原稿,另存实际合成稿。中英文分别使用对应语言标识。原来“十条、每条四十秒以上”的要求仅属于选型试听,不是后续任务默认值。
## 执行
机器路径集中在 `runtime.json`,不写进生成代码。当前已验证 NVIDIA CUDA 环境;运行入口会复用已装模型和依赖,不修改共享环境或下载新模型。
```powershell
# $skillRoot 为本 SKILL.md 所在目录;输入、输出路径取当前任务。
pwsh -NoProfile -File "$skillRoot/scripts/run.ps1" -Check
pwsh -NoProfile -File "$skillRoot/scripts/run.ps1" -TextFile $scriptPath -Language zh -OutputFile $wavPath
pwsh -NoProfile -File "$skillRoot/scripts/run.ps1" -JobsFile $jobsPath
```
普通文本文件以空行分段;每段保持句子完整。按镜头计时、多文件或中英文一起制作时使用 JSON 任务清单,路径相对于清单文件:
```json
{
"jobs": [
{"language":"zh", "text_file":"口播稿.txt", "output":"成品/单人播客.wav"},
{"language":"en", "output":"成品/画外音.wav", "chunks":[
{"text":"The narration for the first shot.", "reference":"narration", "duration_seconds":5},
{"text":"Who will take care of the next step?", "reference":"question", "duration_seconds":5}
]}
]
}
```
`reference` 不填写时使用 `narration`;按段落意图选择,不按问号自动切换,也不机械交替两份提示。`duration_seconds` 只用于明确计时的段落,单段最多 30 秒;更长镜头在完整句边界拆段。定时任务保留模型生成的首尾时长,默认不再额外插入段间停顿,并检查每段目标误差不超过 0.1 秒;仍需核对语速和实际镜头对齐。未设时长时用自然语速,可在任务上设置 `speed` 或 `gap_seconds`。当前默认一段一批、种子按段递增,与批准样本相同;支持断点续做,内容与配置一致时复用完成部分。不同内容或设置请使用新的输出文件名,避免覆盖旧版本。
默认沿用批准样本的 32 步、起始种子 42、CUDA float16、速度 1.0。关闭模型内部静音压缩;非定时段仅整理首尾静音,保留 80 毫秒余量、5 毫秒淡入淡出,默认段间 120 毫秒;成品整条匹配均方根 -20 dBFS、峰值上限 -1 dBFS。路径和参数在 `runtime.json`。用户反馈音质时先对照原声和批准样本,不自行加重 EQ、混响、压缩或变调来追求“明亮”。
GPU 不可用时报告设备问题,保留已完成段落;不要静默改用 CPU 或另一个声线服务。路径失效时先查找现有仓库、模型和 CUDA Python,更新运行配置后再检查,避免直接重复下载数 GB 包。
## 交付与验证
脚本产生 WAV、实际口播稿、带段落时间及哈希的 JSON,以及可复用的浮点段落 WAV。默认 24 kHz 单声道;视频工程明确需要 48 kHz 等格式时另导出交付副本,保留母版。
确认实际时长、非静音、无削波、内容完整。长播客或正式配音应使用本地 ASR 核对文案,重点检查专名、数字、英文和漏句;如发现错漏,修订对应段落并输出新版本。自动转写不等于声音自然或像本人,重大声线变化仍需试听。
向用户展示可播放音频或便于比较的试听页,并提供所需下载文件;不用向用户展示缓存、环境日志和中间脚本。Skill 本身不包含任何自动上传或发布步骤。
Auf GitHub ansehen