mcpField
V
voice

voice

github.com/chatcut-inc创意与媒体993146 次安装1 天前更新
代码仓库

关于 voice

voice 是用于生成文本转语音旁白和音效的 ChatCut 技能,涵盖音色选择与管理、经授权的声音克隆,以及让旁白配合视觉编辑的工作流。

主要功能

  1. 01根据文本生成旁白
  2. 02管理并试听音色选项
  3. 03克隆获授权的声音参考
  4. 04添加富有表现力的语气提示
  5. 05生成自定义音效
  6. 06支持旁白同步工作流

适用场景

  1. 01为视频制作旁白
  2. 02在生成 TTS 前试听音色
  3. 03用克隆音色替换说错的短语
  4. 04根据描述制作音效

MCP 相关

该技能使用 ChatCut 工具,包括用于音色目录与管理的 `manage_voice`、用于 TTS 的 `submit_voice`,以及用于音效的 `submit_sound`。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/chatcut-inc/agent-plugin --skill voice

安装后在 Claude Code 中输入/voice确认已加载。

附带文件references/fix-spoken-mistakes.mdreferences/video-sync.md

详细介绍

语音与音效生成器

如果尚未加载 submit_voice、manage_voice、pull_asset 或 submit_sound,请先使用 ToolSearch 加载它们,再调用,以便使用其实际参数,而不是猜测参数。

生成配音(TTS)和音效。对于 TTS,请在调用 submit_voice 前选择具体的服务提供商和语音。

适用场景

  • 根据文本生成配音/旁白
  • 为视频创建文本转语音音频
  • 为现有视频、时间线、屏幕录制、幻灯片动画、产品演示、B-roll 剪辑、MG 解说或其他视觉序列添加、替换或重做旁白/配音
  • 在剪辑、加速、减速、移动、重新排序或替换视觉内容后,让现有旁白/配音继续与其所描述的内容保持同步
  • 如果用户尚未选择具体语音,提供 TTS 语音选项并试听
  • 根据参考音频克隆用户本人的声音或经明确授权的声音
  • 使用经授权说话者的克隆声音,纠正实际说错的单词或短语,同时保留画面和后续时间安排
  • 仅在先检查音效库后,才根据文本描述生成自定义音效

TTS(文本转语音)

如果用户想要纠正现有录音中实际读错的某个词或短语,请先阅读 references/fix-spoken-mistakes.md,再进行编辑或生成。该工作流会保留画面并保护后续时间安排,只替换有问题的声音。如果录音本身正确,只是转录文本有误,请勿使用合成语音;应直接修正转录文本。完整改写或制作全新的配音时,请使用常规旁白流程。

如果当前请求有现成的视觉目标,且用户想为该目标添加旁白、配音、对口型配音或替换语音,请在起草新旁白、使用现有旁白文本生成 TTS 或放置音频之前,先阅读 references/video-sync.md。即使用户没有明确说“同步”或“匹配画面”,也要这样做;只要存在视觉目标,旁白的时间安排和含义就可能需要配合屏幕内容。只有在没有视觉目标,或用户只想根据文本制作音频资源时,才使用常规的独立 TTS 流程。

如果时间线上已有旁白或配音,而用户要求在保持配音同步的同时更改画面,也请阅读 references/video-sync.md。即使不需要生成新的 TTS,这仍属于同步维护任务。

使用 manage_voice 作为统一的目录和管理入口,并使用 submit_voice 进行最终 TTS 生成。manage_voice action="list" voiceType="all" 会在一个标准化列表中返回官方和克隆音色。只有 voiceType="custom" 支持创建访问权限、应用、克隆、预览、重命名或删除操作。当前接口约定如下:

  • 必须提供 provider。中文优化旁白使用 doubao,英文或多语言旁白使用 elevenlabs,现成的 ChatCut 自定义音色使用 fish-audio。
  • 必须提供 voiceId,且该参数因提供方而异。请勿混用不同目录。
  • submit_voice 只会创建音频资源。时间线放置、替换、裁剪和对齐需稍后使用时间线工具完成。
  • 对于长篇旁白,多次调用 submit_voice 会很有用:当工作流需要分别定时或放置语音片段时,可按自然停顿、句组或脚本节拍边界拆分,例如分镜节拍、场景级广告片段,或用户要求制作单独资源时。
  • 对于 Doubao,支持使用 speedRatio、loudnessRatio、pitch、emotion、 emotionScale、performancePrompt 和 explicitDialect 这些参数进行调节,但并非所有音色都支持每项表现控制。请以 manage_voice action="list" 返回的所选官方条目为准。
  • 对于 ElevenLabs,支持使用 modelId、speed 和 stability 这些音色参数。对于 eleven_v3,可在文本中使用内联音频标签,以实现情绪、语气、非语言提示、口音提示、停顿或局部语速等表现效果。
  • 对于 fish-audio,将现成音色的 ChatCut customVoiceId 作为 voiceId 传入。submit_voice 会执行权威的 Pro/就绪状态检查、创建生成任务,并在成功后扣除标准 TTS 点数。切勿传入或索取提供方内部的 Fish 模型 ID。当前 Fish S2.1 模型支持在 text 中使用方括号内联提示,以控制局部情绪、表达方式和副语言效果。
对用户隐藏音色提供方信息

