Voice Clone 是一个本地语音克隆技能,用于在指定的 MLX 运行时环境中,用已保存的克隆声音档案生成语音,并对生成结果进行完整性校验;也可以从用户授权的参考录音出发,制作可复用的 Qwen3-TTS 声音档案。
【运行环境】 该技能使用由 VOICE_CLONE_PROJECT 指定的本地 MLX 运行时,默认路径为 ~/dev/VoiceCloning。该目录应包含 Qwen3-TTS 1.7B Base 8-bit 模型、Python 3.11 环境、已保存的声音档案以及 clone_voice.py。源录音应视为不可变文件;只能使用用户提供或授权的声音,未经明确要求不得上传、发布或发送生成的语音。
【主要能力】
- 使用已有声音档案生成语音:生成脚本读取档案中的 reference.wav 与 reference.txt,调用本地 Base 模型生成带时间戳的 24 kHz 单声道 PCM WAV,默认输出到 $VOICE_CLONE_PROJECT/output/,也可通过 --output 指定位置。
- 分块处理多句旁白:脚本会将前置句子尽量按最多 220 字符分组,并始终单独生成最后一句;分块之间以 220 ms 静音连接,不对语音做淡入淡出,也不追加尾部静音。可通过 --max-chunk-characters、--between-chunks-ms、--chunks-dir 调整节奏或保留审计分块。
- 输出校验:verify_output.py 检查 24 kHz 单声道 PCM 格式,用本地缓存的 MLX Whisper Large v3 Turbo 模型重新转写,检查预期最后一句是否出现在结尾,并执行 RELEASE_CHECK(结尾 20 ms 峰值幅度不超过阈值,默认 0.02)与 TRAIL_CHECK(近静音尾部至少 100 ms,默认值)。RELEASE_CHECK 用于防止最后一个音素被截断;TRAIL_CHECK 用于防止语音结束后文件立即结束而听感上被切断。
- 内容校验与重试:若内容校验失败,可检查转写并最多重试一次;若失败仅限于数字写法、空格或近同音词,可能是 ASR 伪影,而转写结尾出现目标文本没有的词则需要重新生成。
- 句内边界处理:一个分块包含多句时,模型可能压缩句间停顿;可按目标文本统计 150 ms 以上且前 20 ms 低于 0.05 的静音,检查每个句边界是否有一处干净停顿。修复方式是将除最后一句外的句子用空行连接生成,最后一句单独生成并带尾部标点,再以约 100 ms 停顿拼接。仅在标点方法反复失败时,才使用受保护的句子恢复方法,并以版本化文件名保留记录。
- 视频时间线使用:以直接生成的 WAV 为准,除非明确要求,不添加淡入淡出或静音尾;应逐块检查而非只看场景最后一块,并从编码后的资产推导场景时长、考虑转场重叠、确保语音间隔至少 0.5 秒。批量处理应使用版本化文件名并保留源文本与分块映射清单。
- 准备新声音档案:用 ffprobe 与 silencedetect 检查源音频,用 mlx_whisper.cli(模型 mlx-community/whisper-large-v3-turbo、正确语言、JSON 输出、词级时间戳)转写,选取约 5–15 秒的干净完整语句,确认精确转写后运行 prepare_voice.py,生成 24 kHz 单声道裁剪、响度归一化的 reference.wav 与 reference.txt。该脚本拒绝覆盖已有档案。
- 交付:报告所选声音档案、生成文本、时长、格式与校验结果,并以绝对路径在响应中呈现音频。可复用档案保留在 $VOICE_CLONE_PROJECT/voices/<voice-id>/。
【使用方式】 列出声音档案:python3 <skill-directory>/scripts/generate_voice.py --list 生成语音:python3 <skill-directory>/scripts/generate_voice.py --voice jin --text "읽을 문장" 校验输出:python3 <skill-directory>/scripts/verify_output.py --audio "/absolute/path/to/output.wav" --expected-text "읽을 문장" --language ko 准备新档案:python3 <skill-directory>/scripts/prepare_voice.py --source "/absolute/path/to/reference.m4a" --voice new-voice-id --start 0.25 --end 7.25 --transcript "基准语音中实际说出的准确句子"
【适用场景与限制】 适用于本地化的语音克隆实验、旁白生成、视频时间线配音以及构建可复用声音档案。限制包括:依赖特定本地模型与环境;默认语言为韩语,除非文本或请求明确指示其他语言;仅可使用授权声音;不得用于欺骗、冒充或暗示背书;音频结尾完整性不能仅靠转写判断,需结合 RELEASE_CHECK、TRAIL_CHECK 与试听确认。