我正在制作一个简单的节拍器,它每隔几毫秒播放一次嘀嗒声,具体取决于bpm,并使用winsound模块播放声音。我使用tkinter因为稍后会有一个gui组件,但是现在节拍器代码正在工作,它以恒定速率播放声音,但即使我设置后循环每隔几毫秒播放声音,它等待的时间更长,节拍比它应该慢。这是代码的问题还是我计算时间的问题?
感谢。
这是我的代码。
from Tkinter import *
import winsound,time,threading
root=Tk()
c=Canvas(root)
c.pack()
class metronome():
def __init__(self,root,canvas,tempo=100):
self.root=root
self.root.bind("<1>",self.stop)
self.c=canvas
self.thread=threading.Thread(target=self.play)
self.thread.daemon=True
self.pause=False
self.tempo=tempo/60.0
self.tempo=1.0/self.tempo
self.tempo*=1000
def play(self):
winsound.PlaySound("tick.wav",winsound.SND_FILENAME)
self.sound=self.c.after(int(self.tempo),self.play)
def stop(self,e):
self.c.after_cancel(self.sound)
beat=metronome(root,c,120)
beat.thread.start()
root.mainloop()