小编use*_*177的帖子

用 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()
Run Code Online (Sandbox Code Playgroud)

python audio qt pygame pyqt

5
推荐指数
1
解决办法
2836
查看次数

标签 统计

audio ×1

pygame ×1

pyqt ×1

python ×1

qt ×1