当前位置: 首页 > 面试题库 >

Pygame-声音延迟

蔺德曜
2023-03-14
问题内容

我制作了一个按钮类,用于检查是否选择了按钮(当鼠标悬停在按钮上时)。当选择按钮,取消选择或点击它起着一个wav文件。问题在于声音播放和按钮状态更改之间存在巨大的延迟。程序应检查每一帧,以查看是否满足播放声音的条件,但fps似乎不是问题(60和600
fps给出相同的延迟)。我试过减小中的缓冲区值,pygame.mixer.init()但这也没有区别。

声音文件:

buttonSoundSelect = pygame.mixer.Sound(os.path.join(soundPath, "button1.wav"))
buttonSoundUnselect = pygame.mixer.Sound(os.path.join(soundPath, "button2.wav"))
buttonSoundClick = pygame.mixer.Sound(os.path.join(soundPath, "button3.wav"))
buttonSounds = [buttonSoundSelect, buttonSoundUnselect, buttonSoundClick]

创建对象:

playButton = button(textInactive = "Play", font = mainFont, sounds = buttonSounds,  command = playAction)

按钮类中的代码,用于检查是否选择了按钮(这在方法中.display,称为每帧):

    if pygame.mouse.get_pos()[0] >= self.x and pygame.mouse.get_pos()[0] <= self.x + self.width and \
       pygame.mouse.get_pos()[1] >= self.y and pygame.mouse.get_pos()[1] <= self.y + self.height:

        self.surfaceActive.blit(self.textSurfaceActive, (self.width / 2 - self.font.size(self.textActive)[0] / 2,
                                                   self.height / 2 - self.font.size(self.textActive)[1] / 2))

        self.surface.blit(self.surfaceActive, (self.x, self.y))

        if self.selected == False:
            if self.sounds != None:
                self.sounds[0].stop()
                self.sounds[1].stop()
                self.sounds[2].stop()
                self.sounds[0].play()
            self.selected = True

    else:

        self.surfaceInactive.blit(self.textSurfaceInactive, (self.width / 2 - self.font.size(self.textInactive)[0] / 2,
                                                     self.height / 2 - self.font.size(self.textInactive)[1] / 2))

        self.surface.blit(self.surfaceInactive, (self.x, self.y))

        if self.selected == True:
            if self.sounds != None:
                self.sounds[0].stop()
                self.sounds[1].stop()
                self.sounds[2].stop()
                self.sounds[1].play()
            self.selected = False

按钮类中用于检查是否单击按钮的代码(这是在.clickEvent单击鼠标左键时调用的方法内部):

    if self.command != None:

        if pygame.mouse.get_pos()[0] >= self.x and pygame.mouse.get_pos()[0] <= self.x + self.width and \
           pygame.mouse.get_pos()[1] >= self.y and pygame.mouse.get_pos()[1] <= self.y + self.height:

            if self.sounds != None:
                self.sounds[2].play()
            self.command()

所以我的问题是:为什么会有很长的延迟,我可以缩短它吗?


问题答案:

减小缓冲区的大小将减少延迟。缓冲区必须是2的幂。默认缓冲区是4096,但是您可以在初始化混音器时更改它,如下所示:

pygame.mixer.init(44100, -16, 2, 64)

可以在pygame文档中找到更多信息



 类似资料:
  • 问题内容: 我正在尝试使用pygame播放声音文件(.wav),但是当我启动它时却听不到任何声音。 这是代码: 我也尝试使用频道,但结果是一样的 问题答案: 您的代码在我的机器上可以正常运行(Mac OSX 10.5,Python 2.6.4,pygame 1.9.1)。您正在使用哪些OS,Python和pygame版本?您是否可以通过其他方式(例如,在Mac的终端上或在Windows控制台上,然

  • 本文向大家介绍pygame学习笔记(4):声音控制,包括了pygame学习笔记(4):声音控制的使用技巧和注意事项,需要的朋友参考一下 pygame.mixer是一个用来处理声音的模块,其含义为“混音器”。游戏中对声音的处理一般包括制造声音和播放声音两部分,这里仅学习了播放声音部分。 1、pygame.mixer启动与初始化 pygame.mixer.init():mixer的初始化。程序中,使用

  • 其中surl是播放音乐的span元素的声音和音乐的url。有人知道如何播放声音而不延迟整个程序吗? 我尝试了一个相当大的文件,结果发现,虽然它确实在后台播放,但在启动声音和继续游戏之间仍有相当大的延迟。

  • Pygame混音器在Pygame窗口未激活时不播放音频。是否有可能在这样的环境下编程,即使在后台也可以加载和播放新的声音文件?下面是我的pygame代码。

  • 问题内容: 我想让一个python程序通过发出哔哔声来提醒我。当前,我使用然后使用命令行语音程序说“处理完成”。我宁愿它只是一个简单的“钟”。 我知道有一个可以在 Cocoa 应用程序中使用的功能,但是我认为这与该功能没有任何关系。 我也尝试过 但这没用。 如果您无法从我的 可可粉 评论中得知,我正在使用Mac,这可能会有所帮助。 问题答案: 你有没有尝试过 : 在Mac OS 10.5上适合我

  • 在Microsoft Windows中,声音、音乐与视讯的综合运用是一个重要的进步。对多媒体的支持起源于1991年所谓的Microsoft Windows多媒体延伸功能(Multimedia Extensions to Microsoft Windows)。1992年,Windows 3.1的发布使得对多媒体的支持成为另一类API。最近几年,CD-ROM驱动器和声卡-在90年代初期还很少见-已成为

  • The Audio Listener acts as a microphone-like device. It receives input from any given Audio Source in the scene and plays sounds through the computer speakers. For most applications it makes the most

  • 声音系统的接口主要面向两类需求,一类是长度较长,循环持续播放的 “音乐”,一类是长度较短,一次性播放的 “音效”。 所有音频资源都会在编辑器内导入成 AudioClip 资源,要播放声音,首先需要在场景里创建 AudioSource。 对于音乐,可以直接将 AudioClip 赋给 AudioSource 上的 clip 属性,勾选 playOnAwake 属性或脚本调用组件的 play 方法来控