Tworzenie dokładnego metronomu z pytonem i Qt

Próbuję dodać prosty metronom do mojego wieloplatformowego programu pyQt, ale mając duże trudności z uzyskaniem dokładnego pomiaru czasu. Odtwarzanie dźwięku wydaje się działać najlepiej przy użyciu systemu dźwiękowego PyGame. Spróbowałem Phonona, ale w ogóle nie był on spójny, a QSound w ogóle nie działa w moim systemie. Próbowałem obsługiwać timing za pomocą biblioteki czasu Pythona i używać QTimerów, ale QTimeLine wydaje się działać najlepiej.

Czas w niższym tempie nie jest taki zły ... wciąż czkawka tu i tam. Wyższe tempa nie są jednak dokładne.

Wszelkie pomysły / sugestie byłyby bardzo mile widziane!

Oto kod:

class Metronome(object):
    def init_metronome(self):
        self.metronome_timer = QtCore.QTimeLine(100000)
        self.metronome_timer.valueChanged.connect(self.tick)
        self.metronome_timer.setCurveShape(3) #linear curve

        self.ui.pushButton_metronome.toggled.connect(self.toggle_metronome)
        self.ui.spinBox_metronome_bpm.valueChanged.connect(self.set_metronome_bpm)

        pygame.mixer.init()
        self.sound = pygame.mixer.Sound("./sounds/tick.wav")


    def toggle_metronome(self):
        if self.ui.pushButton_metronome.isChecked() == True:
            self.set_metronome_bpm()
            self.metronome_timer.start()
        else: 
            self.metronome_timer.stop()

    def set_metronome_bpm(self):
        bpm = self.ui.spinBox_metronome_bpm.value()
        self.metronome_timer.setUpdateInterval(60./bpm * 1000)

    def tick(self):
        QtCore.QCoreApplication.processEvents()
        self.sound.play()

questionAnswers(1)

yourAnswerToTheQuestion