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

时间:2019-05-20 09:05:57

标签: python python-3.7

我创建了一个tkinter程序,该程序使用秒表类作为整个程序的基础。秒表从-6秒开始计时,并前进至0并变为正刻度。 在运行我的应用程序时,我成功地获得了一些“拖曳的树灯”(屏幕上的图形)以响应计划的时间:-

琥珀色灯1在-3秒内 琥珀色指示灯1灭琥珀色指示灯2亮-2秒 琥珀色灯2灭琥珀色灯3亮起-1秒 琥珀色灯3熄灭绿灯亮0.0秒

还有一个错误的开始事件“红灯”(在计时器达到0.000秒之前进入比赛区域)。

我的问题是我想向该程序添加声音,以便每次发出灯光时都会发出哔哔声。

我非常喜欢使用pygame.mixer()使它工作

尽管开始播放声音,但从播放声音的时间起稍有延迟,并且倒计时蜂鸣声在整个过程中听起来并不一致。

通过阅读一些Stackoverflow论坛帖子所获得的理解;我需要学习一种称为MULTI-THREADING的技术,以使其无缝运行。

有人对tkinter有多线程pygame.mixer()经验吗? 任何人都可以为我提供有关如何实现我的目标的有用教程的正确方向吗? 任何帮助/建议将不胜感激。

我将所有声音处理包含在一个(非常有趣)声音的类中。我正在使用的三种声音中的每一种都有一个函数,我只需从秒表类的updater函数调用这些函数。 按照我阅读的有关pygame.mixer()的文章中的建议,声音将另存为“ ogg”

这是带有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个琥珀色灯使用完全相同的声音,但是当我执行我的应用程序时,它们中至少有一个听起来会异相。

0 个答案:

没有答案