1.比较代码
import librosa
import os
import time
import numpy as np
import scipy.io.wavfile as wav
import python_speech_features
from python_speech_features import mfcc
#读取某文件夹下的所有.wav文件,并返回文件全称
def file_name(file_dir):
L = []
for root, dirs, files in os.walk(file_dir):
for file in files:
if os.path.splitext(file)[1] == '.wav':
L.append(os.path.join(root, file))
return L
'''
调用python_speech_features包
'''
def mfcc_1(filename):
fs, wavedata = wav.read(filename)
mfcc_feature = mfcc(wavedata, fs, winlen=0.064, winstep=0.032, nfilt=13, nfft=1024) # mfcc系数 # nfilt为返回的mfcc数据维数,默认为13维
d_mfcc_feat = python_speech_features.base.delta(mfcc_feature, 1) # feat 为mfcc数据或fbank数据 # N - N为1代表一阶差分,N为2代表二阶差分 # 返回:一个大小为特征数量的numpy数组,包含有delta特征,每一行都有一个delta向量
d_mfcc_feat2 = python_speech_features.base.delta(mfcc_feature, 2)
mfccs = np.hstack((mfcc_feature, d_mfcc_feat, d_mfcc_feat2))
# 返回 帧数*39 的mfccs参数
return mfccs
'''
调用librosa包
'''
def mfcc_2(filename):
y, sr = librosa.load(filename, sr=None)
mfccs = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=39) # n_mfcc为返回的mfcc数据维度
mfccs=np.array(mfccs)#转成numpy类型
# 返回 帧数*39 的mfccs参数
return mfccs.T
def main():
#定义一些文件路径
wav_dir="./data"
filenames=file_name(wav_dir)
#开始计时
start_time=time.time()
#循环读取文件名称并求取mfcc参数
for filename in filenames:
mfccs=mfcc_1(filename)
#结束计时
end_time=time.time()
print("程序运行时长",str(end_time-start_time))
if __name__ == '__main__':
main()
2.结果
本次测试使用的是1200条语音,分别调用python_speech_features和librosa两个包求取39维MFCC参数,由于在后续的训练中需要提取大量语音的mfcc参数,这里比对了两种方法的运行时间:
2.1 调用python_speech_features包生成mfccs参数
程序运行时长 6.4495463371276855 s
2.2 调用librosa包生成mfccs参数
程序运行时长 9.830938816070557 s
在进行的速度方面,使用python_speech_features包生成的速度较快一些。
3. mfccs波形比对
4. 后续训练差异
这一块的内容,后续会补上。