Accept advancing DAC batches with repeated CoreAudio current timestamps

This commit is contained in:
firestar5683
2026-09-20 11:31:09 -07:00
parent 2ff7ed501c
commit f0950133f6
2 changed files with 7 additions and 1 deletions
+1 -1
View File
@@ -25,7 +25,7 @@ class StreamClockBridge:
if (not all(type(value) in (int,float) and math.isfinite(value) for value in (wall,current,dac))
or current<=0 or dac<=0 or not -.02<=dac-current<=5):
raise ValueError('Invalid callback clock sample')
if previous is not None and (wall<previous[0] or current<=previous[1] or dac<=previous[2]):
if previous is not None and (wall<previous[0] or current<previous[1] or dac<=previous[2]):
raise ValueError('Output callback clock did not advance')
previous=(wall,current,dac)
offsets.append(wall-current)
@@ -47,5 +47,11 @@ class StreamClockBridgeTests(unittest.TestCase):
for samples in ([(1.,0.,0.)]*8,[(1.+i*.02,500.,500.04) for i in range(8)],[]):
with self.assertRaises(ValueError):StreamClockBridge.from_callbacks(samples)
def test_coreaudio_batch_may_repeat_current_time_while_dac_advances(self):
samples=[(100.+i*.02,500.+(i//2)*.04,500.1+i*.02) for i in range(8)]
bridge=StreamClockBridge.from_callbacks(samples)
self.assertAlmostEqual(bridge.offset,-400.)
self.assertAlmostEqual(bridge.dac_wall(501.),101.)
if __name__=='__main__':unittest.main()