把一句英文写成 WAV 音频,可以用 MMS-TTS 的英文公开检查点在本地合成。本文完成“文字 → 波形 → WAV → 试听核对”的最小流程,适合学习语音合成接口;它不克隆任何人的声音,也不是语音识别。
先看模型语言和许可
facebook/mms-tts-eng 是英文 VITS 语音合成模型。模型许可为 CC-BY-NC-4.0,含非商业限制;不要把“可以下载运行”当成已获得商业配音或广告用途授权。其他语言需要对应检查点,英文模型不能直接当中文配音器。这里不发布模型生成的音频,只提供可复现的方法。

创建环境并安装音频依赖
Windows 使用以下独立环境,macOS/Linux 用 python3 并替换解释器路径。首次加载会联网下载模型和 tokenizer,之后若需要离线执行,需完整保存本地模型目录再验证;本篇代码的主流程仍按模型名加载,不宣称完全离线。
py -m venv .venv
.venv\Scripts\python -m pip install "torch>=2.6" "transformers==4.57.1" safetensors
.venv\Scripts\python -m pip install numpy scipy
生成波形,按模型采样率写文件
保存为 tts_demo.py,执行 .venv\Scripts\python tts_demo.py。先用一条不含人名、金额和缩写的英文句子检查清晰度。波形取第一个批次元素后为一维数组,WAV 的 rate 直接读取 model.config.sampling_rate;不要随意写另一个采样率,否则播放速度和音高会出错。
from pathlib import Path
import numpy as np
import torch
from scipy.io import wavfile
from transformers import VitsModel, AutoTokenizer, set_seed
model_id = "facebook/mms-tts-eng"
model = VitsModel.from_pretrained(model_id).eval()
tokenizer = AutoTokenizer.from_pretrained(model_id)
text = "Please submit the report before Friday afternoon."
inputs = tokenizer(text, return_tensors="pt")
if inputs["input_ids"].numel() == 0:
raise ValueError("Text produced no input tokens")
set_seed(555)
with torch.inference_mode():
waveform = model(**inputs).waveform[0].cpu().float().numpy()
if waveform.ndim != 1 or waveform.size == 0 or not np.isfinite(waveform).all():
raise ValueError("Invalid waveform")
rate = int(model.config.sampling_rate)
wavfile.write("english_demo.wav", rate, waveform)
stored_rate, stored_audio = wavfile.read("english_demo.wav")
assert stored_rate == rate and stored_audio.shape == waveform.shape
print({"path": str(Path("english_demo.wav").resolve()), "sampling_rate": rate,
"samples": int(waveform.size), "duration_seconds": waveform.size / rate})
程序验收与试听分开做
程序断言检查波形非空、数值有限、写入后的采样率与样本形状一致。打开实际 english_demo.wav,核对是否听到了完整句子,特别是 Friday、report 和 before 等词;再检查开头、结尾有没有遗漏。文件存在不等于英文读对,打印的 duration_seconds 也不是模型质量指标。
数字、缩写和随机性怎样处理
模型资料说明持续时长预测带随机性,本例设置随机种子便于同环境检查;这不保证不同设备与不同版本的波形逐位相同。后续可加入日期、数字和缩写对照,先把真实想表达的读法写成明确英文单词,再试听是否保留原意。不要因为代码成功就把电话号码或金额音频直接用于业务通知。
故障与适用边界
出现无法下载时先区分网络与文件权限;波形为空或非有限值应停止保存。内存不足要检查权重和输入长度,长稿可按句分开生成并逐段核对;本例没有实现无缝拼接、字幕对齐或音色选择。朗读内容含不合适的停顿时,先改标点和明确读法,再用同句复测,不把一次调参当成固定改善效果。
本文已核对官方接口与模型资料,示例输入为人为构造;未在本文环境下载并实跑所列公开模型,未测速度或任务准确率。验收需由你在自己的机器上执行,不能把示例程序当成真实任务效果评测。
官方资料
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/31359.html