Создание точного метронома с 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()