【问题标题】:Add constant latency to graphical output in XNA 4在 XNA 4 中为图形输出添加恒定延迟
【发布时间】:2011-04-27 20:18:47
【问题描述】:

有人知道向 XNA 4 应用程序的图形输出添加恒定延迟(大约 30 毫秒)的简单方法吗?

我想让我的图形输出与具有恒定延迟的实时缓冲音频流保持同步。

感谢您对此提出任何想法!

最大

【问题讨论】:

  • 你能给我们一些关于你所说的延迟的想法吗? (即:多少毫秒?)
  • 延迟约30毫秒
  • 这似乎不需要太多延迟来弥补。即 30FPS 时 1 帧,60FPS 时 2 帧。
  • +1。这可能小于实际的显示延迟(如果在 PC/XBox360 上,对于 WP7 则不知道)。大多数 LCD 显示器都有这种延迟(可以引用来源,但用法语)。
  • 你是对的 - 可能更多 - 30 ms 大约是缓冲区大小导致的时间,但可能会有额外的延迟,例如音频硬件。不幸的是,延迟大到足以让人看到......

标签: xna xna-4.0


【解决方案1】:

如果您真的需要延迟您的图形,那么您可以做的是将您的游戏渲染到一系列循环渲染目标。因此,在帧 n 上,您会显示在帧 n-2 处渲染的帧。这仅适用于较小的延迟,并且需要大量额外的图形内存和少量的额外 GPU 时间。

更好的方法是完全不延迟图形输出,而是延迟用于生成图形输出的音频。通过缓冲它或在音频缓冲区中有两个读取位置。 “音频”读取比“游戏”读取提前 X 毫秒(延迟)。

因此,如果您的计算机音频硬件有 100 毫秒 的延迟(并不少见),而您的图形硬件有 16 毫秒 的延迟:当您在 100ms 进入音频系统,您将 16ms 的音频样本输入到图形计算中。与此同时,来自 0ms 的音频正在播放扬声器,匹配的图形正在播放屏幕。

如果生成图形输出的东西同时也生成音频,这显然是行不通的。但是这两种方法的一般原则是,您必须在图形链的某处缓冲输入,以便引入与您正在经历的音频相对应的延迟。在这条链上最容易插入缓冲区的位置取决于您。

对于

【讨论】:

  • 感谢您的出色回答!我正在开发一个实时音乐生成应用程序——不幸的是,生成音乐的组件也会触发图形输出。我想我会尝试你的第一种方法。
【解决方案2】:

我可能不明白这个问题,但是您不能跟踪调用 update 和 mod 2 的次数吗? 60fps mod 2 是 30...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-16
    • 1970-01-01
    • 2011-01-25
    • 2022-01-28
    • 2017-11-04
    • 2018-01-19
    相关资源
    最近更新 更多