如何用 NeMo Magpie-TTS 合成语音并用参考音频克隆音色
【免费下载链接】SpeechA scalable generative AI framework built for researchers and developers working on Large Language Models, Multimodal, and Speech AI (Automatic Speech Recognition and Text-to-Speech)项目地址: https://gitcode.com/GitHub_Trending/nem/Speech
如果你需要用 NeMo Speech 中的 Magpie-TTS 完成两件事——把文本合成为语音,并用几秒参考音频让合成结果模仿指定说话人的音色——这篇文章给出仓库中两条可执行路径:单句快速合成用MagpieTTSModel.do_tts,带参考音频的音色克隆用推理脚本examples/tts/magpietts_inference.py配合 manifest。适用前提是已经安装 NeMo(见 安装指南 的前置说明),并已准备好 TTS checkpoint 和音频 codec 模型;公开的多语言 357M checkpoint 与 codec 均托管在 Hugging Face 的nvidia/magpie_tts_multilingual_357m和nvidia/nemo-nano-codec-22khz-1.89kbps-21.5fps(模型名来自 Magpie-TTS 文档 与 微调文档)。
单句合成:do_tts 快速路径
NeMo 入门指南 展示了最小合成示例:
from nemo.collections.tts.models import MagpieTTSModel import soundfile as sf # Load model (multilingual 357M, from Hugging Face) model = MagpieTTSModel.from_pretrained("nvidia/magpie_tts_multilingual_357m") model.eval() # Generate speech audio, audio_len = model.do_tts( transcript="Hello! Welcome to NeMo Speech AI.", language="en", ) # Save to file sf.write("output.wav", audio[0].cpu().numpy(), 22050) print("Speech saved to output.wav")保存后用任意播放器听output.wav即可确认合成成功。
需要注意do_tts的适用范围:源码 magpietts.py 中该方法只支持 baked context embedding 的上下文注入,不支持音频条件(即不支持用参考音频克隆音色);在没有 baked context embedding 的 checkpoint 上调用会抛出ValueError: Model does not have a baked context embedding。因此do_tts适合验证环境和做单说话人合成;要按参考音频克隆音色,必须走下一节的 manifest + 推理脚本路径。参数含义(依据源码 docstring):
language:语言代码,支持的值取决于模型的 tokenizer 配置,如"en"、"de"、"es";apply_TN:是否用nemo_text_processing做文本规范化,True时需要该包已安装;speaker_index:仅适用于带 baked context embeddings 的多说话人模型,取值范围[0, num_baked_speakers - 1]。
准备参考音频与数据集配置
带参考音频的推理按数据集(manifest)批量执行,每条记录自带一段参考音频。准备分三步:
1. 参考音频文件。把克隆目标说话人的参考音频放入音频目录。微调文档 对参考音频给出了建议:时长约 3 秒以上、与目标音频来自同一说话人,且说话人相似度较高(文档以 TitaNet 相似度 ≥ 0.6 为例)效果更佳。
2. manifest 文件。每行一个 JSON,最小字段如下(字段定义与示例格式来自 magpietts-finetuning.rst;路径相对于audio_dir,也可用绝对路径):
{ "audio_filepath": "relative/path/to/audio.wav", "text": "transcript of the utterance", "duration": 5.2, "context_audio_filepath": "relative/path/to/context.wav" }其中context_audio_filepath就是音色克隆所用的参考音频。
3. 数据集配置 JSON。推理脚本通过--datasets_json_path加载数据集配置(格式见仓库自带示例 evalset_config.json):
{ "my_clone_set": { "manifest_path": "/path/to/my_clone_manifest.json", "audio_dir": "/path/to/my_audio_dir", "feature_dir": null } }数据集名(如my_clone_set)之后会出现在输出目录名里,也可用--datasets参数挑选要处理的子集。脚本启动时会校验 manifest 与音频目录是否存在,路径缺失会直接报错,可尽早发现配置问题。
运行推理并克隆音色
执行推理脚本(参数与命令形式来自 Magpie-TTS 文档 及 magpietts_inference.py 的参数定义;/path/to/...处替换为你自己的模型与数据路径):
python examples/tts/magpietts_inference.py \ --nemo_files /path/to/magpietts_model.nemo \ --codecmodel_path /path/to/audio_codec.nemo \ --datasets_json_path /path/to/my_evalset_config.json \ --datasets my_clone_set \ --out_dir /path/to/output \ --batch_size 1 \ --temperature 0.6 \ --topk 80 \ --use_cfg \ --cfg_scale 2.5各参数说明:
--nemo_files:TTS checkpoint 的.nemo文件(也可改用--hparams_files+--checkpoint_files加载.ckpt,二选一);--codecmodel_path(必填):音频 codec 模型路径,本地文件或用nvidia/nemo-nano-codec-22khz-1.89kbps-21.5fps下载的模型;--datasets_json_path(必填):上面第 3 步的数据集配置 JSON;--out_dir(必填)为输出目录;--temperature:采样温度,值越低输出越确定、越高变化越多;--topk:采样只从概率最高的 k 个候选 token 中选取;--use_cfg/--cfg_scale:启用 classifier-free guidance 并设置其强度,用于增强对条件信息(含音色条件)的遵循度;--tokenizer_name默认english_phoneme,当数据集配置未指定语言专属 tokenizer 时生效;--language默认en。
文档同时指出:生产部署中可在推理时保留 attention prior(ModelInferenceParameters默认apply_attention_prior=True),把 cross-attention 向单调对齐方向轻微约束,降低训练分布外文本出现对齐漂移的风险;若使用带 frame stacking 训练的模型,加--use_local_transformer启用 Local Transformer,MaskGit 解码模式用--maskgit_n_steps控制迭代次数(以少量质量换取更快的推理)。
验证结果
推理完成后,生成结果写入--out_dir下按 checkpoint、语言和数据集名命名的目录。核心产物:
predicted_audio_<idx>.wav:按 manifest 顺序生成、与text字段对应的合成语音;context_audio_<idx>.wav:脚本从audio_dir复制过来的参考音频,方便与生成结果并排试听核对音色。
听感之外,脚本提供量化评估:追加--run_evaluation后,会对生成音频计算 CER(用默认 ASR 模型nvidia/parakeet-tdt-1.1b转写后对比文本)、说话人相似度 SSIM(默认--sv_model titanet)等指标,写出{dataset}_metrics_*.json、逐条filewise指标和all_experiment_metrics.csv到输出目录。若想在验收时硬性把关,可以传入质量目标:
--run_evaluation \ --sv_model titanet \ --ssim_target 0.6 \ --cer_target 0.05其中--ssim_target的取值参考 微调文档 对参考音频"说话人相似度 ≥ 0.6"的建议。脚本在结束时对不达标会直接报错,例如SSIM 0.4821 below target 0.6000或CER 0.0812 exceeds target 0.0500(报错文案见 magpietts_inference.py);全部达标则打印Inference and evaluation completed successfully.。
限制与说明
do_tts路径不适用于参考音频克隆音色(源码 docstring 明确 "NO audio conditioning",仅支持 baked context embedding),本文两条路径的适用边界务必分清;- 长文本生成为 beta 特性且目前仅支持英文,输入需要带标点、尤其是句子边界,详见 Longform 推理指南;
- 输出采样率固定为 22050(与
sf.write示例一致);manifest 中未提供context_audio_filepath的记录只做普通文本合成,不做音色克隆。
【免费下载链接】SpeechA scalable generative AI framework built for researchers and developers working on Large Language Models, Multimodal, and Speech AI (Automatic Speech Recognition and Text-to-Speech)项目地址: https://gitcode.com/GitHub_Trending/nem/Speech
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考