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

Posted

技术标签:

【中文标题】如何将提取的音高值保存在 csv 文件中?【英文标题】:How to save extracted pitch values in a csv file? 【发布时间】:2018-07-22 14:35:00 【问题描述】:

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

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

那么如何将这么多的值保存在一个 csv 文件中呢?我有大约 700 个音频文件分隔在不同的目录中,以表达情感。我应该取所有这些值的平均值并将它们保存在 csv 中的音频文件中吗?像这样:

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

【问题讨论】:

【参考方案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 中提取的特征。另外我想你提取的features 是一个numpy 向量。如果不是,则应将其转换为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) 将内存转储到 pickle 文件中:

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、...),您需要一个类标签(ground truth),即形状等于将每个样本与一个整数相关联的样本(例如,二进制分类中的 0,1,或 4 类分类中的 0,1,2,3)。这很大程度上取决于你想要什么,你的训练目标是什么。

一旦你有了数据矩阵和标签向量,如果你有足够的样本,每种机器学习方法都可以进行分类。为了这个目的,我建议你使用相同的扩充标准,有一个想法看看这个paper,它可以给你同样的想法。

希望能帮到你,辛苦了!

【讨论】:

【参考方案2】:

Python 有一个内置的 csv 模块。

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

【讨论】:

以上是关于如何将提取的音高值保存在 csv 文件中?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 zip 中提取 csv 文件并在 python 中将其保存到磁盘? [复制]

从音频文件中提取音高特征

如何将抓取的 Web 数据保存到多个 csv 文件中

使用 JMeter,如何从 API 的响应正文中提取字符串并将其保存到 csv 文件?

如何使用python从csv文件中提取最小值和最大值

Jmeter提取response返回值保存到本地csv文件