【发布时间】:2021-07-24 22:46:23
【问题描述】:
这可能是一个愚蠢的问题,因为我对 python 很陌生,但我正在尝试将正弦波写入 python 中的文件,并且我不断收到所需参数不是整数的错误。我知道这意味着我需要将一个非十进制数传递给函数,但无论我做什么使它成为一个 int,它都不起作用。我正在使用 wave 库,并使用 numpy 进行计算。 writeframes(data) 行 (23) 始终存在错误。我当前的代码是:
import wave
import numpy as np
samples = [int()]
tones = int(input("How many notes do you want?"))
sRate = 44100 # 44.1kHz sample rate
nSamples = sRate * float(input("How long for each tone?")) * tones
x = np.arange(nSamples)/float(sRate)
hz = int(input("What frequency do you want it to start on?"))
vals = (32767*np.sin(2.0*math.pi*hz*x))+16384
newArr = []
for x in range(len(vals)):
newArr.append(int(vals[x]))
file = wave.open("sine"+str(hz)+"_"+str(tones)+".wav", 'wb')
file.setparams((1, 2, sRate, nSamples, 'NONE', 'uncompressed'))
for x in newArr:
print(type(x))
file.writeframesraw(x)
file.close()
输入提示现在没有太多作用,我只是添加了它们,以便将来更容易。我还注意到该错误在另一部分表明需要一个类似字节的对象。即使我将x 类型转换为一个字节,我仍然会收到错误。
这是错误和打印的类型:
<class 'int'>
Traceback (most recent call last):
File "/media/smack/Seagate Portable Drive/Programs/music/main.py", line 23, in <module>
file.writeframesraw(x)
File "/usr/lib/python3.8/wave.py", line 426, in writeframesraw
data = memoryview(data).cast('B')
TypeError: memoryview: a bytes-like object is required, not 'int'
Exception ignored in: <function Wave_write.__del__ at 0x7fa20a05c280>
Traceback (most recent call last):
File "/usr/lib/python3.8/wave.py", line 327, in __del__
File "/usr/lib/python3.8/wave.py", line 445, in close
File "/usr/lib/python3.8/wave.py", line 468, in _ensure_header_written
File "/usr/lib/python3.8/wave.py", line 480, in _write_header
struct.error: required argument is not an integer
Process finished with exit code 1
非常感谢任何帮助,在此先感谢!
【问题讨论】:
-
你能用它的堆栈跟踪发布错误吗?
-
我刚做了,我想这就是你想要的。
标签: python-3.x wav