我有一個包含一些時間間隔事件的列表的文件。這裏是一個例子:如何重播事件列表一貫
0, Hello World
0.5, Say Hi
2, Say Bye
我希望能夠重播這一系列事件。第一列是兩個連續事件之間的增量(第一啓動immendiately,第二發生0.5秒之後,第三個約2s後,...)
我怎麼能做到這一點在Windows上。有什麼可以確保我對時間非常準確?這個想法應該儘可能地接近您將會聽到的音樂,您不希望您的音頻事件發生在接近正確的時間,但只是準時。
我有一個包含一些時間間隔事件的列表的文件。這裏是一個例子:如何重播事件列表一貫
0, Hello World
0.5, Say Hi
2, Say Bye
我希望能夠重播這一系列事件。第一列是兩個連續事件之間的增量(第一啓動immendiately,第二發生0.5秒之後,第三個約2s後,...)
我怎麼能做到這一點在Windows上。有什麼可以確保我對時間非常準確?這個想法應該儘可能地接近您將會聽到的音樂,您不希望您的音頻事件發生在接近正確的時間,但只是準時。
這可以容易地通過使用sleep
函數從time
模塊來完成。確切的代碼應該像這樣工作:
import time
# Change data.txt to the name of your file
data_file = open("data.txt", "r")
# Get rid of blank lines (often the last line of the file)
vals = [i for i in data_file.read().split('\n') if i]
data_file.close()
for i in vals:
i = i.split(',')
i[1] = i[1][1:]
time.sleep(float(i[0]))
print i[1]
這是一個不完美的算法,但它應該給你如何可以做到這一點的想法。我們讀取文件,將它分割成一個換行符分隔的列表,然後通過每個逗號分隔的聯對睡眠指定的秒數,並打印指定的字符串。
您正在尋找在Python time.sleep(...)
。
如果您加載該文件的列表,然後打印值,
import time
with open("datafile.txt", "r") as infile:
lines = infile.read().split('\n')
for line in lines:
wait, response = line.split(',')
time.sleep(float(wait))
print response
是的,我已經來翻過這一解決方案,但不知道如果我們能實現更精確的結果。 Timer api(據我所知)不足以正確模擬。我的簡單示例沒有顯示幕後的真實應用,但我確實需要Windows上的最佳準確性(這就是爲什麼我打算直接調用Win32 C api) – Dave
我懷疑可能是這種情況。由於print語句需要花費時間(如同分割字符串一樣),所以此算法將不準確,因爲所需的時間總是稍長於文件中指定的時間。一個簡單的解決方案來自愛好者的遊戲編程。 他們的解決方案是在循環的開始記錄時間,並在循環結束(我們睡覺前),得到的開始和結束時間之間的差異,並減去從我們睡覺的量。這會給你一個更準確的(雖然技術上還不完美)的延遲。 –