基于带注释的fi为音频段生成mfcc

2024-05-16 01:23:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我的主要目标是为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的新手,所以我愿意接受关于最佳实践的建议。在

非常乐意提供更多细节。 谢谢。在


Tags: 文件数据txt目标字典时间music步骤
1条回答
网友
1楼 · 发布于 2024-05-16 01:23:18

第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保存并稍后重新加载。我喜欢用一个类来封装输入、输出和字典数据,但是你可以选择任何适合你的。在

相关问题 更多 >