如何用 tts_with_vc_to_file 让 TTS 单说话人模型输出目标音色?
【免费下载链接】TTS🐸💬 - a deep learning toolkit for Text-to-Speech, battle-tested in research and production项目地址: https://gitcode.com/GitHub_Trending/tt/TTS
单说话人 TTS 模型只能合成固定的一个音色,无法直接“克隆”别人声音。Coqui TTS 的 Python API 提供了tts_with_vc_to_file:它先用 TTS 模型把文本合成出来,再用语音转换(voice conversion)模型把合成结果转成speaker_wav指定说话人的音色,最后写入 wav 文件。按照 docs/source/inference.md 的说法,这种方式“can clone voices by using any model in 🐸TTS”。下文以仓库文档中的单说话人示例为准,说明完整的操作路径。
准备条件
先安装 TTS(文档推荐用 PyPI):
pip install TTS需要准备两样东西:
- 一个单说话人 TTS 模型。可以用 CLI 的
tts --list_models或 Python 的TTS().list_models()列出可用模型,从列表里挑一个单说话人模型。文档示例使用德语单说话人模型tts_models/de/thorsten/tacotron2-DDC。 - 一段目标说话人的参考 wav,作为目标音色的参考音频。文档示例中路径写作
target/speaker.wav,实际操作时替换成你自己的参考音频路径。
API docstring 中提到“Some models might be too slow on CPU”,如果你有 GPU,可以按文档的模式把模型移到设备上。
这个方法内部做了什么
结合 TTS/api.py 中tts_with_vc的实现,tts_with_vc_to_file执行三步:
- 用当前加载的 TTS 模型合成文本,先写入一个临时 wav 文件;
- 如果还没有加载语音转换模型,自动加载
voice_conversion_models/multilingual/vctk/freevc24,以临时 wav 作为source_wav、以传入的speaker_wav作为target_wav做音色转换; - 把转换后的音频保存到
file_path,采样率取自语音转换模型配置中的vc_config.audio.output_sample_rate。
注意speaker_wav在这个调用里扮演的是目标音色参考,而不是“要被转换掉的源声音”——源声音是 TTS 模型刚刚合成的那一段。另外,与tts_to_file不同,tts_with_vc_to_file的源码实现中没有返回值,判断是否成功以file_path处的文件是否生成为准。
执行步骤
文档给出的单说话人主路径示例(README.md 与 docs/source/inference.md 内容一致):
from TTS.api import TTS # Init TTS with the target model name tts = TTS("tts_models/de/thorsten/tacotron2-DDC") tts.tts_with_vc_to_file( "Wie sage ich auf Italienisch, dass ich dich liebe?", speaker_wav="target/speaker.wav", file_path="output.wav" )参数说明(来自 TTS/api.py 的函数签名与 docstring):
text(第一个位置参数):要合成的文本。示例使用德语单说话人模型,因此文本是德语。speaker_wav:目标说话人的参考 wav 路径,本场景的必需输入;示例路径target/speaker.wav需替换为你自己的文件。file_path:输出文件路径,默认"output.wav"。language:多语言模型的语言代码。对非多语言模型传入该参数会抛出ValueError("Model is not multi-lingual butlanguageis provided.")(_check_arguments的检查),所以德语单说话人示例中没有传它。speaker:多说话人模型的说话人名称,单说话人模型不需要。split_sentences:默认True,分句合成再拼接音频;设为False会占用更多显存,并可能触发模型特有的文本长度或显存限制。
首次运行时模型会自动下载,构造函数可用progress_bar参数控制下载进度条的显示(文档其他示例中写作TTS("...", progress_bar=False))。
有 GPU 时可选地把模型移到设备:
import torch device = "cuda" if torch.cuda.is_available() else "cpu" tts = TTS("tts_models/de/thorsten/tacotron2-DDC", progress_bar=False).to(device)可选分支:fairseq 多语言单说话人模型。名称格式为tts_models/<lang-iso_code>/fairseq/vits,覆盖约 1100 种语言,同样支持该 API:
api = TTS("tts_models/deu/fairseq/vits") api.tts_with_vc_to_file( "Wie sage ich auf Italienisch, dass ich dich liebe?", speaker_wav="target/speaker.wav", file_path="output.wav" )结果验证与已知限制
- 调用结束后,检查
file_path指定的输出文件是否生成,播放确认音色已转为speaker_wav中的说话人。文档对语音转换模型的描述是“Convert source wav to target speaker”,即输出应带目标参考音频的音色。 - 输出文件的采样率由语音转换模型配置(
vc_config.audio.output_sample_rate)决定,而不是 TTS 模型本身的输出采样率,这是源码中save_wav的实际行为。 - 走
tts_with_vc_to_file时,语音转换模型固定为自动加载的voice_conversion_models/multilingual/vctk/freevc24;文档没有提供在此调用中更换其他 VC 模型的参数。如果只是想把一段已有音频转成目标音色而不经过 TTS,可以用文档中的独立 APIvoice_conversion_to_file(source_wav=..., target_wav=..., file_path=...),那是另一条调用路径,不属于本场景。 - 单说话人模型对文本语言有固定性:示例中的
tts_models/de/thorsten/tacotron2-DDC对应德语文本。需要其他语言时,用tts --list_models/TTS().list_models()选择对应语言的单说话人模型再走同样的调用。
【免费下载链接】TTS🐸💬 - a deep learning toolkit for Text-to-Speech, battle-tested in research and production项目地址: https://gitcode.com/GitHub_Trending/tt/TTS
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考