我在Python中使用一个名为SoundDevice的库。我正在尝试记录未定义长度的NumPy数组。使用一些与Queue对象执行相同操作的示例代码,我使用numpy中的append重写了回调。数据似乎在回调中,但由于我不明确的原因附加不是写入数组。在测试结束时,我得到原始的空数组。
以下是代码:
import numpy as np
import sounddevice as sd
fs = 44100
sd.default.samplerate = fs
sd.default.device = 10
x = np.array([],ndmin = 2)
def Record():
def callback(indata,frames,time,status):
if status:
print(status,flush=True)
np.append(x,indata.copy())
with sd.InputStream(fs,10,channels=1,callback = callback):
print("Recording started...")
def StopRec():
sd.stop()
print("Recording stopped.")
print(x)
Record()
for i in range(10):
pass
StopRec()
答案 0 :(得分:1)
您的代码的主要问题是您立即退出with
声明。在with
语句内的代码块的开头,方法start()
在InputStream
上调用,最后是方法stop()
。
由于代码块只包含一个print()
的调用(它将很快返回),因此您不会记录任何内容(如果幸运的话,可能不会记录一个音频块)。
对sd.stop()
的调用没有任何效果,因为这只会停止play()
,rec()
和playrec()
来电。如果您直接使用其中一个流类,则必须在流上调用start()
和stop()
(例如,使用with
语句)。