我的主要目标是为ANN提供mfcc特性。在
但是,我被困在数据预处理步骤,我的问题有两部分。
背景:
我有音频。
我有一个txt文件,其注释和时间戳如下:
0.0 2.5 Music
2.5 6.05 silence
6.05 8.34 notmusic
8.34 12.0 silence
12.0 15.5 music
我知道对于单个音频文件,我可以使用librosa计算mfcc,如下所示:
^{pr2}$第1部分:我无法思考两件事:
如何根据注释中的段计算mfcc。在
第2部分:如何最好地存储这些mfcc,以便将它们传递给keras DNN。i、 e应将每个音频段计算的所有mfcc保存到单个列表/字典中。或者最好将它们保存到不同的字典中,以便属于一个标签的所有mfcc都位于同一个位置。在
我是音频处理和python的新手,所以我愿意接受关于最佳实践的建议。在
非常乐意提供更多细节。 谢谢。在
第1部分:MFCC到标签的转换
从librosa文档中看不出这一点,但我相信mfcc是以23mS的帧速率计算的。上面的代码
mfcc.shape
将返回(20, x)
,其中20是功能的数量,x对应于x个帧数。mfcc的默认hop_rate
是512个样本,这意味着每个mfcc样本的跨度约为23mS(512/sr)。在使用这个可以计算出文本文件中哪个帧与哪个标记相匹配。例如,标记
Music
从0.0到2.5秒,因此mfcc帧0到2.5*sr/512~=108。它们不会完全相等,所以需要四舍五入。在第2A部分:DNN数据格式
对于输入(mfcc数据),您需要弄清楚输入是什么样子的。你将有20个功能,但你想输入一个单一的帧到你的网络还是你要提交一个时间序列。您的mfcc数据已经是一个numpy数组,但是它的格式是(feature,sample)。对于Keras的输入,您可能需要将其反转。您可以使用
numpy.reshape
来执行此操作。在对于输出,您需要为文本文件中的每个标记指定一个数值。通常,您将把
tag to integer
存储在字典中。这将用于为网络创建训练输出。每个输入样本应该有一个输出整数。在第2B部分:保存数据
最简单的方法是使用
pickle
保存并稍后重新加载。我喜欢用一个类来封装输入、输出和字典数据,但是你可以选择任何适合你的。在相关问题 更多 >
编程相关推荐