如何将提取的音高值保存在csv文件中?

时间:2018-07-22 14:35:01

标签: python audio signal-processing feature-extraction feature-selection

好吧,我想我应该提一提,这是我第一次尝试使用Python进行音频信号处理。我有一个音频数据集,我正在使用Aubio库提取音高特征,并使用Python中的python_speech_features库提取MFCC特征。问题是,对于单个音频文件,我得到的音高值为84左右,MFCC值为12左右。

提取的音高特征向量的图像

那么,如何将所有这么多的值保存在单个csv文件中?我有大约700个音频文件位于不同的目录中,它们之间充满了情感。我应该将所有这些值的平均值保存在csv中并将音频文件保存吗?像这样:

然后,我将如何使用这些值进行分类? 任何帮助将不胜感激,谢谢。

2 个答案:

答案 0 :(得分:1)

您的问题没有简单的答案。

我了解到,对于每个数据样本,您都提取了一组功能,对每个样本来说,功能都是一样的,不是吗? 我想您是在for循环中工作的,就像这样:

import numpy as np
all_features = []
for path in path_list:
     x = open_file(path) #an hypothetical function to open your files
     features = extract_features(x) #an hypothetical function to extract features
     all_features.append(features)

如果您的代码看起来像我的简单示例,那么您创建了一个列表all_features,其元素all_features[i]包含从示例i中提取的功能。另外,我想您提取的featuresnumpy向量。如果不是,则应将其转换为numpy向量(类似于features = np.array(features))。

好,现在您可以创建数据集了:

data = np.vstack(all_features)

垂直堆栈np.vstack生成形状为(n_samples, n_features)的矩阵。警告:所有特征向量必须具有相同的形状!

现在,您要保存数据集,这里有很多可能性,这是我最喜欢的三个选项: 1)使用pandas创建一个csv文件:

import pandas as pd
df = pd.DataFrame(data)
df.to_csv(filename+'.csv', index=False, header=header) #header is a list of string to name columns of csv
#see https://pandas.pydata.org/pandasdocs/stable/generated/pandas.DataFrame.to_csv.html

2)将内存转储到泡菜文件中:

import six.moves.cPickle as pickle    
with open(filename+'.pkl', 'wb') as f:
    pickle.dump(data, f)

3)另存为numpy文件:

np.save(filename+'.npy', data)

关于分类问题,如果要使用监督方法(MLP,RF,SVM,KNN等),则需要一个类标签(地面真相),即形状等于矢量个数的向量将每个样本与一个整数相关联的样本(例如,在二进制分类中为0,1,在四分类中为0,1,2,3)。这在很大程度上取决于您的需求,培训的目标是什么。

有了数据矩阵和标签向量后,如果有足够的样本,则每种机器学习方法都可以进行分类。为此,我建议您使用相同的扩充标准,让您对paper有所了解,这可能会给您带来相同的想法。

希望我能帮助您,辛苦了!

答案 1 :(得分:0)

Python具有内置的csv模块。

这个section的示例提供了一个简单的示例,说明如何使用编写器将行写入到csv。