Моя конечная цель - одновременно выводить файл wav и записывать на микрофон и отображать их друг на друге на графике. Это не требует малой задержки, но требует, чтобы два графика были наложены таким образом, чтобы они правильно отображали то, что происходит в реальном времени. Если я подключу микрофонную линию к линии громкоговорителей, графики должны относительно хорошо выровняться друг над другом.
Поскольку кажется, что есть некоторая задержка, мое решение - использовать переменную времени, заданную обратным вызовом. Это должно позволить мне соответствующим образом сместить график при его построении для корректировки задержки. Я получаю соответствующие значения для времени ЦАП и текущего времени, но время АЦП дает мне 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