我的主要目标是将mfcc功能提供给ANN。

但是,我被困在数据预处理步骤中,我的问题分为两个部分。
背景 :
我有声音
我有一个带有注释和时间戳的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:
import librosa
y, sr = librosa.load('abcd.wav')
mfcc=librosa.feature.mfcc(y=y, sr=sr)

第1部分:我无法围绕两件事:
如何根据注释中的片段计算mfcc。

第2部分:如何最好地存储这些mfcc,以将其传递给keras DNN。也就是说,应将每个音频段计算出的所有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保存并稍后重新加载。我喜欢使用一个类来封装输入,输出和字典数据,但是您可以选择任何适合自己的方法。

关于python - 根据带注释的文件为音频片段生成mfcc,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48333516/

10-13 04:10