如何将.wav文件转换为Pandas DataFrame以便将其馈送到神经网络? - python

我正在尝试将.wav文件提供给神经网络,以便对其进行训练以检测所讲的内容。所以我大约有1万个.wav文件和音频的转录,但是当我尝试将CS​​V文件馈送到神经网络时,出现此错误:ValueError: setting an array element with a sequence.

我正在使用Soundfile获取没有标题的.wav数据,并将其放入列表中。我也尝试过其他库,但是结果是一样的。

import os
import numpy as np
from tqdm import tqdm
import pandas as pd
import soundfile as sf

path = os.getcwd() + "/stft wav/"
audios = []
total = len(os.listdir(path))
pbar = tqdm(total = total)
for file in os.listdir(path):
    data, sr = sf.read(path + file)
    audios.append(data)
    pbar.update(1)
pbar.close()

然后,我读取带有转录的文件,并创建将被馈送到神经网络的数据集。

dict = pd.read_csv("dictionary.csv", sep = '\t')
dataset = pd.DataFrame(columns = ['Audio', 'Word'])
dataset.Audio = audios
dataset.Word = dict.Romaji

现在,数据集如下所示:

    Audio                                               Word
0   [-2.686136382767934e-11, 1.5804246800144028e-1...   inshou
1   [5.0145061436523974e-09, 1.3923349584388234e-0...   taishou
2   [-2.253151087927563e-08, 2.173326230092698e-08...   genshou
3   [3.0560468644580396e-07, 1.0646554073900916e-0...   kishou
4   [0.0, 2.499070395067804e-12, 1.206467304531999...   chuushouteki

音频列中的数组大小不一样,但是我已经尝试用零填充它们,并且错误消息继续不变。

如果您想知道的话,这就是我如何填充它:

X = dataset.Audio.copy()
pbar = tqdm(total = len(X['Audio']))
for i in range(0, len(X['Audio'])):
    X['Audio'][i] = np.resize(X['Audio'][i], len(max(X['Audio'], key = len)))
    pbar.update(1)
pbar.close()

我注意到的一件奇怪的事是,当我保存此CSV文件并再次读取它时,Audio列的float数组会自动转换为字符串数组。我发现保持它应有的唯一方法就是将其另存为pickle文件。

既然可以了,请随意建议其他方法来将.wav文件提供给神经网络。我尝试使用此方法而不是频谱图,因为我读了here,这不是一个好主意。

我正在研究类似的问题,找到了一个简单而优雅的解决方案。训练测试拆分后,将音频列传递到神经网络时,请使用list(X)而不是X

关于将float数组转换为字符串的CSV文件,这是因为使用了幂表示法。数字中间有一个字母,因此Pandas将其写为float,但将其读为字符串。如我之前所说,将数据帧另存为pickle文件是可行的,但与将音频列另存为.npy文件相比,读取它花费的时间太长。

参考方案

看来您已经解决了这个问题,但是这里似乎还没有提到其他几个项目。首先,wave是我的Py3.6安装中包含的Python实用程序。

https://docs.python.org/3/library/wave.html

这段代码是(sorta)被盗的from here:

from wave import open as open_wave
waveFile = open_wave(<filename>,'rb')
nframes = waveFile.getnframes()
wavFrames = waveFile.readframes(nframes)
ys = numpy.fromstring(wavFrames, dtype=numpy.int16)

这应该使您可以轻松地将数据放入DF,这似乎是根据线程标题要求的主要项目。

最后,关于dtypes的DF问题,请注意,DataFrame调用具有dtype强制选项,我曾在类似情况下使用过该选项。

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html

R'relaimpo'软件包的Python端口 - python

我需要计算Lindeman-Merenda-Gold(LMG)分数,以进行回归分析。我发现R语言的relaimpo包下有该文件。不幸的是,我对R没有任何经验。我检查了互联网,但找不到。这个程序包有python端口吗?如果不存在,是否可以通过python使用该包? python参考方案 最近,我遇到了pingouin库。

Python:传递记录器是个好主意吗? - python

我的Web服务器的API日志如下:started started succeeded failed 那是同时收到的两个请求。很难说哪一个成功或失败。为了彼此分离请求,我为每个请求创建了一个随机数,并将其用作记录器的名称logger = logging.getLogger(random_number) 日志变成[111] started [222] start…

Python-Excel导出 - python

我有以下代码:import pandas as pd import requests from bs4 import BeautifulSoup res = requests.get("https://www.bankier.pl/gielda/notowania/akcje") soup = BeautifulSoup(res.cont…

Python sqlite3数据库已锁定 - python

我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…

Python:如何根据另一列元素明智地查找一列中的空单元格计数? - python

df = pd.DataFrame({'user': ['Bob', 'Jane', 'Alice','Jane', 'Alice','Bob', 'Alice'], 'income…