Создание точного метронома с python и Qt

Я пытаюсь добавить простой метроном в мою кроссплатформенную программу pyQt, но испытываю большие трудности с получением точного времени. Воспроизведение звука, кажется, работает лучше всего с использованием звуковой системы PyGame. Я попробовал Phonon, но он просто был непоследователен, и QSound вообще не работает в моей системе. Я пытался обработать синхронизацию с библиотекой времени Python и использовать QTimers, но QTimeLine, похоже, работает лучше всего.

Время в более низком темпе не так уж плохо ... все еще икота здесь и там. Однако более высокие темпы совсем не точны.

Любые идеи / предложения будут с благодарностью!

Вот некоторый код:

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()

Ответы на вопрос(1)

Ваш ответ на вопрос