使用NVIDIA NeMo生成音频时遇soundfile格式不识别错误求助
解决NeMo TTS生成音频时的soundfile格式识别错误
问题原因
vocoder.convert_spectrogram_to_audio返回的音频数组是二维形状([1, 采样点数]),而soundfile写入WAV文件时要求输入一维数组,维度不匹配导致格式识别报错。
修复方法
只需要把二维数组压缩成一维即可,有两种简单方式:
方式1:使用numpy的squeeze方法
修改音频转换后的代码:
audio = audio.to('cpu').detach().numpy() # 去掉多余的维度 audio = audio.squeeze() # 新增这一行 sf.write("speech.wav", audio, 22050)
方式2:直接索引取第一维
也可以直接通过索引提取一维数组:
audio = audio.to('cpu').detach().numpy()[0] # 直接取第0维 sf.write("speech.wav", audio, 22050)
完整修复后的代码
import soundfile as sf from nemo.collections.tts.models import FastPitchModel from nemo.collections.tts.models import HifiGanModel spec_generator = FastPitchModel.from_pretrained("tts_en_fastpitch") vocoder = HifiGanModel.from_pretrained(model_name="tts_hifigan") text = "Just keep being true to yourself, if you're passionate about something go for it. Don't sacrifice anything, just have fun." parsed = spec_generator.parse(text) spectrogram = spec_generator.generate_spectrogram(tokens=parsed) audio = vocoder.convert_spectrogram_to_audio(spec=spectrogram) audio = audio.to('cpu').detach().numpy().squeeze() # 这里加上squeeze sf.write("speech.wav", audio, 22050)
内容的提问来源于stack exchange,提问作者Jacob Mukiti
相关产品推荐
相关产品推荐

