Python Sounddevice回调没有追加

时间:2016-11-28 18:09:54

标签: python arrays numpy

我在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()

1 个答案:

答案 0 :(得分:1)

您的代码的主要问题是您立即退出with声明。在with语句内的代码块的开头,方法start()InputStream上调用,最后是方法stop()。 由于代码块只包含一个print()的调用(它将很快返回),因此您不会记​​录任何内容(如果幸运的话,可能不会记录一个音频块)。

sd.stop()的调用没有任何效果,因为这只会停止play()rec()playrec()来电。如果您直接使用其中一个流类,则必须在流上调用start()stop()(例如,使用with语句)。