Doubao、ElevenLabs、Fish Audio、它们的模型名称及其他提供方身份信息,都是内部实现细节。切勿在面向用户的回复、进度更新、音色推荐、试听卡片、克隆说明、成功摘要或错误信息中披露或归因于这些信息。请改用 ChatCut 产品用语:

  • 将精选目录中的音色称为 official voices / 官方音色。
  • 将已保存的自定义音色称为 cloned voices / 克隆音色、My Voices / 我的音色,或使用用户可见的已保存名称。
  • 在 ChatCut 功能层面描述状态和失败。如果工具或 提供商错误中包含提供商名称、模型名称、提供商音色 ID 或 提供商 URL,请保留可操作的含义,但在回复前移除这些详细信息。

提供商名称和提供商专用 ID 仅在内部工具参数、工具结果解读以及这些实现说明中 有效。请勿将它们从工具输出复制到可见的 UI 元数据或文案中。

官方音色控件来自 manage_voice action="list":

  • 针对目标旁白语言和用户可见的区域设置调用它。 将返回的每个 (provider, voiceId, name, summary, sampleUrl, capabilities) 元组视为不可拆分的整体。
  • 仅使用该条目 capabilities.supportedControls 中的字段;切勿根据记忆中的音色名称或系列 推断控件支持情况。
  • 控件不能保证特定的表演风格。使用返回的标签和示例来挑选自然合适的音色,然后使用受支持的 控件适度调整表达。
  • 对于声明支持 audioTags 的条目,当用户要求富有表现力的演绎,例如情绪、语气、非语言提示、口音提示或局部语速时,可使用内联音频标签。官方示例适用于以下实用的 TTS 类别:
  • 情绪/语气标签包括 [happy]、[sad]、[angry]、[excited]、 [curious]、[sarcastic]、[crying]、[annoyed]、[appalled]、 [thoughtful]、[surprised] 和 [mischievously];发声方式和 非语言提示标签,例如 [whispers]、[laughs]、[sighs]、[exhales]、 [inhales deeply]、[clears throat]、[snorts]、[swallows]、 [wheezing] 和 [coughs]; 语速/停顿/局部速度标签,例如 [slowly]、[pause]、 [short pause]、[long pause]、[rushed] 和 [drawn out];以及 口音/特殊表演标签,例如 [strong X accent],如 [strong French accent],以及 [sings]、 [singing]、[woo] 和 [pirate voice]。官方示例并未涵盖所有情况;当用户明确 要求这种演绎时,可以尝试类似的听觉标签,且标签应描述音色听起来的效果,而非 视觉动作。将标签直接写入 text,并放在其所影响的短语附近。将标签视为局部提示,而非 整段文本的控制项。
  • 对于停顿和语速,可根据需要使用标点、文本结构、 较短的生成片段或 [short pause] 和 [slowly] 等局部音频标签。

Fish Audio 对克隆音色的控件支持:

  • 当前的 fish-audio 路由使用 Fish S2.1。请在 submit_voice.text 中直接用方括号加入简洁的自然语言提示,例如 [happy]、[calm]、[angry]、[excited]、[whisper]、[laugh]、[sigh]、[gasp]、[pause]、[emphasis]、[inhale] 或 [exhale]。 S2.1 不限于固定的标签列表,因此 [whispers sweetly] 或 [laughing nervously] 这样的具体听觉描述也有效。
  • 将提示放在它要影响的短语或时刻前。Fish S2.1 接受文本中的任意位置加入提示,因此可以用多个简短提示实现局部过渡,例如 [calm] 先别着急。[excited] 好消息是,我们已经找到解决办法了! 或 I thought it was over [gasp] but then the lights came back [relieved].
  • 谨慎使用提示,仅在所需的表达方式能从中受益时添加。过渡处优先使用一条清晰指令,避免叠加相互冲突的指示。请将生成结果视为模型指引,而非确定的编辑边界;如果需要精确控制片段级时序或分别重试,请拆分为多个 submit_voice 调用。
  • 不要在此路由中使用 Fish S1 的旧版 (parenthesis) 情绪语法,也不要添加单独的 emotion 参数:S2.1 提示应放在 text 中。默认的声音克隆预览句不要加标签。不要代替用户给自定义预览添加提示,但应保留用户有意加入的提示,且不得超过 100 个字符的预览限制。
// English / multilingual via ElevenLabs
mcp__skill__submit_voice({
  provider: "elevenlabs",
  text: "Hello world",
  voiceId: "peter",
});

// Chinese via Doubao
mcp__skill__submit_voice({
  provider: "doubao",
  text: "你好世界",
  voiceId: "liuchang",
});

// With speed adjustment (Doubao only)
mcp__skill__submit_voice({
  provider: "doubao",
  text: "这是一段稍快的中文旁白。",
  voiceId: "liuchang",
  speedRatio: 1.5,
});

// With expressive Doubao controls
mcp__skill__submit_voice({
  provider: "doubao",
  text: "这次事故提醒我们,安全永远不能侥幸。",
  voiceId: "liuchang",
  emotion: "sad",
  emotionScale: 3,
  performancePrompt: "痛心但克制,语速稍慢,像新闻专题旁白",
  pitch: -1,
  speedRatio: 0.92,
});

