同事和我正在使用具有回调功能的pyaudio。我们很少遇到音频输出信号错误。 我们看到了两种错误:
回调函数的(简化)版本在这里:
def callback(in_data, frame_count, time_info, status):
if self.dataIndex+frame_count < self.length or self.length == "infinite":
whatToDo = pyaudio.paContinue
else:
whatToDo = pyaudio.paComplete
# RME needs 24 bit value disguised as 32 bit. The lower 8 bits have to be zero.
dataStr = ((self.playData[:,self.dataIndex:self.dataIndex+frame_count].T*
(2**23-1)).astype('<i4') << 8).astype('<i4').tostring()
self.dataIndex += frame_count
return (dataStr, whatToDo)
因为问题很少发生,所以很难尝试不同的事情。
我怀疑使用Python函数进行实时需求的回调。如果在关键时刻完成垃圾收集怎么办?即使主线程中只有time.sleep(),我们也看到了错误,所以我猜这不包括GIL的问题。
更多信息: