2011-04-26 21 views
2

沒有人知道一個簡單的方法將一個恆定延遲(約30毫秒)添加到XNA 4應用程序的圖形輸出嗎?在XNA 4的圖形輸出中增加恆定延遲

我想保持我的圖形輸出與實時緩衝的音頻流保持同步,這種音頻流本質上具有恆定的延遲。

感謝您對此的任何想法!

最大

+0

您能否給我們一些關於您正在談論的延遲的想法? (即:多少毫秒?) – 2011-04-26 08:41:10

+0

延遲時間大約爲30毫秒 – Max 2011-04-26 08:57:17

+1

這看起來好像沒有多少延遲可以彌補。這是30FPS的1幀,60FPS的2幀。 – 2011-04-26 12:19:25

回答

1

如果你真的需要耽誤您的顯卡,那麼你可以做的是使你的遊戲騎車一系列渲染目標。因此,在的框架上,您將顯示在n-2處呈現的框架。這隻適用於較小的延遲,並且需要大量額外的圖形內存和少量額外的GPU時間。

好得多方法是不耽誤圖形輸出在所有,但延遲正被用於生成圖形輸出音頻。通過緩衝它或者在音頻緩衝區中有兩個讀取位置。讀取「遊戲」前的「音頻」讀取爲X毫秒(延遲)。

所以,如果您的計算機的音頻硬件具有潛伏期(並不少見)的100ms的和圖形硬件有16ms的潛伏期:當你在100毫秒餵養樣品放入音響系統,你是將16ms的音頻樣本送入您的圖形計算。與此同時,來自0ms的音頻正在擊打揚聲器,並且匹配的圖形正在擊中屏幕。

顯然,如果生成圖形輸出的東西也在生成音頻,這將不起作用。但是這兩種方法的總體原則是,你必須在輸入圖形鏈的某處緩衝輸入,以便引入與音頻體驗相對應的延遲。在那條鏈上最容易插入緩衝區取決於你。

對於< 100ms的延遲,我不會爲大多數遊戲擔心。你只關心音頻節目和節奏遊戲的這種延遲。

+0

+1的緩衝區! – jv42 2011-04-27 08:42:50

+0

感謝這個偉大的答案!我正在研究實時音樂生成應用程序 - 不幸的是,生成音樂的組件也會觸發圖形輸出。我想我會嘗試你的第一個方法。 – Max 2011-04-28 09:10:54

0

我可能不明白這個問題,但是不能跟蹤更新被調用的次數和mod 2嗎? 60fps mod 2是30 ...