在我的代码中,我阅读了一个列表,其中存储了44100个一秒波音频文件的样本,如下所示:
with open("./test.csv", "r") as csv_file:
reader = csv.reader(csv_file, quoting=csv.QUOTE_NONE)
rows = list(reader)
audiofile = rows[12]
字符串
如果我打印文件:
print(audiofile)
型
我得到这个结果:
' 0.06585693', ' 0.06663513', ' 0.066467285', ' 0.06716919', ' 0.06765747', ' 0.06770325', ' 0.06803894', ' 0.068481445', ' 0.06854248', ' 0.06918335', ' 0.06915283', ' 0.0693512', ' 0.07003784', ' 0.07008362', ' 0.06993103', ' 0.070632935', ' 0.07072449', ' 0.07104492', ' 0.07159424', ' 0.071395874', ...
型
这意味着列表'audiofile'包含了wave文件的所有44100个浮点样本,就像期望的那样。
现在,在我可以用librosa waves显示信号之前,我需要如何将数据放入numpy. ndarray中。
我在这里找到了这个解决方案Convert list elements into array,它建议使用asarray(),但不知何故没有成功。
我是这样试的:
with open("./test.csv", "r") as csv_file:
reader = csv.reader(csv_file, quoting=csv.QUOTE_NONE)
rows = list(reader)
audiofile = rows[12]
temp_list = audiofile
myarray = np.asarray(temp_list)
型
当我像这样打印数据类型时
print(type(myarray))
型
我明白了:
<class 'numpy.ndarray'>
型
所以这似乎是正确的。当我像这样打印数组时:
print(myarray)
型
我明白了:
[' 0.06585693' ' 0.06663513' ' 0.066467285' ... ' 0.010253906' ' 0.011354681' ' 0.011835733']
型
所以np.asarray()似乎是合适的。但是,如果我现在运行:
librosa.display.waveshow(myarray)
型
我得到了这个错误:
Traceback(most recent call last):File“/Users/abc/Desktop/Project Python Audio/Datenbankzugriff.py“,line 76,in librosa.display.waveshow(myarray)File“/Users/abc/Desktop/Project Python Audio/.venv/lib/python3.11/site-packages/librosa/display.py”,line 2029,in waveshow util.valid_audio(y,mono=False)File“/Users/abc/Desktop/Project Python Audio/.venv/lib/python3.11/site-packages/librosa/util/utils.py”,line 300,在valid_audio中引发参数错误(“音频数据必须是浮点”)librosa.util.exceptions.参数错误:音频数据必须是浮点
这让我很惊讶,因为数据是浮点的.我如何正确地预处理我的波形样本,然后将它们传递给librosa.display.waveshow()?
1条答案
按热度按时间0pizxfdo1#
原来是因为代码中的一个错误,我用多个数组填充了列表,这些数组有这样的符号
]“[
在它们里面,因此引发了列表被误认为是字符列表而不是浮点数。修复了这个问题,如在这个线程中建议:
ValueError: could not convert string to float: id
使用librosa.display.waveshow()函数处理以下代码:
字符串