【发布时间】:2011-01-27 12:19:01
【问题描述】:
假设我播放一个包含 317,520,000 个样本的立体声 WAV 文件,理论上需要 1 小时。假设播放没有中断,文件会在恰好一小时内完成播放吗,或者播放速度是否偶尔会有一些微小的变化,以至于它会稍微多一些或稍微少一些(通过一些毫秒)超过一小时?
我正在尝试将动画与音频同步,并且我正在使用System.Diagnostics.Stopwatch 来保持帧与音频匹配。但是,如果 Windows 中 WAV 音频的播放速度会随着时间的推移而略有变化,那么音频将与秒表驱动的动画不同步。
这导致了第二个问题:似乎Stopwatch - 虽然在短时间内高度精细且准确 - 运行速度略快。在我的笔记本电脑上,Stopwatch 运行了 24 小时(由计算机的系统时间和真正的秒表测量)显示 24 小时的经过时间加上大约 5 秒(不是毫秒)。
这是Stopwatch 的已知问题吗? (一个相关的问题是“我疯了吗?”,但您可以自己尝试一下。)鉴于它用作诊断工具,我可以看到只有在测量长持续时间时才会出现这样的差异,其中大多数人们会使用 Stopwatch 以外的其他东西。
如果我真的很幸运,那么Stopwatch 和音频播放都是由相同的底层机制驱动的,因此会连续几天保持同步。这是真的吗?
更新:我刚刚算了一下,如果Stopwatch 在 24 小时内漂移 5 秒,这意味着它会在 172 秒后漂移 10 毫秒。所以在 3 分钟后,动画将开始明显不同步。
我正在尝试定期(每 10 秒左右)从 waveOutWrite 回调重新启动计时器,但这不起作用,因为无论回调的不准确性如何,整个下一组计时器事件都会被抵消碰巧是。真讨厌我。
【问题讨论】:
-
你怎么知道你的“真正的秒表”没有跑慢?
-
@Ben S:还用台钟(带秒)和另一台 PC 进行计时。除了
Stopwatch,所有东西都有相同的时间给予或花费半秒。我只是因为另一个 StackOverflow 问题才尝试这个,有人提到 Stopwatch 在他们的 PC 上每 24 小时快速运行大约 10 秒。我很乐意看到其他人证实/驳斥这一点。 -
不能为此设置一些测试吗?我相信你可以从华盛顿的原子钟上采样时间,然后在八小时左右的时间内使用秒表和其他机制,并建立一个相对准确度的图表......
-
有趣,我要给它加星标看看它的去向。您是否搜索过有关此问题的错误报告?我本以为现在有人会发现这一点,除非
Stopwatch文档明确指出它只能在短时间内使用。