Mus*_*sis 6 .net windows audio
假设我播放一个317,520,000个样本的立体声WAV文件,理论上是1小时.假设没有播放的中断,将在文件播放结束正好一小时还是有在播放速度偶尔有一些微小的变化使得它将超过一小时稍多或稍少(通过数毫秒)?
我正在尝试将动画与音频同步,我正在使用a System.Diagnostics.Stopwatch
来保持帧与音频匹配.但是,如果Windows中WAV音频的播放速度随时间略有不同,则音频将与秒表驱动的动画不同步.
这导致了第二个问题:似乎a Stopwatch
- 虽然高度精细且准确,持续时间短 - 运行速度稍快.在我的笔记本电脑上,Stopwatch
运行24小时(通过计算机的系统时间和真正的秒表测量)显示24小时的经过时间加上大约5秒(不是毫秒).
这是一个已知的问题Stopwatch
吗?(一个相关的问题是"我疯了吗?",但你可以自己尝试一下.)鉴于它作为诊断工具的用途,我可以看到这样的差异只会在测量长持续时间时出现,其中大多数人们会使用除了a之外的东西Stopwatch
.
如果我真的很幸运,那么两者Stopwatch
和音频播放都是由相同的底层机制驱动的,因此会在几天内保持同步.这是真的吗?
更新:我刚刚做了数学计算,如果Stopwatch
在24小时内漂移5秒,这意味着它会在172秒后漂移10毫秒.因此,在3分钟内,动画将开始明显不同步.
我正在周期性地(大约每10秒左右)尝试从waveOutWrite回调中重新启动计时器,但这不起作用,因为随后回调的不准确性将导致整个下一组计时器事件被抵消. .很难成为我.
拉里·奥斯特曼在评论中给出了答案:
FWIW,在 Windows 中,视频时钟由音频时钟驱动。如果您正在渲染音频,则可以通过调用 waveOutGetPosition 来获取音频时钟(由于音频是同步的,因此位置与时间直接相关)。所有其他音频渲染 API 都有类似的“GetPosition”API,可用于确定音频渲染位置。
归档时间: |
|
查看次数: |
391 次 |
最近记录: |