2

我有一个应用程序,其中我有一些其他信号参考系统时钟(time.time()),我想记录音频输入并找出它相对于其他信号发生的时间。

起初我尝试使用回调 API,认为当数据从声卡中可用时它们会立即发生。您会期望回调定期发生,其差异大致为样本周期 * 样本数,但正如其他人所指出的那样,情况并非如此。

我还尝试了阻塞 API,认为它可能会在数据首次可用时返回,但这似乎有同样的问题。中还有 adc 时钟的概念portaudio,它在回调模式下给出current_timeinput_buffer_adc_time相对于其他一些时钟,这可能会提供我需要的信息。但是这两个值通常都是零(Ubuntu 14 带有我主板的默认麦克风输入,不确定它使用的是哪个较低级别的 API),其中一个偶尔是非零的。

portaudio如果在 中无法实现,我愿意直接使用pyaudio,但无论如何我只需要能够弄清楚样本(不是特定样本,任何都可以)以time.time()单位(posix 纪元时间)到 100 微秒发生或更好。似乎pyaudio隐藏了很多选项portaudio

我还应该注意,这个时间安排有两个组成部分。我最感兴趣的是长期组件,例如,如果我记录一个事件,然后一个小时后记录另一个事件,根据系统时钟,我知道这两个事件相隔多远。也可能存在短期延迟效应,因此我得到的系统时间在实际事件发生后始终为 1 毫秒。一旦我让长期部分工作,我可以直接测量延迟。

编辑:我发现这篇论文讨论了这个问题。 听起来current_timeinput_buffer_adc_time是这样做的首选方式,所以也许我应该做的事情是弄清楚如何使用实际上使这些信息有效的不同底层 API?

4

0 回答 0