// With ElevenLabs delivery controls
mcp__skill__submit_voice({
  provider: "elevenlabs",
  text: "The launch changed how teams plan their daily work.",
  voiceId: "peter",
  speed: 0.95,
  stability: 0.4,
});

// With local Fish Audio S2.1 delivery cues on a ready cloned voice
mcp__skill__submit_voice({
  provider: "fish-audio",
  voiceId: "<confirmed custom voice id>",
  text: "[calm] 先别着急。[excited] 好消息是,我们已经找到解决办法了!",
  name: "Expressive custom voiceover",
});

生成前试听语音

仅在最后一步发出原生克隆入口

<clone-voice/> 是可执行的编辑器操作,不是散文、代码或内部流程标签。切勿引用它、用反引号包裹、将其描述为下一步,或在进度更新、工具调用前的说明、计划或其他中间助手消息中发出它。

请先完成所有必要的检查和工具调用。如果之后仍应使用原生对话框,请按照下方 原生 ChatCut 编辑器 中的 进入对话框步骤 操作。该步骤必须是本次运行中面向用户的最后一条助手消息:在完成提醒之后不要再调用工具、添加任何内容,也不要再次发出该标签。单次 Agent 运行最多只能呈现一个独立的原生克隆入口。

按宿主和可用参考音频选择克隆路径

在加载 widget-forms 或询问克隆所需输入之前,先确定宿主路径:

  • 在原生 ChatCut 编辑器中,先检查用户是否已提供可读取的音频附件,或明确指出可访问的、包含音频的 ChatCut 资产用于此次克隆请求,包括时间线中的音频或视频项目。如果是,不要让用户再次选择同一来源,也不要输出 <clone-voice/>。解析或派生其音频资产,运行创建前检查,只收集缺少的名称、预览文本和明确授权,然后使用下文的 Agent 驱动克隆流程。
  • 在原生 ChatCut 编辑器中,只有在用户尚未提供可用参考音频时,才使用编辑器对话框。遵循下文 自定义语音克隆 中的原生对话框路径。
  • 在外部 Codex / Claude 宿主中,绝不要输出 <clone-voice/>;这些宿主不会呈现或分发原生编辑器操作。请使用下文的 Agent 驱动附件流程。

项目中已有的任意语音都不构成同意,也不能作为克隆参考。只有当用户为当前克隆请求提供或指出了音频,并且之后给出了下文要求的完整授权时,才使用直接路径。

当用户明确选择时间线中的音频项目时,使用 preview_timeline 解析该项目及其源范围。对于时长为 10 秒到 3 分钟的音频资产,直接复用。对于视频,使用 pull_asset,再用 ffmpeg 按支持的音频格式提取所选片段,然后加载 asset-import 并使用 push_asset 上传结果。对于任何超过 3 分钟的来源,截取一段干净的 30–60 秒片段;如果不足 10 秒,则请用户提供更长的参考音频。继续使用所得的音频资产 id,不要输出 <clone-voice/>;选择来源不等于授权。

根据实时状态选择交互方式

将统一语音查询视为必经步骤。每当用户请求 TTS,却未指定具体的官方语音或自定义语音,也未明确选择语音克隆时:

  1. 如果尚未加载 manage_voice,使用 ToolSearch 加载它。
  2. 调用 manage_voice action="list" voiceType="all",并提供目标旁白语言、对话区域设置以及任何有用的官方语音筛选条件。
  3. 仅将返回的标准化 voices 列表作为候选目录。该列表已将克隆语音排在匹配的官方语音之前。

在推荐或呈现任何语音选择界面之前,必须完成这些步骤。绝不要根据聊天记录或静态 Skill 文件推断用户保存的语音或官方语音。

明确请求克隆语音,已经构成了具体的来源选择。在这种情况下,不要仅仅为了从官方语音和克隆语音中选择而调用合并列表。首先确认当前请求是否已提供可用参考音频;然后执行 manage_voice voiceType="custom" action="check-create-access",再遵循所选宿主路径。只有在完成上述工作后,才能按照最终操作规则显示独立的原生入口。

请求使用用户自己的语音进行旁白(例如“我自己的声音”“我的自定义语音”,或在尚无可用自定义语音时进行克隆的工作流),同样属于具体的来源选择,而不是请求查看官方选项。检查用户的自定义语音:只试听已就绪的语音以及 Clone another voice;如果没有已就绪的语音,则直接走克隆路径。只有在用户拒绝克隆或主动询问官方语音时,才提供官方语音。克隆语音的旁白由文本合成,因此可以使用说话者从未录制过的语言;用户不会说某种旁白语言,应成为使用其克隆语音的理由,而绝不是切换到官方语音的理由。 Agent 可以根据旁白文本推断合适的语气、情绪、表达方式或使用场景建议。请将这些内容视为推荐信号,而不是用户对音色来源的选择。合理的推断绝不能排除下方组合试听界面中已就绪、可播放的自定义音色。

