ai-agent-book 怎么用 Fish Audio S1 控制标记和 24 条参考语音库合成不同情绪的 TTS
ai-agent-book 怎么用 Fish Audio S1 控制标记和 24 条参考语音库合成不同情绪的 TTS【免费下载链接】ai-agent-book《深入理解 AI Agent设计原理与工程实践》李博杰 著开源主仓库全书正文、编译版 PDF 与按章配套代码项目地址: https://gitcode.com/GitHub_Trending/ai/ai-agent-book在 ai-agent-book 仓库的chapter6/controllable-tts实验中任务是让同一段文本以不同情绪、语速和风格被朗读出来先用你自己拥有或获准克隆的一条 Fish Audio 参考音批量渲染出 24 条4 情绪 × 3 语速 × 2 风格同说话人参考语音再在文本中写入控制标记运行时逐段解析标记、从 24 条真实参考音中挑选对应的一条调用 Fish S1 的零样本ReferenceAudio克隆完成合成。最终产物是output/下 A/B/C 三个对照配置的 mp3 文件和一份脱敏证据validation/latest.json。前提条件一个 Fish Audio API key、一条你有权使用的参考音 ID、系统装有ffmpeg/ffprobe静音段和 mp3 拼接靠它以及 Python 3.12 的 uv 环境。本实验没有备用 provider缺少FISH_API_KEY时demo.py会直接报错退出。准备环境从仓库根目录准备共享的核心环境然后进入实验目录安装 Fish SDK 运行时依赖# 仓库根目录准备共享的 Chapter 9 core 环境 uv sync --locked --python 3.12 --extra ch9 # 切换目录前先激活 # macOS/Linux: source .venv/bin/activate # Windows PowerShell: .\.venv\Scripts\Activate.ps1 # Windows cmd: .venv\Scripts\activate.bat # 未安装 uv 时的 pip 备选 # python -m pip install -e .[ch9] cd chapter6/controllable-tts # 安装本实验的 Fish SDK 依赖 python -m pip install -r requirements.txtrequirements.txt 只包含fish-audio-sdk1.3.0,2、python-dotenv1.0和pytest7.4并注释标明系统依赖是 ffmpeg/ffprobe。然后复制环境变量模板并填写cp env.example .envenv.example 要求两项配置FISH_API_KEYyour_fish_api_key FISH_BASE_REFERENCE_IDyour_authorized_reference_id其中FISH_BASE_REFERENCE_ID必须是一条你拥有或获准克隆的 Fish 语音builder 用这同一条 source timbre 渲染全部 24 条参考音。your_fish_api_key和your_authorized_reference_id两个占位符都要替换成自己的真实值。构建 24 条参考语音库cd chapter6/controllable-tts pip install -r requirements.txt cp env.example .env python build_reference_library.pybuild_reference_library.py 读取.env中的两个变量对 情绪neutral / happy / frustrated / thinking× 语速normal / fast / slow× 风格formal / casual做笛卡尔积逐条调用 S1 合成约 5 秒的参考音写入reference_audio/*.mp3。voice_library.py 中每条的合成细节情绪映射到 S1 原生情感标记neutral→(calm)、happy→(happy)、frustrated→(frustrated)、thinking→(uncertain)风格映射formal→(confident)、casual→(relaxed)语速通过Prosody(speed...)控制normal 1.0、fast 1.25、slow 0.8。构建结束后生成reference_audio/manifest.json记录每条音频的情绪、语速、风格、transcript、S1 合成提示词、时长和 SHA-256。运行时demo.py 通过load_voice_library加载会核对两条硬约束profiles 必须恰好是 24 条数量不符直接抛ValueError每条音频文件必须存在且 SHA-256 与 manifest 一致缺任何一条或被改动都会拒绝合成。控制标记怎么写标记语法由 markup.py 的parse()实现把带标记的文本解析成 speech 片段和 silence 片段分两类状态标记持续生效直到被下一个同类标记改变标记取值作用[EMO:...]/[情感...]neutral / happy / frustrated / thinking中文别名中性/高兴/沮丧/思考切换情绪维度决定选哪条参考音[SPEED:...]/[语速...]normal / fast / slow也接受0.8x这类数字写法就近映射到 fast/slow/normal切换语速维度[STYLE:...]/[风格...]formal / casual中文别名正式/轻松切换口吻维度内联标记一次性事件[THINKING]切到 thinking/slow/formal 参考音插入 1200ms 静音并发送 S1 原生填充音(uncertain)嗯……[SEARCHING]同上停顿 700ms填充音为(uncertain)那个……[PAUSE]/[停顿]插入 500ms 静音[BREATH]/[换气]发送 S1 原生吸气声(gasping)[SIGH]发送原生叹气(sighing)沮丧音色并追加 300ms 停顿[LAUGH:small]/[LAUGH]发送原生轻笑(chuckling)高兴音色emphasis…/emphasis/[强调]…[/强调]对包裹文本加重强调合成时文本会加上(emphasis)前缀。关键点非语言音全部走 S1 的括号原生标记由 Fish Audio 直接合成声音而不是把唉哈哈这类拟声文字念出来。未知标记会被忽略但会写进解析轨迹里。运行三配置对照合成cd chapter6/controllable-tts python demo.pydemo.py的默认文本是[EMO:happy][SPEED:fast][STYLE:casual]太好了您的订单已确认。 [THINKING]让我查一下发货时间。 [EMO:neutral][SPEED:normal][STYLE:formal]预计明天下午送达。可以用--text传入自己的带标记文本--manifest指定其他参考库--output-dir/--evidence改输出位置。运行会对同一段文本生成三个配置所有请求都显式backends1AA_no_control_markers.mp3剥离全部标记直接用 sourcereference_id合成BB_single_reference.mp3整段只用 neutral/normal/formal 一条参考音做零样本克隆CC_24_reference_library.mp3逐段解析标记在 24 条参考音之间切换非语言音发 S1 原生标记。运行结束时终端会打印标记解析轨迹每行是标记 → 动作并输出类似Generated three real Fish S1 configurations; evidence: validation/latest.json的提示。音频落在output/。验证结果检查证据文件。validation/latest.json记录本次运行的脱敏证据包含 providerFish Audio、backends1、参考库维度、完整解析轨迹、每段实际采用的 reference SHA-256 和输出的 ffprobe 时长/大小API key 与用户标识不会写入证据。仓库里附带的 validation/latest.json 是 2026-07-29 真实运行的一次记录文档示例其parse_trace展示了上面默认文本的完整解析过程三组输出时长为配置ffprobe 时长A 无控制标记5.355sB 单一参考音克隆5.904sC 24 条参考库8.305s这是那次运行的实测值你的参考音和合成结果会有出入不必以此作为成功判定只需确认三个文件都生成、latest.json里三段配置的probe有正常时长即可。跑离线回归测试。回归测试不调用 TTS API验证标记解析和空片段处理# 仓库根目录加上 dev 工具以引入 pytest uv sync --locked --python 3.12 --extra ch9 --extra dev source .venv/bin/activate cd chapter6/controllable-tts python -m pytest -qtest_fish_s1.py 中的用例覆盖了非语言事件必须产出 S1 原生标记而非拟声文字、24 维笛卡尔积完整性、缺少参考库时load_voice_library抛错等。可选听测与严格审计。如果还想做质量侧验证python evaluate_audio_quality.py会把 A/B/C 隐去配置名称、按三种轮换顺序交给真实音频理解模型聆听支持 Gemini、OpenRouter 音频路由、DashScope Omni 和 Mistral Voxtral按自然度、情绪匹配、思考停顿、音色一致性、真人客服感五维评分结果写入validation/audio_quality_study.json——这是多模态模型听测不是真人 MOS 面板。python validate_artifacts.py则重新核对 24 条参考音的 hash/时长、A/B/C 输出媒体和听测数据不再调用 API严格审计写入validation/acceptance.json。仓库附带的 validation/acceptance.json 显示一次完整构建加 A/B/C 运行估计产生 30 次 Fish 请求24 条参考音渲染 A 1 次 B 1 次 C 4 段语音SDK 未返回逐请求美元费用成本以 Fish 账单为准。边界与限制参考库是强约束24 条、哈希一致二者缺一都会被拒绝这是刻意设计防止参考音被替换后仍继续合成情绪只有 neutral / happy / frustrated / thinking 四档、语速三档、风格两档控制标记的取值不能超出这个笛卡尔积本实验只走 Fish Audio S1 一条路文档中不再提供 OpenAI TTS 或拟声词替代方案FISH_API_KEY缺失时demo.py会提示 this experiment has no substitute provider听测结论以多模态模型为准不要把它当真人主观评分使用。【免费下载链接】ai-agent-book《深入理解 AI Agent设计原理与工程实践》李博杰 著开源主仓库全书正文、编译版 PDF 与按章配套代码项目地址: https://gitcode.com/GitHub_Trending/ai/ai-agent-book创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →