【问题标题】:Getargs format is not a tuple running PyAudio with real-time inputGetargs 格式不是使用实时输入运行 PyAudio 的元组
【发布时间】:2018-08-13 19:31:50
【问题描述】:

我正在尝试使用 PyAudio 处理来自麦克风的实时数据。我遵循了PyAudio Documentationthis blog post 上的示例。当我在没有回调的情况下使用 stream.is_active() 时,我没有错误并且一切正常,但是如果我使用回调,我会得到以下“SystemError:新样式 getargs 格式但参数不是元组”

我已经查看了Where is the error? “SystemError: new style getargs format but argument is not a tuple” 的问题,但是,这并不能转化为我的问题。我将在我的代码下面解释我尝试过的事情:

FORMAT = pyaudio.paInt32
CHANNELS = 2
RATE = 44100
CHUNK = 1024  

def callback(in_data, frame_count, time_info, flag):
    print('Hi')

audio = pyaudio.PyAudio()

# start Recording
stream = audio.open(format=FORMAT, channels=CHANNELS,
                rate=RATE, input=True,
                frames_per_buffer=CHUNK,stream_callback = callback)

stream.start_stream()   

while stream.is_active():
    time.sleep(0.1)
    print('1')
stream.stop_stream()
stream.close()
audio.terminate()

我已确定在我添加stream_callback = callback 的任何时候都会出现错误。如果我删除它,我不会收到错误消息。当我只包含上面的语句时,我的回调中的确切代码似乎不会影响错误(尽管我的整个代码计算了两个通道之间的时间延迟)。我的回调参数是直接从文档中定义的。我不确定还可以尝试什么,因为我没有直接在回调中做任何事情。

【问题讨论】:

    标签: python signal-processing pyaudio


    【解决方案1】:

    正如the example you linked 所说:

    在回调模式下,PyAudio 将在需要新的音频数据(播放)和/或有新的(录制的)音频数据可用时调用指定的回调函数 (2)。请注意,PyAudio 在单独的线程中调用回调函数。该函数具有以下签名callback(<input_data>, <frame_count>, <time_info>, <status_flag>) 并且必须返回一个包含frame_count 音频数据帧的元组和一个表示是否还有更多帧要播放/录制的标志。

    但是你的回调函数没有这样做:

    def callback(in_data, frame_count, time_info, flag):
        print('Hi')
    

    这根本没有return 语句,所以它只返回None

    将其与引用的示例进行比较,该示例返回一个缓冲区和一个标志。这就是你需要做的。

    您收到特定错误而不是更容易理解的错误的原因是,在幕后的某个地方,PyAudio 正在通过使用一个接受 Python 元组的 C API 函数来解析您的返回值,而无需执行任何操作显式错误处理。这并不理想,因为当您不知道它的含义时,错误消息更难阅读……

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题。我解决了添加

      return None, pyaudio.paContinue
      

      到回调函数结束。

      【讨论】:

        猜你喜欢
        • 2015-12-16
        • 1970-01-01
        • 1970-01-01
        • 2012-10-24
        • 2018-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多