这个问题我看很多文章都说用什么sox解决, 我嫌麻烦.偶然发现了这个函数可以解决问题

import os
import librosa
import soundfile as sf


def resample4wavs(frompath, topath, resamplerate):
    '''
    :param frompath: 源文件所在目录
    :param topath: 重置采样率文件存放目录
    :param resamplerate: 重置采样率
    :return:
    '''
    fs = os.listdir(frompath)
    for f in fs:
        try:
            fromfile = frompath + f
            print(fromfile)
            tofile = topath + f
            y, sr = librosa.load(fromfile)
            to_y = librosa.resample(y, sr, resamplerate)
            # librosa.output.write_wav(tofile, to_y, resamplerate)过时代码, 需要换成下面的代码
            sf.write(tofile, to_y, resamplerate)
        except Exception as e:
            print('Error:', e)

这个函数不是我写的, 来自于下面这个文章, 我偶然做重置采样率的时候发现可以解决这个问题

RNN语音分类-普通话广东话分类_~扬之水~的博客-CSDN博客

侵删

具体调用方法是这样的,友情提醒,调用之前先备份自己的音频,以防万一

"""
这个代码还可以解决
raise Error('unknown format: %r' % (wFormatTag,))
wave.Error: unknown format: 3
这个bug
"""
import os
import librosa
import soundfile as sf


def resample4wavs(frompath, topath, resamplerate):
    '''
    :param frompath: 源文件所在目录
    :param topath: 重置采样率文件存放目录
    源文件目录和重置采样率目录可以是一个目录但是会覆盖原来的文件
    :param resamplerate: 重置采样率
    :return:
    '''
    fs = os.listdir(frompath)
    for f in fs:
        try:
            fromfile = frompath + f
            print(fromfile)
            tofile = topath + f
            y, sr = librosa.load(fromfile)
            to_y = librosa.resample(y, sr, resamplerate)
            # librosa.output.write_wav(tofile, to_y, resamplerate)过时代码, 需要换成下面的代码
            sf.write(tofile, to_y, resamplerate)
        except Exception as e:
            print('Error:', e)

//需要重置采样率的文件所在的文件夹
path_1 = r''
//重置采样率后的文件所在的文件夹
path_2=r''

//48000是重置后的采样率,这些都按照自己需要修改
resample4wavs(path_1, path_2, 48000)

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