Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 生成mfcc';基于注释文件的音频段的s_Python_Audio_Mfcc_Librosa - Fatal编程技术网

Python 生成mfcc';基于注释文件的音频段的s

Python 生成mfcc';基于注释文件的音频段的s,python,audio,mfcc,librosa,Python,Audio,Mfcc,Librosa,我的主要目标是将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.lo

我的主要目标是将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。i、 e应将每个音频段计算的所有mfcc保存到单个列表/字典中。或者最好将它们保存到不同的词典中,以便属于一个标签的所有mfcc都位于一个位置

我不熟悉音频处理和python,因此,我愿意接受有关最佳实践的建议

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

第1部分:MFCC到标签的转换

从librosa文档中看不出这一点,但我相信mfcc的计算速度大约为23mS。使用上面的代码
mfcc.shape
将返回
(20,x)
,其中20是特征数,x对应于x帧数。mfcc的默认跳变率为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.reformate
来执行此操作

对于输出,您需要为文本文件中的每个标记指定一个数值。通常,您会将
标记存储为整数
在字典中。然后,这将用于为网络创建培训输出。每个输入样本应有一个输出整数

第2B部分:保存数据


最简单的方法是使用
pickle
保存并稍后重新加载。我喜欢使用类来封装输入、输出和字典数据,但您可以选择适合您的任何内容。

对于带注释的文件,您的步骤是。。。1-枚举不同的标记名。2-使用文件中的时间戳将标签的枚举值分配给每个mfcc样本。这意味着,如果您有1826个mfcc样本,那么您将有1826个枚举值作为网络的输出。换句话说,我已经生成了mfcc,我有注释。我是如何将两者叠加在一起的,这样我就可以像这样将它们输入神经网络,你会做一些看起来有点像。。。x_train=mfcc.Reformate(xx)y_train=keras.utils.to_category(annotations,num_classes=xx)model.fit(x_train,y_train,…)花费一些精力尝试对其进行编码,如果您遇到无法克服错误的情况,请发布这些错误,在一个新问题中,与您的代码一起。@bivouac0
标记音乐从0.0秒到2.5秒,因此将是mfcc帧0到2.5*sr/512~=108。它们不会完全相等,因此需要对值进行四舍五入。
很抱歉,我不明白这是什么意思。。。。。我试图解决一个非常类似的问题:如果您能提供一些小代码片段/伪代码,或者帮助我们完成这个任务。谢谢。请注意,我将上述评论的代码发布在