接着上一篇文章,完成在wav文件末尾添零来补足需要的时长,这在最终提取MFCC均值时,这补足的时长对于整体也影响不大。此方法可以在数据采集时保证样本的多样性,不至于删除只差一点时长的wav文件,也可以提高样本数量。
笔者先在jupyter中进行测试,看看在wav文件后面添零后对于语音的影响情况。
1、读取wav文件并删除静音
删除静音后时长为2.8792,不满足3秒的时长,于是需要对其进行补零操作。
2、使用np.pad对语音数据末尾补零到3秒固定时长,算法基于语音数据的数据点数来补全,再次ipd.Audio播放语音,可以正常播放无影响。
那么接下来笔者将这个方法写入笔者定义的CLASS_dir_wav_split_features类中,完善前期的代码。定义私有方法如下:
类的核心方法修改如下,生成的csv文件较之前的文件,可以保留更多的样本。
为了方便以后查看学习的失败案例,也将分割生成的wavedata写入wav文件。同时因为文件io速度较慢,在类的私有属性里面添加是否保存分割文件的参数来控制是否写入到本地保存。在类中定义私有方法__wav_output如下:
每天解决一个问题,终于把MFCCs特征提取完成了。总结一下编写的类的使用方法。
1、__is_file_match判断文件是否匹配
2、__find_specific_files找到目录下匹配的文件,返回生成器
3、__remove_silence删除wav文件开始和结尾的静音段
4、__wavfile_split大于split_at_timestamp时长的wav文件分割
5、__wavfile_zero_offset小于split_at_timestamp的wav文件,并在zero_offset范围内则补零
6、__librosa_mfcc_mean_featureslibrosa库提取每一帧的mfcc并计算20个特征的平均值
7、__wav_output生成分段的wav文件
8、get_dir_wavfile_mfccs_csv获取文件的MFCCs,并生成csv文件,此为核心方法。
如果需要全部的代码,欢迎留言交流!
网友评论