2021-8-8 librosa库统一音频数据时长

目前我接触到的处理音频的python库有:
wave-标准库
scipy.io.wavfile
librosa
wavio
thikdsp-github
soundfile
需要注意不同库读取音频得到的data类型是不同的,有的是array有的是list,元素也不同有的是整数,有的是浮点数,也即是归一化了的。

norm:boolean [scalar]
enable amplitude normalization. For floating point y, scale the data to the range [-1, +1].

本此实验还是采用librosa
为啥呢?
1.以array形式读取和存入的数值——用numpy处理数据
2.读取和存入都会自动归一化处理——保证音量一致了
3.其它的一些读出竖排的数据或者list我试了试没这个方便

src_root = 'D:\workspace\Jupyter\speech\wavfiles'

classes = os.listdir(src_root)

for _cls in sorted(classes):
    for fn in sorted(os.listdir(os.path.join(src_root, _cls))):
        f = wave.open(os.path.join(src_root, _cls, fn))
        SampleRate = f.getframerate()
        frames = f.getnframes()
        # Duration 也就是音频时长 = 采样点数/采样率 
        Duration = wav_time = frames / float(SampleRate)  # 单位为s
        wav,sr = librosa.load(os.path.join(src_root, _cls, fn),sr=16000)  #所有都需要librosa处理归一
        if Duration<=2.0:
            n = 32000-wav.shape[0]#需要补齐的0
            ndarray=np.pad(wav,(0,n),'constant', constant_values=(0,0.0000000e+00)) 
            librosa.output.write_wav(os.path.join('D:\workspace\Jupyter\speech\clean', _cls, fn), ndarray, 16000)
        elif Duration>2.0:
            ndarray=wav[:32000]#从尾部截掉
            print(os.path.join(src_root, _cls, fn))
            librosa.output.write_wav(os.path.join('D:\workspace\Jupyter\speech\clean', _cls, fn), ndarray, 16000)
        else:
        	continue

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值