Scipy:尝试写入 wav 文件,AttributeError:'list' 对象没有属性 'dtype'

use*_*828 3 python arrays audio scipy anaconda

我正在使用 Anaconda3 和 SciPy 尝试使用数组编写 wav 文件:

wavfile.write("/Users/Me/Desktop/C.wav", 1000, array)

(我不知道每秒有多少个样本,我打算玩这个,但是我打赌是 1000)

array 返回一个包含 3000 个整数的数组,因此该文件将持续 3 秒。

但是,它在尝试运行时给了我这个错误:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-21-ce3a8d3e4b4b> in <module>()
----> 1 wavfile.write("/Users/Me/Desktop/C.wav", 1000, fin)

/Users/Me/anaconda/lib/python3.4/site-packages/scipy/io/wavfile.py in write(filename, rate, data)
213 
214     try:
--> 215         dkind = data.dtype.kind
216         if not (dkind == 'i' or dkind == 'f' or (dkind == 'u' and data.dtype.itemsize == 1)):
217             raise ValueError("Unsupported data type '%s'" %         data.dtype)

AttributeError: 'list' object has no attribute 'dtype'
Run Code Online (Sandbox Code Playgroud)

Oli*_* W. 5

您正在传递write一个普通的 python 列表,该列表没有调用的属性dtype(您可以通过研究错误消息来获取该信息)。的文档scipy.io.wavfile清楚地说明你应该传递给它一个 numpy 数组:

定义: wavfile.write(filename, rate, data)

文档字符串:

将 numpy 数组写为 WAV 文件

您可以将普通的 python 列表转换为一个 numpy 数组,如下所示:

import numpy as np
arr = np.array(array)
Run Code Online (Sandbox Code Playgroud)