如何将pygame.mixer声音多线程处理到tkinter程序中

2024-06-14 03:27:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了一个tkinter程序,它使用stopwatch类作为整个程序的基础。秒表开始计时-6秒,然后前进到0并进入正刻度。 当我运行我的应用程序时,我成功地获得了一些“拖动树灯”(屏幕上的图形)来对计划时间做出反应:-

琥珀色灯1亮-3秒 琥珀色灯1关闭琥珀色灯2打开-2秒 琥珀色灯2关闭琥珀色灯3打开-1秒 琥珀色灯3熄灭绿灯亮0.0秒

还有一个错误启动的事件“红灯”(在计时器达到0.000秒之前进入比赛场地)

我的问题是,我想给这个程序添加声音,这样每次灯光出现时都会发出嘟嘟声

我几乎用pygame.mixer()实现了这一点

尽管开始播放声音,但从播放开始还有一点延迟,倒计时的嘟嘟声在整个过程中听起来并不一致

通过阅读Stackoverflow论坛的一些帖子,我的理解是:;我需要学习一种称为多线程的技术,以使其无缝工作

有人有过使用tkinter的多线程pygame.mixer()的经验吗? 关于如何实现我的目标的有用教程,有人能给我指出正确的方向吗? 如有任何帮助/建议,将不胜感激

我已经在一个叫做(有趣的是)sound的类中包含了所有的声音处理。我正在使用的3种声音都有一个函数,我只需从stopwatch类的updater函数调用这些函数。 这些声音被保存为“ogg”,正如我读过的关于pygame.mixer()的文章中所建议的那样

这是包含pygame.mixer()代码的类:-

class Sound():

    mixer.init()                    

    def countbeep(self): 

        countbeep = mixer.Sound("CountBeep.ogg")
        countbeep.play()
        return      

    def gobeep(self):

        gobeep = mixer.Sound("GoBeep.ogg")
        gobeep.play()
        return

    def buzzer(self):

        buzzer = mixer.Sound("Buzzer.ogg")
        buzzer.play()
        return

下面是一个更新程序代码的示例,它调用

职能:

def Updater(self):
    self.totalTime = time.time() - self.startTime
    self.SetTime(self.totalTime)
    self.counter = float('%.1f' % self.totalTime)

    if self.counter == self.red_off:
        LightTree.redlite(self, False)

    if self.counter == -3.0:
        Sound.countbeep(self)
        LightTree.amber_1(self, True)

此时,程序将在没有错误消息的情况下执行。有一个问题是声音发出时有轻微的延迟。由于此应用程序旨在用作运动教练,因此需要正确计时。3个琥珀色灯使用完全相同的声音,但当我执行我的应用程序时,其中至少有一个会发出异相的声音


Tags: self程序应用程序声音playreturndefpygame