對於this project我設計了一個音序器/ drummachine,它應該能夠以精確的速度發送MIDI音符。示例:每2秒鐘16個音符(即,在音樂術語中,在BPM 120處每十個音符16個1/16音符),即每125毫秒一個音符。Python中的精確循環時序
我在想:
import time
def midi_note_send(...):
....
while True:
midi_note_send(...)
time.sleep(0.125)
如果我不喜歡這個,怎麼肯定這將是完全125毫秒? 這個循環的1000次迭代是否會有126秒而不是125秒的風險?如果是這樣,如何有一個更精確的循環?
最後注意:一個好的鼓機應該能夠在1小時內保持120 BPM的節奏,精度誤差爲< 1秒。
使用平臺:Linux + RaspberryPi但這個問題一般是有效的。
壞消息:[時間文檔](https://docs.python.org/2/library/time.html#time。睡眠)基本上不保證睡眠實際需要多長時間。它可以小於或大於要求的時間,任意數量。就你所知,睡眠(0.125)可能需要0.0001秒或一百萬年。 (授予,這些都不太可能,但...) – Kevin
你可能想看看[這裏](http://stackoverflow.com/questions/40496780/how-to-make-while-loops-take-a- set-amount-of-time/40496844#40496844),在那裏我給了一種方法來阻止漂流。 – TemporalWolf
@Kevin哇,我從來沒有讀過'time.sleep'的文檔字符串。 [在3.5中修改](https://docs.python.org/3.6/library/time.html#time.sleep)至少睡眠指定的時間*。 –