循环播放音乐,直到松开一个键。 Python
Playing music on loop until a key is released. Python
我正在使用 python 和 pyglet 模块制作一个小图形用户界面。 GUI 应在按下 "h" 时播放声音,并在松开时停止。这里的问题是我找不到解决方案。搜索该站点后,我发现了这个问题 - How to play music continuously in 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
注意:我省略了 import 等用于初始化的语句,因为它们与此问题无关。
我正在使用 python 和 pyglet 模块制作一个小图形用户界面。 GUI 应在按下 "h" 时播放声音,并在松开时停止。这里的问题是我找不到解决方案。搜索该站点后,我发现了这个问题 - How to play music continuously in 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
注意:我省略了 import 等用于初始化的语句,因为它们与此问题无关。