python完成wav语音文件分割(1)
长度不同的音频文件不容易建模分析,需要将语音裁剪成长度相同的长度,保证数据集的统一。在前期的探索下,笔者准备将收集的小部分数据做个探索,完成wav语音文件分割,为后面大量数据做准备。
语音分割总体思路就是将语音文件读取后根据语音data的大小来分割。笔者先测试一个scipy.io 的wavfile方法。
1、wavfile.read(filename)读取wav文件;
2、根据split_at_frame=rate * split_at_timestamp定义分割的大小;
3、根据split_at_frame来对数据进行切片;
4、wavfile.write将切片后的数据写入wav文件。
jupyter notebook结果如下:
再次使用librosa.get_duration读取两个分割后的文件,第一个为4秒,第二个为1.89秒,因为wav文件总长度导致最后一个分割的文件大概率都会不满住切分的要求。如果一段语音是5秒,那么丢弃最后一秒没关系,如果语音长度7秒,丢弃最后三秒就显得有些可惜。在机器学习,特别是深度学习时,数据越多越好。于是就可以在切换语音上做文章,取两段的语音,都满足4秒时长。
left_data, right_data = data[:split_at_frame], data[-split_at_frame:]
但是对于语音wav总时长需要有个要求,就是(wavtime % 4 )需要定义一个最小值,比如超过3才能对最后一个分段这样操作。那么分割wav文件写成函数,方面以后复用,测试效果正常。
接下来笔者在以后需要使用来提取特征,那么把库从scipy.io切换到librosa,编写了几个函数来完成语音分割。
1、remove_silence函数删除开始和结尾的静音段;
2、wavfile_split函数选择大于split_at_timestamp的语音,并对有效的语音进行分段。
3、主函数找到目录下的wav文件,完成全部文件分割。
查看结果符合要求。
那么下一步就是完成不丢弃语音文件,准备对稍微小于3秒的语音进添零操作,满足3秒的要求。第二就是把以提取特征的函数复用过来。那么语音文件特征的提取工作就基本完成了。