我制作了一个按钮类,用于检查是否选择了按钮(当鼠标悬停在按钮上时)。当选择按钮,取消选择或点击它起着一个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 方法来控