2009-12-30 36 views
0

就像玩具一樣,我使用iTunes SDK和XNA來製作我自己的準G​​uitarHero遊戲。實際的庫不重要,所以我沒有標記它們。這個問題是關於數據結構的。錄製/檢索不規則頻率的輸入事件

基本上我想要開始播放一首歌曲,並允許用戶彈奏吉他到歌曲,在內存中記錄紅/黃/綠/藍/橙鍵以及彈奏,以便稍後播放。

我已經嘗試了幾種不同的技術,最準確的是按位排列int[]數組,其中每個元素表示一個10ms時隙(每個int的每個位代表一個物理鍵),作爲與歌曲開始的偏移一次。這看起來效率不高,因爲我不得不將鍵盤按到這些10毫秒的插槽中,更不用說爲數分鐘的歌曲提供巨大的陣列尺寸。

有更好的方法來實現這個的任何建議嗎?我的目標是將此數據結構序列化到磁盤以供稍後檢索。這個項目的總體目標是使用這些數據以某種方式控制LED,以歌曲FWIW。

謝謝!

+1

你可能需要有音樂/數學知識的人來幫忙嗎?對於兩個音符之間的差距,10ms似乎太短,但我不是專家。 :) – 2009-12-30 00:23:40

+0

你擊中了頭部o.k.w.,10ms太短了,但是更小的東西會產生不切實際的巨大陣列! – bufferz 2009-12-30 00:31:40

+0

如果10ms太短,你不應該嘗試更大的值,如50ms,而不是更小的東西? – 2009-12-30 00:47:52

回答

1

我會以適當的精度以時間戳(相對於文件的開頭)以日誌格式存儲密鑰上下鍵盤事件。您可以將List與定製類一起使用,以存儲事件類型(哪個鍵,哪個鍵,哪個鍵)和時間戳的詳細信息。

+0

謝謝,馬克。 我已經嘗試過這種方法,它和其他任何工作一樣。我面臨的挑戰是如何在重新播放歌曲時檢索播放的琴鍵。如何確保每個重播鍵在播放期間的確切記錄時間播放? 我試圖避免不斷地檢查當前正在播放的歌曲的播放時間。你如何看待吉他英雄程序員實現了這一點? – bufferz 2009-12-30 00:30:45

+0

不知道你的應用程序是如何實現的,我很難做到精確,但我假設你的應用程序使用異步調用並且基於事件。你可以有一個解析文件並讀取下一行的類。它會檢查在下一個按鍵之前必須經過多長時間並在此時間安排事件。處理活動時,您還需要安排下一個活動。我不知道GH程序員是怎麼做到的 - 不太好,因爲GH3中至少有一個錯誤,即使你在正確的時間點擊音符,音樂也不會播放。 – 2009-12-30 00:39:50

+0

「它檢查在下一次按鍵之前必須經過多長時間並在此時間安排事件。」這正越來越接近我想要實現的目標。我如何安排一個事件在特定時間觸發,或者在異步調用後X毫秒內觸發,假設函數調用即將發生。 – bufferz 2009-12-30 01:16:52