我的最终目标是同时输出一个 wav 文件并在麦克风上录制,并在绘图上将两者叠加显示。这不需要低延迟,但它确实需要两个图以正确表示实时发生的事情的方式重叠。如果我将麦克风线连接到扬声器线,则图表应该相对良好地排列在一起。
由于似乎有一定的延迟,我的解决方案是使用回调给出的时间变量。这应该让我在绘制它以调整延迟时适当地改变情节。我收到了 DAC 时间和当前时间的适当值,但 ADC 时间给了我 0。
def callback(indata, outdata, frames, time, status):
print "ADC time: ", time.inputBufferAdcTime
print "DAC time: ", time.outputBufferDacTime
print "curr time: ", time.currentTime
print "time diff: ", time.outputBufferDacTime - time.currentTime
print "###############"
if status:
print(status)
if len(data[callback.index:]) < frames:
outdata[:len(data[callback.index:])] = data[callback.index:]
outdata[len(data[callback.index:]):] = np.zeros(
((len(outdata) - len(data[callback.index:])), len(args.channels)))
raise sd.CallbackStop
else:
outdata[:] = data[callback.index:callback.index + frames]
q_out.put(outdata[::args.downsample, mapping])
q_in.put(indata[::args.downsample, mapping])
callback.index += frames