在渲染任何内容之前,先对请求进行分类:

  • **请求使用本人音色:**遵循上述本人音色规则;绝不能用官方音色试听来回应。
  • **指定了具体自定义音色:**用户指定了一个已就绪的自定义音色,或选择了唯一一个已命名的自定义音色选项时,使用该自定义音色。如果用户选择 Choose my cloned voice,且有多个音色已就绪,则只展示这些已就绪的自定义音色作为可播放选项,然后再继续。
  • **指定了具体官方预设:**使用或确认该预设;不要重新打开音源选择分支。
  • **已选择克隆操作:**仅在此时,于下一条回复中立即进入上述针对宿主的克隆流程。不要等用户再次提出要求,不要让他们打开菜单或面板,也不要让这个选项处于未处理状态。在原生编辑器中,先完成任何必要的检查或预检,再进入对话框;在外部 Codex / Claude 宿主中,开始附件流程。
  • **至少有一个已就绪的自定义音色,但未指定具体音色:**渲染一个组合的可播放试听界面。先放置具有真实 previewUrl 的已就绪自定义音色,再添加 2-4 个带可播放样本的合适官方音色,最后放置 Clone another voice。不要询问仅有文本的已保存音色与官方音色来源问题,也不要使用 <choices/>。
  • **没有已就绪的自定义音色,且未指定音色偏好:**推断一小组多样且普遍适用的 2-4 个官方音色,将它们渲染为可播放卡片,最后放置 Clone my voice。不要使用仅有文本的来源选项。
  • **没有已就绪的自定义音色,但有音色要求:**优先使用明确的要求,例如“中年男性”“温暖的女性”或“专业”;否则,可以根据旁白内容合理推断特征并用于推荐。展示 2-4 个匹配的官方可播放卡片,并在同一个选择界面中放置一个克隆操作卡片。不要在此回复末尾附加独立的 <clone-voice/> 按钮。

将分支标签本地化,并根据当前状态调整。含义如下:

  • 中文:
    • 已命名的自定义音色:使用「<name>」
    • 自定义音色列表:选择我的克隆音色
    • 精选目录:选择官方音色
    • 首次克隆:克隆我的音色
    • 额外克隆:克隆新音色
  • 英文:
    • 已命名的自定义音色:Use “<name>”
    • 自定义音色列表:Choose my cloned voice
    • 精选目录:Choose an official voice
    • 首次克隆:Clone my voice
    • 额外克隆:Clone another voice
  • 西班牙语:
    • 已命名的自定义音色:Usar «<name>»
    • 自定义音色列表:Elegir mi voz clonada
    • 精选目录:Elegir una voz oficial
    • 首次克隆:Clonar mi voz
    • 额外克隆:Clonar otra voz

如果尚未提供可用参考,原生中文示例:

<widget>
  <form-visual id="voiceId" label="请选择并试听音色" media-kind="audio" required="true">
    <visual-option value="<returned voiceId>" name="<returned localized name>" summary="<returned summary>" media="<returned sampleUrl>" media-kind="audio"/>
    <visual-option value="clone_voice" name="克隆我的音色"/>
  </form-visual>
</widget>

如果尚未提供可用参考,对话框操作应放在可播放网格中:

<visual-option value="clone_voice" name="克隆我的音色" />

在常规音色选择过程中,始终提供一条合适的克隆路径,但绝不要在同一条回复中同时显示克隆操作卡片和独立的原生 <clone-voice/> 入口。用户选择克隆后会发生什么,取决于服务提供方是否可用、套餐和配额;这些因素不应影响是否显示克隆选项。提供该选项不需要用户同意;只有在调用克隆工具之前,才需要明确许可和受支持的参考内容。特定场景的参考可以有意采用更精简的试听界面,不提供克隆操作,并在正文中说明直接从项目克隆的备用方案。

在推荐、渲染或提交 TTS 音色选项之前,请使用当前的 manage_voice action="list" voiceType="all" 结果。该结果是 ChatCut Web、Desktop 和已发布插件共享的实时目录。不要根据记忆、翻译后的名称、文件名或宽泛描述创建音色选项。 首先确定两种不同的语言:

  • 用户对话语言:用户与你交谈时使用的语言。用于周边文案、选项名称和摘要。
  • 目标旁白语言:将要合成的文本所使用的语言。仅用于选择提供方和语音目录。

在收集输入或呈现选项之前,先加载 widget-forms。该技能负责当前宿主的表单、附件和媒体卡片行为。本技能负责语音候选项、必填字段、安全规则,以及传递给语音工具的资源 ID。不要在此处嵌入特定宿主的 UI 说明。

“help me generate ... voice over in Chinese” 是用英语提出的中文旁白请求,因此试听组件文案应使用英语,语音候选项应来自 Doubao。

对于官方语音试听:

  1. 调用 manage_voice action="list" voiceType="all",并传入目标旁白的 language、用户对话的 locale,以及任何明确提出的性别、年龄、语气或使用场景要求。如果用户没有明确提出这些要求,可使用简洁的推断语气或使用场景查询来筛选官方候选项。应将推断出的特征表述为建议,而非用户明确提出的偏好。如果没有匹配的官方语音,只放宽可选筛选条件,并清楚说明最接近的受支持选项;绝不要因为返回的可播放自定义语音缺少官方目录标签就将其排除。
  2. 优先展示返回的、已就绪且带有试听音频的自定义语音,之后再展示 2-4 个返回的官方语音。
  3. 加载 widget-forms 并请求一个必选的 playable_single_choice。每个官方选项都要提供同一返回元组中的 voiceId、本地化 name、summary 和匹配的 sampleUrl。原样提供 sampleUrl;绝不要添加推断出的 S3、CDN、编辑器、本地主机或生产环境基础 URL,也不要根据文件名格式重建 URL。这与自定义语音的 previewUrl 不同;后者必须严格按照 manage_voice 返回的内容使用。
  4. 在每个常规推荐/选择界面上,始终添加一个无媒体操作选项,并将其稳定值设为 clone_voice,作为最后一张卡片。如果没有已就绪的自定义语音,标签为 Clone my voice;如果有,则为 Clone another voice;请按上述含义本地化。在原生 ChatCut 中,这是一个不带 media 的紧凑型 <visual-option>,而不是单独的按钮。在外部宿主中,则使用等效的纯标签选项。特定场景的参考内容可以明确要求用更窄的界面替代此常规界面。
  5. 等待用户选择。如果答案对应 clone_voice,则在下一轮呈现特定宿主的克隆入口/工作流;不要在试听回复中直接开始克隆。在原生编辑器中,克隆卡片会直接打开克隆对话框,并将保存的语音返回同一个选择器,因此提交的答案已经是附带语音上下文的自定义语音。
  6. 对于官方语音,调用 submit_voice,并原样传入所选元组的 provider 和 voiceId。
  7. 对于现有自定义语音,调用 manage_voice voiceType="custom" action="apply",并传入其完整映射的 customVoiceId。用户请求生成最终语音时,将同一 ID 作为 voiceId 传给 submit_voice,并设置 provider: "fish-audio"。

对于仅包含自定义语音的试听,应纳入每个相关的、状态为 ready 且带有 previewUrl 的自定义语音。将完整的 customVoiceId 用作其稳定值,将存储的名称用作显示标签(若有 previewText,则将其用作摘要),并将工具原样返回的 previewUrl 用作音频媒体。不要复制、下载、改写该 URL,不要通过主机名验证它,也不要编造该 URL。如果已就绪的语音缺少试听内容,则应从试听界面中省略,而不是将其做成无法播放的纯文本卡片。 确保每个选项的类型、提交 ID、显示标签、预览、摘要和功能都与同一个 manage_voice 元组绑定。目标旁白语言用于筛选官方条目;对话语言用于控制所有可见文案。将标签到元组的映射保留在上下文中,这样即使宿主返回的是可见标签,也能在无需再次确认的情况下映射答案。

自定义音色克隆

音色克隆是一个需要取得同意的独立流程。在选择音色时主动提供此选项是必须的,但这不等于开始克隆。切勿仅因为项目中有一段音频,就克隆第三方的音色。

原生 ChatCut 编辑器

如果用户尚未为本次克隆请求提供可用的参考音频附件或 ChatCut 音频资源,请委托现有编辑器对话框创建,并遵循下方的进入对话框顺序。不要先在 Agent 小组件中询问音色名称、语言、上传参考音频或授权。对话框负责重新检查使用权限和名额、录音/上传、授权、持久化源文件、注册到 Fish Audio、预览和重试。

如果用户已为本次克隆请求提供可用的参考音频,则不要让他们重新打开对话框,也不要要求他们重新选择文件。请遵循下方的基于可用参考音频由 Agent 驱动克隆。创建预检成功后,只收集缺失字段:明确授权、音色名称和预览文本。然后调用 manage_voice voiceType="custom" action="clone",并传入解析后的 ChatCut 音频资源 ID。

对于对话框流程,由 Agent 负责展示入口。用户选择克隆分支后,立即:

  1. 用一句简短、自然的话告诉用户,可以点击下方按钮开始克隆。
  2. 单独一行原样呈现 <clone-voice/>。
  3. 添加一句简短的本地化提示,说明保存音色后,编辑器会将它放入消息框,发送该消息即可让 Agent 继续处理请求。

根据对话和语言调整提示和提醒。完成所有必需工具调用后,这个三部分顺序必须是本轮助手的最后一条消息;不得将其放在工具调用前或中间消息中。示例:

  • 中文:可以点击下方按钮开始克隆你的音色啦。\n<clone-voice/>\n保存后音色会放进输入框,直接发送,我就继续。
  • 英语:Click the button below to start cloning your voice.\n<clone-voice/>\nOnce you save it, the voice appears in the message box. Send it and I'll continue.
  • 西班牙语:Haz clic en el botón de abajo para empezar a clonar tu voz.\n<clone-voice/>\nCuando la guardes, aparecerá en el cuadro de mensaje. Envíalo y continuaré.

以上仅为示例,并非固定文案。不要说“按照以下步骤操作”,也不要暗示 Agent 会收集克隆所需的信息。不要让用户自行前往编辑器菜单寻找克隆功能。发送入口和提醒后,停止操作,等待用户告知已完成,或发送对话框“保存”操作生成的草稿。

用户保存音色后,编辑器会将克隆音色附件和本地化版本的 Continue generating with this voice. 一并插入提示词草稿。等待用户发送该草稿。该句会遵循编辑器语言,因此应以附加的音色而非其文字内容作为克隆完成的信号。附加的隐藏音色上下文中包含准确的自定义音色 ID;实际需要生成语音时,使用 submit_voice provider="fish-audio" 继续现有请求。不要输出原始 <audio> HTML,也不要再次显示“重试/应用”小组件。

基于可用参考音频由 Agent 驱动克隆

