我试图从我的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?)第二次有所不同。它们几秒钟内无法赶上实时。这种行为根本不可重现 - 时间戳有时是正确的,有时是错误的。但是,当我第一次打开队列时,它们总是错误的。
答案 0 :(得分:1)
所以再次休息并在SO上发布已经解决了它;)当队列停止/暂停时,你不应该得到队列的当前时间戳:^ P