【问题标题】:Python Sounddevice callback not appendingPython Sounddevice 回调未附加
【发布时间】:2017-04-12 13:25:18
【问题描述】:

我在 Python 中使用了一个名为 SoundDevice 的库。我正在尝试记录一个未定义长度的 NumPy 数组。使用一些对 Queue 对象执行相同操作的示例代码,我使用 numpy 的 append 重写了回调。数据似乎在回调中,但由于我不清楚的原因 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()

【问题讨论】:

标签: python arrays numpy


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 2018-07-21
    相关资源
    最近更新 更多