以下任一情况适用时,请使用此流程:

  • 原生 ChatCut Agent 已有可读取的附件,或可访问由用户为本次克隆请求提供的 ChatCut 音频资源;或
  • 外部 Codex / Claude 宿主无法打开原生编辑器对话框,因此通过对话附件收集参考音频。 除非用户明确提交许可,否则绝不要调用克隆操作。ChatCut 会在向 Fish Audio 注册之前,将每段提交的克隆源录音持久存档到自己的用户文件存储中。即使项目素材之后被删除,这份源录音仍会保留,以便未来迁移服务提供商;绝不要仅仅为了创建语音,就要求用户重新录制或重新选择已可访问的参考素材。

用户选择 clone_voice,或以其他方式明确要求从已可用的参考素材进行克隆后,在要求用户再次上传之前,先解析本次克隆请求中已提供的任何参考素材。不要使用 providerAvailable:false 阻止用户提交素材;在呈现选择后,服务提供商集成可能已启用,而克隆操作才是权威的可用性检查。如果账户无法创建其他克隆,请在要求用户提供不必要的输入之前,使用权益和名额字段说明升级或名额已满的情况。如果克隆操作本身返回 CUSTOM_VOICE_PROVIDER_NOT_CONFIGURED,请说明克隆暂时不可用,并保留请求的名称和导入的参考素材,以便之后重试此流程。

在询问名称、录音、上传内容或同意之前,调用 manage_voice voiceType="custom" action="check-create-access",并将该最新结果视为权威的创建预检。不要仅用 list 检查权益:对于不符合资格的免费账户,check-create-access 会有意触发运行时受功能限制的升级卡片。

  • 免费账户的 freeTrialAvailable:false:不要收集其他参考素材。请说明免费自定义语音名额已占用,用户必须删除现有语音或升级才能创建其他语音。在原生编辑器中,产品会打开定价对话框;在 Agent 对话中,现有的受功能限制升级卡片具有同等作用。不要编造购买 URL,也不要绕过此流程继续克隆。
  • Pro 账户的 activeVoiceCount >= voiceSlotLimit:不要收集其他参考素材。请准确说明当前有多少个语音处于启用状态,以及已达到当前套餐的限制,然后提供两种对话操作:通过运行时的升级卡片升级套餐,或关闭此流程/继续使用现有语音。用户升级或腾出名额之前,不要调用 clone。
  • 否则,继续以下收集流程。过期的预检结果绝不能覆盖克隆端点的结果:如果 clone 仍返回 FEATURE_NOT_INCLUDED 或 CUSTOM_VOICE_QUOTA_EXCEEDED,请遵循相同的恢复流程,且不要自动重试。
  1. 说明参考音频将经过安全处理,以创建可重复使用的克隆音色。不要透露底层服务提供商。
  2. 要求提供名称、明确的授权/风险确认、预览文本和一份有效的参考音频。如果用户已提供参考音频,请重复使用,并且只询问其他缺失字段。用户必须确认说话者是自己,或自己已获得许可,并确认不会将该音色用于冒充他人、欺诈或违法活动。ChatCut 会检测上传音频的语言,因此不要询问用户选择语言。ChatCut 支持的稳定格式包括 AAC、FLAC、M4A、MP3、OGG、WAV 和 WebM。音频时长必须为 10 秒至 3 分钟;建议使用 30-60 秒清晰的单人语音,不含音乐、混响或背景噪音。
  3. 加载 widget-forms,并且只请求此与宿主无关的收集信息契约中缺失的部分:
    • voice_name:short_text,必填。
    • voice_reference:audio_reference,仅当尚未解析出可用参考音频时,才要求恰好一段录音或一个附件。
    • preview_text:short_text,可编辑,且不得超过 100 个 Unicode 字符。预填下方本地化默认文本,但允许用户将其替换为任何想用于克隆音色预览的文本。
    • voice_consent:explicit_consent,必填,初始状态为未选中。如果宿主支持媒体字段,请让适配器在一次信息收集中保留所有缺失字段。如果宿主会单独收集对话附件,请遵循适配器的附件流程,并且不要将附加文件视为同意。不要再次询问用户在当前克隆请求中已明确提供的字段。

授权和使用承诺是继续操作的硬性门槛。信息收集返回后,请独立确认用户已明确提交上方完全一致的本地化授权选项。在收到该确认之前,立即停止:不要导入所附参考音频,不要调用 manage_voice voiceType="custom" action="clone" 或 action="preview",也不要声称克隆已开始。用户提供的名称、附件、笼统的“是”、此前无关的批准,或显示其他字段已完成的控件状态,都不构成授权。如果缺少授权或授权含糊,只再次询问完整的授权确认,并等待用户答复。

克隆前规范化已提交的结果:

{
  voiceName: "<submitted name>",
  sourceAssetId: "<ChatCut audio assetId>",
  previewText: "<submitted preview text or localized default>",
  confirmedConsent: true,
}

所有可见文案均使用用户的对话语言本地化。授权复选框应使用与“创建音色”对话框相同的产品文案,不要改写:

  • Chinese: 我确认拥有该音色或已获得克隆授权,并承诺不将其用于冒充他人、欺诈或其他违法用途。
  • English: I confirm that I own this voice or have permission to clone it, and will not use it for impersonation, fraud, or unlawful purposes.
  • Spanish: Confirmo que esta voz me pertenece o que tengo permiso para clonarla, y que no la utilizaré para suplantar identidades, cometer fraude ni otros fines ilícitos.

