循环播放音乐,直到一个键被释放.Python



我正在用python制作一个小GUI,使用cocos2d和pyglet模块。GUI应该在按下"h"时播放声音,并在释放"h"时停止。问题是我找不到解决办法。在搜索这个网站后,我发现了这个问题-如何在pyglet中连续播放音乐,这个问题是我无法在开始后停止声音。

编辑:我找到了一种方法来播放声音,直到键释放,但遇到了另一个问题

现在应该播放音乐的代码看起来像这样:

class Heartbeat (cocos.layer.Layer):
    is_event_handler=True
    def __init__ (self):
        super(Heartbeat, self).__init__()
        global loop, music, player
        music = pyglet.media.load('long_beep.wav')
        loop=pyglet.media.SourceGroup(music.audio_format, None)
        player=pyglet.media.Player()
        loop.queue(music)
        player.queue(loop)
    def on_key_press(self, key, modifiers):
        if chr(key)=='h':
            loop.loop=True
            player.play()
    def on_key_release (self, key, modifiers):
        if chr(key)=="h":
            loop.loop=False

此代码在第一次按下并按住"h"键时有效,在随后的尝试中不起作用。Python不会引发异常,它似乎只是忽略了在第一次发布之后出现的"h"键。

注意:语句- if chr(key)=="h"可能不是按键处理的最佳解决方案,但我对使用cocos2d和pyglet模块相对较新。

没关系,我已经弄清楚了,我所要做的就是将player.queue(loop)行从初始化函数移动到处理按键的函数。更新后的代码如下所示:

class Heartbeat (cocos.layer.Layer):
    is_event_handler=True
    def __init__ (self):
        super(Heartbeat, self).__init__()
        global loop, music, player
        music = pyglet.media.load('long_beep.wav')
        loop=pyglet.media.SourceGroup(music.audio_format, None)
        player=pyglet.media.Player()
        loop.queue(music)
    def on_key_press(self, key, modifiers):
        if chr(key)=='h':
            loop.loop=True
            player.queue(loop) #This is the line that had to be moved
            player.play()
    def on_key_release (self, key, modifiers):
        if chr(key)=="h":
            loop.loop=False

相关内容

最新更新