You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用facebook/mms-tts-eng模型时遭遇ushort格式错误,求解决方案

解决MMS-TTS模型生成音频时scipy保存WAV的格式错误

错误原因

scipy.io.wavfile.write默认会将输入的浮点型音频数据尝试转换为无符号短整型(ushort)存储,但Facebook MMS-TTS模型输出的waveform数据范围是**[-1.0, 1.0]**,远超出ushort的合法取值区间(0 ≤ 数值 ≤ 65535),导致格式转换失败触发报错。

解决步骤

  • 将模型输出的浮点波形数据缩放到ushort的合法范围,再转换为对应的数据类型
  • 修改保存WAV的代码逻辑,确保数据格式匹配

修改后的完整代码

from transformers import VitsModel, AutoTokenizer
import torch
import scipy
import numpy as np

model = VitsModel.from_pretrained("facebook/mms-tts-eng")
tokenizer = AutoTokenizer.from_pretrained("facebook/mms-tts-eng")

text = "some example text in the English language"
inputs = tokenizer(text, return_tensors="pt")

with torch.no_grad():
    output = model(**inputs).waveform

# 关键修改:将[-1.0,1.0]的浮点数据映射到ushort的[0,65535]范围并转类型
audio_data = (output.cpu().float().numpy() + 1.0) * 32767.5
audio_data = audio_data.astype(np.uint16)

scipy.io.wavfile.write("techno.wav", rate=model.config.sampling_rate, data=audio_data)

关键说明

  • 缩放公式(output + 1.0) * 32767.5的作用:把原数据的最小值-1映射为0,最大值1映射为65535,刚好覆盖ushort的全部合法区间
  • 转换为np.uint16类型后,scipy就能正确识别并保存为标准的16位无符号PCM格式WAV文件

内容的提问来源于stack exchange,提问作者popstick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 15:00:55