使用 ChatCut 检测到的语言标签,不要询问用户手动识别语言。

信息收集结果必须解析为 ChatCut 音频 assetId。如果宿主返回的是可读取的附件,则加载 asset-import,将其导入目标项目,并使用返回的音频 assetId。绝不要将本地路径、附件 URL 或原始字节传给 manage_voice。如果没有可读取的音频,请停止并索取音频。使用用户提交的 preview_text,并去除其前后空白。如果内容为空,则使用本地化默认文本:

  • Chinese: 这是你的克隆音色,希望你喜欢这个效果。
  • English: This is your cloned voice. Hope you like it.
  • Spanish: Tu voz clonada. Espero que te guste. 根据用户的对话语言选择默认值。最终预览文本必须包含 1-100 个 Unicode 字符。如果提交的值过长,请在克隆前让用户缩短;不要悄悄截断或替换为默认值。保留用户的原话,不要根据对话上下文改写。

然后调用:

mcp__skill__manage_voice({
  voiceType: "custom",
  action: "clone",
  sourceAssetId: "<uploaded audio asset id>",
  name: "<submitted voice name>",
  confirmedConsent: true,
  previewText: "<submitted preview text or localized default>",
});

该工具会等待克隆和预览生成都完成。工具返回就绪的语音和 previewUrl 后,请让已加载的 widget-forms 适配器渲染一个 playable_preview:使用完整的 customVoiceId 作为稳定值,提交的语音名称作为显示名称,提交的 previewText 作为摘要,并将工具准确返回的 previewUrl 作为音频媒体。这是仅供展示的预览,不是另一个收集信息或选择表单。不要在正文中放入 URL,不要输出原始的 <audio> 元素,也不要替换为不受支持的 Markdown 音频/链接语法。

紧接着可播放预览,询问一个单一的分支选择:Retry / 重试 / Reintentar,或 Apply / 应用 / Aplicar。此分支选择使用 <choices/>,而不是另一个表单组件。等待期间,在上下文中保留完整的 customVoiceId、提交的名称、提交的 previewText 和 previewUrl。

  • Retry 表示为同一语音收集替换录音或上传文件;不要占用另一个名额,也不要在替换成功前丢弃之前就绪的语音。如果当前工具界面无法原位替换来源,请说明这一限制,而不是创建第二个语音。
  • Apply 表示为当前 AI 草稿/请求选择克隆语音。使用选定的 customVoiceId 调用 manage_voice voiceType="custom" action="apply"。此操作会执行权威的 Pro/就绪状态检查,不会生成音频或消耗额度。成功后,保留自定义语音 ID 作为选定语音并继续对话;只有用户实际要求生成最终语音时,才使用 provider: "fish-audio" 调用 submit_voice。如果返回 FEATURE_NOT_INCLUDED,不要将语音说成已应用,也不要合成。请说明,免费克隆语音可供预览,但要将其应用于生成旁白需要 Pro;运行时带功能门控的升级卡片相当于编辑器中的付费墙。

免费方案可尝试克隆一次并试听预览,但不能将克隆语音用于最终 TTS。Pro 自定义语音名额等于 floor(monthly plan credits / 100);就绪或处理中状态的语音都会占用一个名额。名额不包含免费生成:使用克隆语音生成最终 TTS 会消耗常规语音生成额度,且仅在生成成功后扣除。上述三条规则均以后台为准。

当用户要求使用克隆语音生成最终语音时,使用 ChatCut 自定义语音 ID 调用 submit_voice:

mcp__skill__submit_voice({
  provider: "fish-audio",
  voiceId: "<confirmed custom voice id>",
  text: "<final narration text>",
  name: "Custom voiceover",
});

如果工具返回 FEATURE_NOT_INCLUDED / feature_not_included,请告知用户,Free 方案提供一个自定义语音预览名额,但使用克隆语音生成最终 TTS 需要 Pro。不要重试、切换语音,也不要通过其他工具提交提供方 ID 来绕过门控。对于此限制,运行时会显示标准的定价升级卡片;请邀请用户升级后重试。 对于付费账户,请表述为:账户已创建 activeVoiceCount 个语音,已达到当前订阅方案的 voiceSlotLimit 限制;提供升级操作和关闭/继续操作。不要将配额错误引导至免费账户的付费墙文案。

音效

对于普通编辑音效(SFX),不要先生成。消耗额度前,先使用内置音效库:

  1. 调用 browse_library,设置 category:"sound-effects",并使用 "whoosh"、"camera shutter"、"notification"、"censor beep" 或 "record scratch" 等查询词。
  2. 检查返回的 library:sound:<id>。
  3. 使用 edit_item 放置音效,并将 fromFrame 设为音效的锚点/编辑时刻帧:
mcp__core__browse_library({
  category: "sound-effects",
  query: "short whoosh transition",
});

mcp__core__edit_item({
  adds: [
    {
      type: "audio",
      assetId: "library:sound:whoosh-short",
      fromFrame: 120,
      trackId: "A1",
    },
  ],
});

