记录一下自己用VITS推理后保存WAV音频文件遇到的一点坑

 audio = net_g.infer(x_tst, x_tst_lengths, noise_scale=.667, noise_scale_w=0.6, length_scale=1.2)[0][0,0].data.float().to('cpu')

在vits推理完成后,相应的音频数据会保存到audio这个变量里
当我尝试用下面的wave库保存时,保存的音频有非常大的噪声

import wave
with wave.open('output.wav', 'wb') as wav_file:
    # 设置参数
    wav_file.setnchannels(1) # 设置为单声道
    wav_file.setsampwidth(2) # 设置采样精度为 16 位
    wav_file.setframerate(hps.data.sampling_rate) # 设置采样率

    # 写入数据
    wav_file.writeframes(audio)

而同样的变量换用scipy.io.wavfile 这个库保存时就没有什么问题了

import scipy.io.wavfile as wavfile

# 设置 WAV 文件参数
file_name = "/Users/Music/output——ok.wav"
sample_rate = hps.data.sampling_rate

# 将音频数据写入 WAV 文件
wavfile.write(file_name, sample_rate, audio)

起初我一直以为是我采样率和采样深度之类的参数设置有问题,最后看了一下这两个库的手册才知道,wavfile模块可以自动处理采样精度和音频数据的格式,所以背后是帮你做了数据转换。
vits推理结果audio中的数据格式是[-1.4171e-05, 7.8774e-06, 5.8009e-06, …, -2.4079e-05, -7.9230e-06, -7.0140e-06],以浮点数格式表示的,每个采样点的范围在-1到1之间,而使用wave库保存为WAV文件,需要整数格式,在之前的代码前加上这一句问题就解决了

audio_new = (audio * 32767).astype(np.int16)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值