本文档介绍了实时语音克隆系统除基本语音克隆工作流之外的高级技术和功能。本文档面向已熟悉系统基本操作并希望利用更复杂功能或进一步自定义系统的用户。
有关基本用法信息,请参阅 概述 和 用户界面。有关训练您自己模型的信息,请参阅 训练管道 文档。
该工具箱提供了强大的可视化功能,有助于理解语音特征和比较不同的说话者身份。
语音嵌入是固定大小的向量表示(默认 256 维),它捕获说话者声音独特的声学特征。这些嵌入是说话者身份与语音合成过程之间的桥梁。
说话者编码器通过以下步骤将音频样本转换为语音嵌入:
来源: encoder/inference.py110-154
该工具箱包含 UMAP(统一流形逼近与投影)可视化功能,可将高维语音嵌入投影到 2D 空间,从而更轻松地理解不同语音之间的关系。
使用 UMAP 投影
UMAP 投影需要至少 4 个话语才能生成有意义的可视化,如 UI.min_umap_points 中所定义。
可以可视化单个语音嵌入作为热图,展示嵌入维度上的值分布。这有助于识别特定语音最突出的特征。
来源: encoder/inference.py161-178 toolbox/ui.py62-79
虽然系统支持 LibriSpeech 和 VoxCeleb 等常见数据集,但您也可以使用自己的音频数据进行语音克隆。
该工具箱期望数据集遵循特定的目录结构
datasets_root/
├── dataset_name/
│ ├── speaker_name/
│ │ ├── utterance1.wav
│ │ ├── utterance2.mp3
│ │ └── ...
│ └── another_speaker/
│ └── ...
└── another_dataset/
└── ...
已识别的数据集名称在 toolbox/__init__.py 中定义,但您可以按照相同的结构添加自己的数据集。
您可以通过两种方式加载自定义数据集:
来源: toolbox/__init__.py137-160
为了获得自定义数据集的最佳结果:
语音克隆系统通过设置随机种子来实现确定性输出生成,这对于可重复的结果很有用。
您可以在命令行界面和图形工具箱中设置固定的随机种子
demo_cli.py 时使用 --seed 参数这确保每次输入相同的文本和参考声音都会产生完全相同的输出。
来源: demo_cli.py150-171 toolbox/__init__.py200-237
设置种子会影响管道中的不同组件
| 组件 | 种子的效果 |
|---|---|
| 合成器 | 控制梅尔频谱生成过程中的注意力权重和对齐 |
| 声码器 | 影响生成音频波形时的采样过程 |
| 编码器 | 不受种子影响(设计上是确定性的) |
当设置了种子时,系统会重新加载合成器和声码器模型,以确保完全可重现。
来源: demo_cli.py150-154 demo_cli.py168-171 toolbox/__init__.py211-212 toolbox/__init__.py236-241
命令行界面为将语音克隆集成到其他工作流中提供了额外的灵活性。
CLI 支持多个高级参数:
| 参数 | 目的 |
|---|---|
-e, --enc_model_fpath | 自定义编码器模型的路径 |
-s, --syn_model_fpath | 自定义合成器模型的路径 |
-v, --voc_model_fpath | 自定义声码器模型的路径 |
--cpu | 强制 CPU 处理,即使 GPU 可用 |
--no_sound | 禁用音频播放 |
--seed | 设置随机种子以进行确定性生成 |
使用示例
python demo_cli.py --enc_model_fpath=my_models/encoder.pt --seed=42 --cpu
来源: demo_cli.py18-40
CLI 演示提供了以编程方式集成语音克隆系统的参考
关键集成点包括
encoder.preprocess_wav()encoder.embed_utterance()synthesizer.synthesize_spectrograms()vocoder.infer_waveform()高级用户可以直接操作语音嵌入,以实现特定的语音特征。
通过在两个或多个说话者的嵌入之间进行插值,您可以创建融合了他们特征的声音。
这项技术允许进行富有创意的声音混合,同时保持自然听感。
来源: encoder/inference.py110-154
对于较长的音频,编码器会将音频分割成多个片段,然后再将它们平均成一个单一的嵌入。您可以访问这些部分嵌入以进行更详细的分析。
要访问部分嵌入,请使用
分析部分嵌入有助于识别较长录音中语音特征的变化。
来源: encoder/inference.py110-154 toolbox/__init__.py177-181
系统在可用时自动使用 GPU 加速,但您可以控制此行为
--cpu 标志或设置 os.environ["CUDA_VISIBLE_DEVICES"] = "-1" 来强制 CPU 处理CUDA_VISIBLE_DEVICES 环境变量选择特定 GPU为了在实时应用中实现更快的合成:
来源: demo_cli.py41-60 vocoder/inference.py(间接引用)
系统可以自动修剪生成音频中的静音部分,以获得更自然的声音效果。
当安装了 webrtcvad 包时,此功能在工具箱中默认启用,并且可以通过“增强声码器输出”复选框进行切换。
来源: toolbox/__init__.py58-62 toolbox/__init__.py265-267
工具箱允许为录音和播放选择不同的音频设备
工具箱提供了多种保存工作的方法
导出当前音频
来源: toolbox/ui.py137-149 toolbox/__init__.py123-130
| 问题 | 解决方案 |
|---|---|
| CUDA 内存不足 | 减小批次大小或使用更小的文本片段 |
| 自定义数据集质量差 | 确保音频干净且预处理正确 |
| 嵌入可视化未显示 | 至少添加 4 个发音(UMAP 的最小要求) |
| 生成速度慢 | 检查 GPU 利用率,考虑硬件加速 |
| 声音克隆不一致 | 使用目标说话人的多个参考样本 |
| WebRTC VAD 导入错误 | 安装可选的 webrtcvad 包 |
如果日志窗口中出现错误消息,它们通常包含有关问题所在以及如何修复的特定信息。