我有一个应用程序,我有一些其他信号参考系统时钟(time.time()
),我想记录音频输入并找出相对于其他信号发生的时间。
起初我尝试使用回调API,认为当声卡中的数据可用时它们会正确发生。你会期望回调定期发生,大致不同于样本周期*样本数,但是as other have noted, this isn't the case.
我也试过阻塞API,想想也许它会在数据首次可用时返回,但这似乎也有同样的问题。在portaudio
中还有adc时钟的概念,它在回调模式下相对于其他时钟提供current_time
和input_buffer_adc_time
,这可能会提供我需要的信息。但这两个值通常都是零(Ubuntu 14带有我主板的默认麦克风输入,不确定它使用的是哪个低级API),其中一个偶尔是非零的。
如果在portaudio
无法实现这一点,我愿意直接使用pyaudio
,但无论如何我只需要能够找出样本的时间(不是特定的样本,任何意愿) do)发生在time.time()
单位(posix纪元时间)到100微秒或更好。似乎pyaudio
隐藏了portaudio
的许多选项。
我还应该注意到这个时间有两个组成部分。我最感兴趣的是长期组件,如果我记录一个事件,然后一个小时后再记录另一个事件,我知道这两个事件与系统时钟有多远。还可能存在短期延迟效应,使得我获得的系统时间将始终为实际事件后1 ms。一旦我让长期部分工作,我就可以直接测量延迟。
编辑:I found this paper which discusses this problem.听起来current_time
和input_buffer_adc_time
是这样做的首选方式,所以我应该努力的方法是弄清楚如何使用不同的底层实际上有这些信息有效的API吗?