仅在以下情况下,才使用 submit_sound 根据文本描述生成音效:

  • 用户明确要求生成音效、原创音效或定制音效。
  • 所需音效过于具体,现有音效库中没有。
  • browse_library({ category:"sound-effects", query }) 没有返回合适的匹配项。
// Custom/generated sound effect after the library has no suitable match
mcp__skill__submit_sound({ prompt: "A dog barking in the distance" });

// With custom duration (0.5-22 seconds)
mcp__skill__submit_sound({
  prompt: "Thunder and heavy rain",
  durationSeconds: 15,
});

// High prompt adherence
mcp__skill__submit_sound({
  prompt: "Sci-fi laser gun firing",
  promptInfluence: 0.8,
});

提升效果的小贴士:

  • 描述要具体:使用“A dog barking loudly”,而不只是“dog”。
  • 补充场景:“Footsteps on wooden floor in an empty room”。
  • 指定风格:“Cinematic whoosh”或“8-bit game sound”。

参数

TTS
字段描述备注
providerdoubao、elevenlabs 或 fish-audio必填
text要合成的文本必填
voiceId精选 ID 或 ChatCut 自定义语音 ID必填
speedRatio语速仅限 Doubao
modelIdElevenLabs 模型 ID仅限 ElevenLabs
stabilityElevenLabs 稳定性仅限 ElevenLabs
speedElevenLabs 语速仅限 ElevenLabs
name资源名称可选
自定义语音
操作必填字段结果
list无使用权限、名额数量、现有语音
check-create-access无收集参考音频前的权威创建权限检查
applycustomVoiceIdPro/就绪状态检查;选择语音但不生成
clonesourceAssetId、name、confirmedConsent、previewText可重复使用的 Fish Audio 语音及预览
previewcustomVoiceId、previewText更新后的短试听
renamecustomVoiceId、name更新产品/提供商显示名称
deletecustomVoiceId、confirmedDelete:true永久删除提供商语音并释放名额

不要使用或公开单独的 manage_fish_audio_voice 工具。Fish 模型 ID、公开/不公开发布、任意标签、封面图片以及提供商级目录管理均属于内部集成细节。只有在用户明确确认后才能删除;仅需更改名称时使用 rename。

音效
字段描述备注
prompt音效描述必填
durationSeconds时长0.5-22 秒
promptInfluence提示词遵循度0-1
name资源名称可选

语音

使用 manage_voice action="list" voiceType="all" 获取当前统一的候选语音列表、本地化显示名称、预览和提交 ID。

语音预设因服务提供方而异——切勿混用

官方语音 ID 因服务提供方而异。始终将返回的 provider 和 voiceId 配对使用;混用不同目录元组中的值会导致失败。

如果需要特定语音和特定语言:

  • 对于任何旁白语言,都要使用该 language 查询目录,并使用返回的 服务提供方/语音配对。不要猜测原始服务提供方 ID。

硬性规则——禁止的操作

  1. 切勿使用其他服务提供方的语音预设名称。
  2. 如果用户未指定具体语音,切勿在必须先执行自定义语音 list 的关卡之前展示官方语音推荐。
  3. 切勿根据明确或推断出的语音特征,将可播放预览的就绪自定义语音排除在综合试听界面之外。
  4. 切勿从语音推荐或选择界面中省略最后的克隆操作卡片。
  5. 如果用户仅宽泛地描述语音,且尚未确认具体预设,切勿提交 TTS。
  6. 对于当前请求,切勿在调用 manage_voice action="list" voiceType="all" 之前推荐或展示任何 TTS 语音选项。
  7. 切勿声称可以稳定控制年龄、地区口音、发音词典或精确时长;当前工具未将这些信息作为可靠字段提供。
  8. 除非用户提出要求,否则切勿用 TTS 替换原始录制语音。
  9. 在用户明确提交克隆流程要求的完整所有权/许可及合法使用承诺之前,切勿导入或克隆参考语音。切勿从附件、其他已完成字段、一般性批准或之前无关的上下文中推断用户已确认。
  10. 切勿通过向 submit_voice 或其他生成工具传入服务提供方语音 ID,绕过克隆语音的 Pro 检查。
  11. 如果用户已为当前克隆请求提供可用的参考语音,切勿强行打开原生克隆对话框或要求用户重新选择音频。应先检查访问权限,收集缺失的授权、名称和预览文本,然后使用其 ChatCut 音频资源 ID 进行克隆。
  12. 切勿将项目中已有的无关语音视为克隆参考或克隆许可。
  13. 切勿将克隆语音预览渲染为原始 <audio> HTML、Markdown 链接或裸 URL。应使用 widget-forms 的 playable_preview,并提供工具确切返回的 previewUrl;将 Retry / Apply 放在当前宿主要求的独立分支控件中。
  14. 切勿在中间消息中输出 <clone-voice/>,也不要在一次 Agent 运行中输出多次。先完成必需的工具调用;如果原生对话框仍是正确路径,则按其对话框开启顺序操作,然后停止。
  15. 切勿向用户透露 Doubao、ElevenLabs、Fish Audio、服务提供方模型名称、服务提供方专用 ID 或服务提供方 URL。使用「官方语音」和「克隆语音」这类产品术语,并从可见的错误和状态消息中清除服务提供方详情。

评论

支持 Markdown