
Coqui TTS 推理实战tts 命令行、tts-server 与 Python TTS API 三入口完全指南【免费下载链接】TTS - a deep learning toolkit for Text-to-Speech, battle-tested in research and production项目地址: https://gitcode.com/GitHub_Trending/tt/TTS本文围绕 Coqui TTS 仓库中的推理文档docs/source/inference.md展开系统讲解安装后的三大推理入口tts命令行工具、tts-server本地演示服务器和from TTS.api import TTS的 Python API。读完本文你将能够用发布模型或自训练模型完成文本转语音、多说话人/多语言合成、声音克隆与声音转换并从源码层面理解Synthesizer、ModelManager等关键组件在幕后做了什么。一、安装与三大入口总览首先通过 PyPI 安装$ pip install TTS安装完成后仓库的 setup.py 中通过entry_points注册了两个终端命令entry_points{console_scripts: [ttsTTS.bin.synthesize:main, tts-server TTS.server.server:main]}因此tts命令实际指向 CLI 入口脚本tts-server指向 演示服务器。加上 Python 接口安装后共有三种推理方式命令行接口CLItts本地演示服务器tts-serverPythonfrom TTS.api import TTS版本前提当前仓库TTS/VERSION为 0.22.0setup.py 明确限制了 Python 版本需满足 3.9 且 3.12不满足时安装脚本会直接抛出RuntimeError。二、命令行入口tts2.1 列出与查询已发布模型tts --list_models模型元数据来自包内的模型注册表 TTS/.models.json由 ModelManager 负责读取、检索和下载。CLI 还支持按名称或索引查询模型详情这些信息在tts -h的帮助文本中有完整说明# 按完整名称查询格式 model_type/language/dataset/model_name tts --model_info_by_name tts_models/tr/common-voice/glow-tts tts --model_info_by_name vocoder_models/en/ljspeech/hifigan_v2 # 按 --list_models 输出中的序号查询 tts --model_info_by_idx tts_models/32.2 运行发布模型使用发布模型及其默认声码器从列表中复制完整模型名即可tts --text Text for TTS \ --model_name type/language/dataset/model_name \ --out_path folder/to/save/output.wav同时指定 TTS 与声码器模型。注意并非每个声码器都与每个 TTS 模型兼容tts --text Text for TTS \ --model_name tts_models/language/dataset/model_name \ --vocoder_name vocoder_models/language/dataset/model_name \ --out_path folder/to/save/output.wav从 synthesize.py 的源码可以看到默认声码器的选择逻辑当--model_name命中.models.json中的tts_models条目时若该条目声明了default_vocoder且用户未显式指定--vocoder_name则自动取条目中的default_vocoder字段下载if default_vocoder in model_item: args.vocoder_name ( model_item[default_vocoder] if args.vocoder_name is None else args.vocoder_name )另外不指定任何模型时 CLI 默认使用tts_models/en/ljspeech/tacotron2-DDCsynthesize.py 中--model_name的默认值输出默认写到tts_output.wav。2.3 运行自训练模型只带 TTS 模型无外部声码器时使用 Griffin-Lim 重建波形tts --text Text for TTS \ --model_path path/to/model.pth \ --config_path path/to/config.json \ --out_path folder/to/save/output.wavTTS 与声码器一起指定tts --text Text for TTS \ --config_path path/to/config.json \ --model_path path/to/model.pth \ --out_path folder/to/save/output.wav \ --vocoder_path path/to/vocoder.pth \ --vocoder_config_path path/to/vocoder_config.json在 Synthesizer 中“Griffin-Lim 兜底”是一个显式开关use_gl self.vocoder_model is None。只有当声码器未加载时才在 TTS 模型侧用 Griffin-Lim 直接由 mel 谱还原波形加载了声码器后则走vocoder_model.inference(vocoder_input)的神经声码器路径。2.4 多说话人模型先列出该模型可用的说话人 ID再指定目标说话人tts --model_name tts_models/language/dataset/model_name --list_speaker_idxs # 列出可用的说话人 ID tts --text Text for TTS. --out_path output/path/speech.wav --model_name tts_models/language/dataset/model_name --speaker_idx speaker_id实现上--list_speaker_idxs会打印synthesizer.tts_model.speaker_manager.name_to_id映射synthesize.py若使用多说话人模型却既未给--speaker_idx也未给--speaker_wavCLI 会提示并直接退出避免无声合成。多语言模型可用--language_idx/--list_language_idxs做类似操作此外 CLI 还支持--speaker_wav可用多个文件取平均 d-vector、--gst_style、--capacitron_style_wav/--capacitron_style_text等条件参数均定义在 synthesize.py 的参数表中。2.5 声音转换Voice Conversion运行已发布的 FreeVC 声音转换模型tts --model_name voice_conversion/language/dataset/model_name \ --source_wav my/source/speaker/audio.wav \ --target_wav my/target/speaker/audio.wav \ --out_path folder/to/save/output.wav在 CLI 中当model_item[model_type] voice_conversion_models时走synthesizer.voice_conversion(source_wav..., target_wav...)分支synthesize.py底层是 FreeVC 模型实现的voice_conversion方法。2.6 管道输出与其他实用参数帮助文本中还给出了把合成波形直接送进播放器的玩法tts --text Text for TTS --pipe_out --out_path output/path/speech.wav | aplay--pipe_out对应 Synthesizer.save_wav 的pipe_out参数将 wav 二进制数据写到 stdout。其他常用参数--use_cuda/--device选择计算设备--progress_bar控制下载进度条默认开启--save_spectogram保存原始频谱供后续处理--reference_wav/--reference_speaker_idx用于以参考音频做音色迁移。提示如果偏好从 TTS 项目目录直接运行可用./TTS/bin/synthesize.py替代tts命令。三、演示服务器tts-servertts-server -h # 查看帮助 tts-server --list_models # 列出可用模型官方说明演示服务器并非为性能优化而设计它的价值在于提供一个与模型交互的简易 Web 界面。界面功能与 CLI 基本一致# 使用发布模型及其默认声码器启动服务器 tts-server --model_name type/language/dataset/model_name若所选模型是多说话人 TTS 模型可在 Web 界面中切换不同说话人再合成。同时指定声码器tts-server --model_name type/language/dataset/model_name \ --vocoder_name type/language/dataset/model_name从源码结构看tts-server入口是 TTS/server/server.py页面模板位于 TTS/server/templates/index.html 与 details.html运行示例另见 TTS/server/README.md其中还给出--use_cuda True的 GPU 启动方式以及用--tts_checkpoint/--tts_config/--vocoder_checkpoint/--vocoder_config加载自训练模型的写法。四、Python APITTS.api.TTSPython 入口是 TTS/api.py 中的TTS类继承自nn.Module它是 Synthesizer 与 ModelManager 的薄封装。4.1 构造参数TTS(...)的签名与语义摘自 api.py 的 docstring参数说明model_name已发布模型名可用TTS().list_models()列出。含tts_models前缀走 TTS 加载含voice_conversion_models前缀走声音转换加载model_path/config_path自训练模型检查点与配置文件路径vocoder_path/vocoder_config_path自训练声码器检查点与配置路径progress_bar下载模型时是否显示进度条默认Truegpu是否启用 GPU默认False源码中已标注该参数将被弃用建议改用tts.to(device)构造函数中的路由逻辑api.pyif model_name is not None and len(model_name) 0: if tts_models in model_name: self.load_tts_model_by_name(model_name, gpu) elif voice_conversion_models in model_name: self.load_vc_model_by_name(model_name, gpu) else: self.load_model_by_name(model_name, gpu)按名称加载时download_model_by_name会先经ModelManager.download_model拉取模型文件若条目声明了default_vocoder会连带下载默认声码器api.py。对 Fairseq 这类多文件目录模型则返回model_dir并交由模型自身从目录加载。4.2 多语言声音克隆模型XTTS v2import torch from TTS.api import TTS # 获取设备 device cuda if torch.cuda.is_available() else cpu # 列出可用模型 print(TTS().list_models()) # 初始化 TTS tts TTS(tts_models/multilingual/multi-dataset/xtts_v2).to(device) # 运行 TTS # 由于这是多语言声音克隆模型必须提供目标 speaker_wav 和 language # 输出为振幅值列表 wav tts.tts(textHello world!, speaker_wavmy/cloning/audio.wav, languageen) # 直接写入文件 tts.tts_to_file(textHello world!, speaker_wavmy/cloning/audio.wav, languageen, file_pathoutput.wav)模型是否为多说话人/多语言可通过属性判断它们分别对应 api.py 中的is_multi_speaker、is_multi_lingual并从speaker_manager/language_manager读取tts.speakers、tts.languages。4.3 单说话人模型# 以目标模型名初始化 tts TTS(model_nametts_models/de/thorsten/tacotron2-DDC, progress_barFalse) # 运行 TTS tts.tts_to_file(textIch bin eine Testnachricht., file_pathOUTPUT_PATH)4.4 多语言声音克隆YourTTS英/法/葡tts TTS(model_nametts_models/multilingual/multi-dataset/your_tts, progress_barFalse).to(cuda) tts.tts_to_file(This is voice cloning., speaker_wavmy/cloning/audio.wav, languageen, file_pathoutput.wav) tts.tts_to_file(Cest le clonage de la voix., speaker_wavmy/cloning/audio.wav, languagefr, file_pathoutput.wav) tts.tts_to_file(Isso é clonagem de voz., speaker_wavmy/cloning/audio.wav, languagept, file_pathoutput.wav)4.5 声音转换与“TTS VC 伪克隆”用 FreeVC 把source_wav的说话人转换为target_wav的说话人tts TTS(model_namevoice_conversion_models/multilingual/vctk/freevc24, progress_barFalse).to(cuda) tts.voice_conversion_to_file(source_wavmy/source.wav, target_wavmy/target.wav, file_pathoutput.wav)用任意单说话人 TTS 模型 声音转换模型组合实现克隆“this way, you can clone voices by using any model in TTS”tts TTS(tts_models/de/thorsten/tacotron2-DDC) tts.tts_with_vc_to_file( Wie sage ich auf Italienisch, dass ich dich liebe?, speaker_wavtarget/speaker.wav, file_pathoutput.wav )从源码看tts_with_vc 的流程是先把文本合成到临时 wavtempfile.NamedTemporaryFile若尚未加载声音转换模型则自动加载voice_conversion_models/multilingual/vctk/freevc24再调用voice_converter.voice_conversion(source_wav临时文件, target_wavspeaker_wav)。也就是说上述示例无需显式加载 FreeVCAPI 会按需补载。4.6 Fairseq 模型约 1100 种语言Fairseq 模型的名称格式为tts_models/lang-iso_code/fairseq/vits语言 ISO 代码清单可在包内模型注册表 TTS/.models.json 及源码注释api.py中查阅。示例from TTS.api import TTS api TTS(model_nametts_models/eng/fairseq/vits).to(cuda) api.tts_to_file(This is a test., file_pathoutput.wav) # 在线on the fly声音转换 api TTS(tts_models/deu/fairseq/vits) api.tts_with_vc_to_file( Wie sage ich auf Italienisch, dass ich dich liebe?, speaker_wavtarget/speaker.wav, file_pathoutput.wav )加载链路在 Synthesizer 中按model_dir处理路径含fairseq时调用_load_fairseq_from_dir内部以VitsConfig构造 VITS 并执行load_fairseq_checkpoint(checkpoint_dirmodel_dir)synthesizer.py。4.7 参数校验_check_argumentstts/tts_to_file在真正合成前都会先执行 _check_arguments常见报错来自这些硬性规则多说话人模型必须提供speaker或speaker_wav否则抛出ValueError多语言模型必须提供language单说话人/单语言模型却传入speaker/language也会报错Tortoise 的voice_dir情形除外emotion与speed只能同时用于已停服的 Coqui Studio 模型二者同时非空会直接抛错。这些校验帮助你在调用阶段而非合成中途就发现参数与模型能力不匹配的问题。五、底层实现Synthesizer 的推理管线无论 CLI、服务器还是 Python API最终都汇聚到 Synthesizer.tts。理解它有助于排查实际合成中的行为分句合成输入文本默认经pysbd.Segmenter(languageen, cleanTrue)切成句子逐句合成后拼接split_sentencesFalse会一次性送入整段文本——官方注释提醒这会消耗更多 VRAM 并可能触碰模型文本长度或显存上限api.py。说话人/语言解析多说话人模型按name_to_id把speaker_name映射为 speaker id或从speaker_wav用 speaker encoder 现场计算 d-vectorcompute_embedding_from_clip多语言模型同理走language_manager.name_to_id语言名不存在时会明确列出可用语言。声码器衔接TTS 输出的 mel 谱先按 TTS 音频配置反归一化再按声码器配置重新归一化若两者采样率不一致还会打印 interpolating tts model output.并做插值synthesizer.py。静音修剪与性能统计配置开启do_trim_silence时自动裁剪首尾静音每次合成结束打印处理耗时与实时率 Real-time factor: {process_time / audio_time}这是评估某模型/设备推理速度的直接依据。模型下载与缓存ModelManager.download_modelmanage.py按.models.json条目下载并本地缓存含 GitHub / HuggingFace 两种下载通道CLI 与 Python API 共用同一注册表 TTS/.models.json其中tts_models、vocoder_models、voice_conversion_models三大类型与文档中的type/language/dataset/model_name命名格式一一对应。六、小结与适用边界命令选择建议脚本化/批量任务用ttsCLI配合--list_models、--model_info_by_name检索模型交互式试听用tts-server工程集成用TTS.api.TTS尤其是声音克隆speaker_wav与 TTSVC 组合场景。兼容性约束声码器与 TTS 模型并非两两兼容Fairseq 多文件模型只能按tts_models/lang-iso/fairseq/vits名称加载Python 环境需落在 3.9~3.11 区间。延伸阅读本文所有示例均以当前仓库版本 0.22.0源码为准进一步实现细节可对照 TTS/api.py、TTS/bin/synthesize.py、TTS/utils/synthesizer.py、TTS/utils/manage.py 与 TTS/server/README.md推理相关的回归测试位于 tests/inference_tests/test_synthesizer.py 和 tests/inference_tests/test_synthesize.py。【免费下载链接】TTS - a deep learning toolkit for Text-to-Speech, battle-tested in research and production项目地址: https://gitcode.com/GitHub_Trending/tt/TTS创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考