0

我正在尝试从我的AudioInputCallback函数中记录的缓冲区中获取时间以用于记录队列。不幸的是,我看到的时间戳并不像预期的那样。这是一个示例(使用AudioTimeStamp.mHostTime):

2010-01-21 14:03:35.252 [61694:207] 1288747268011206    1288747396166138    -128154932
2010-01-21 14:03:35.344 [61694:207] 1288747360891024    1288747396166138    -35275114
2010-01-21 14:03:35.437 [61694:207] 1288747453770843    1288747396166138    57604705
2010-01-21 14:03:35.530 [61694:207] 1288747546652078    1288747396166138    150485940

第一个时间戳是缓冲时间,第二个是参考时间(按下按钮的时间,我正在使用AudioQueueDeviceGetCurrentTime),第三个是两者之间的增量。正如预期的那样,缓冲区稍微滞后于“实时”,并在运行几个缓冲区回调后赶上。

现在,当关闭和重新打开这个队列时,情况就大不相同了:

2010-01-21 14:03:46.769 [61694:207] 1288755719477798    1288758853485434    -3134007636
2010-01-21 14:03:46.862 [61694:207] 1288755812365464    1288758853485434    -3041119970
2010-01-21 14:03:46.955 [61694:207] 1288755905305200    1288758853485434    -2948180234

如您所见,时间戳(我想是 ns ?)第二次完全不同。他们没有赶上实时几秒钟。这种行为根本无法重现——时间戳有时是正确的,有时是错误的。然而,当我第一次打开队列时,他们总是错的。

4

1 回答 1

1

因此,再次喘口气并在 SO 上发帖解决了它;)当您的队列停止/暂停时,您不应该获取队列的当前时间戳:^P

于 2010-01-21T20:31:12.723 回答