使用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
相关产品推荐
相关产品推荐

