为了完成语音oneclass分类,笔者在一步步在做着工作往前推进,今天将语音wav文件提取特征,完成特征的提取。MFCC是音频信号特征中最重要的一个,基本上处理音频信号就会用到,笔者对于语音方面知识匮乏,只能先前期使用特征MFCC来完成特征表征。
笔者使用了两个库来完成MFCC特征提取,每个库提取的特征值是不一样的。虽然mfcc特征时固定的,但每个wav文件的长度是不一样的,mfcc_feat帧数不一样,那么每个wav文件的特征矩阵是不一样的,笔者使用np.mean来取所有帧数的特征均值来代表这个wav文件。如果wav文件长度相差不大,那么这个基本没有问题,否则可能存在一些问题,请参考文末的分析。
1、python_speech_features库提取每一帧的mfcc并计算13个特征的平均值

2、librosa库提取每一帧的mfcc并计算20个特征的平均值

主程序将目录下的语音文件循环读取并提取特征写入deque中,频繁的插入操作且不需要查询的的话,deque比列表更加适合。find_specific_files时重用以前的代码,知道==找到目录下匹配的文件,笔者以前用过几次了就不再阐述了。

最后使用np.array将deque转为np数组,再通过np.savetxt写入到csv文件中,完成大量的wav文件的特征提取,为后面的特征过程和模型训练做好准备。

接下来就是分析帧数的特征均值来代表这个wav文件是否合适了。
1、wav文件长度相差很大;
2、wav文件相差不大,但是可能存在部分的静音,这与采集方法有关系;
3、wav文件时长一致,但是MFCCs特征平均值在建模时不能高效的检测,那么就需要将wav文件分帧为相同帧数的实例,将这个帧数*特征的矩阵作为实例,而不仅仅是平均值。
针对上面的情况,音频文件不容易建模分析,那么就需要数据清洗,一步步来吧。
网友评论