Я пытаюсь извлечь время из записанных буферов в моей функции 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
Как вы видите, временные метки (я полагаю, нс) во второй раз сильно отличаются. Они не догоняют реальное время в течение нескольких секунд. Такое поведение совершенно не воспроизводимо - временные метки иногда бывают правильными, а иногда - неправильными. Однако они всегда ошибаются при первом открытии очереди.