有谁知道向 XNA 4 应用程序的图形输出添加恒定延迟(大约 30 毫秒)的简单方法?
我想让我的图形输出与具有恒定延迟的实时缓冲音频流保持同步。
感谢您对此的任何想法!
最大限度
如果你真的需要延迟你的图形,那么你可以做的就是将你的游戏渲染到一系列循环的渲染目标。因此,在第 n帧上,您显示在第n-2帧渲染的帧。这仅适用于小延迟,并且需要大量额外的图形内存和少量额外的 GPU 时间。
更好的方法是根本不延迟图形输出,而是延迟用于生成图形输出的音频。通过缓冲它或在音频缓冲区中有两个读取位置。“音频”读取在“游戏”读取之前是X 毫秒(延迟)。
因此,如果您的计算机的音频硬件有100 毫秒的延迟(并不少见),而您的图形硬件有 16 毫秒的延迟:当您将100 毫秒的样本输入音频系统时,您将 16 毫秒的音频样本输入您的图形计算。与此同时,来自0ms的音频正在播放扬声器,匹配的图形正在播放屏幕。
显然,如果生成图形输出的东西也在生成音频,这将不起作用。但是这两种方法的一般原则是,您必须在图形链的某处缓冲输入,以便引入与您正在经历的音频相对应的延迟。在这条链上最容易插入缓冲区的位置取决于您。
对于 <100 毫秒的延迟,我不会担心大多数游戏。您只真正关心音频节目和节奏游戏的这种延迟。
我可能不明白这个问题,但是您不能跟踪调用 update 和 mod 2 的次数吗?60fps mod 2 是 30...