我的python音频播放器有问题。我使用此功能暂停正在播放的音乐:
def pause(event):
global time
pygame.mixer.music.pause()
time=pygame.mixer.music.get_pos()
然后,我试图从它停止使用此功能的位置再次播放它:
def play(event):
global time
name=listbox.get(ACTIVE)
file="music/"+str(name)
mixer.music.load(file)
pygame.mixer.music.play()
if time >0:
pygame.mixer.music.set_pos(time)
mixer.music.play()
else:
mixer.music.play()
但之后我收到此错误:pygame.error: set_pos unsupported for this codec
我也试过pygame.mixer.music.unpause()函数:
def play(event):
global time
name=listbox.get(ACTIVE)
file="music/"+str(name)
mixer.music.load(file)
if time >0:
mixer.music.unpause()
else:
mixer.music.play()
但它根本不起作用,在这种情况下完全没有错误。 我在Windows 10(64位)上使用python 3.6和pygame 1.9.3。
答案 0 :(得分:1)
此错误是因为set_pos()
的时间单位是秒,而get_pos()
的时间单位是毫秒。
因此,您的set_pos()
函数应该传递time/1000
而不是时间:
pygame.mixer.music.set_pos(time/1000)
答案 1 :(得分:0)
没有足够的回复评论。
不幸的是,仅在v 1.9.2之后支持pygame.mixer.music.set_pos()。因为你有1.9.3,它应该在你的代码中运行。我找不到原因,但我可以为您提供另一种选择:
play_time = pygame.mixer.music.get_pos()
这将为您提供以毫秒为单位的游戏时间。 'play_time'的类型是'int'。初始化变量'start = 0'。你现在可以使用
start = start + play_time/1000.0
每当你暂停()或停止()以便在几秒钟内获得时间。为什么将它添加到之前的值是因为如果你没有将'play_time / 1000.0'添加到start的前一个值,那么get_pos()将只计算自你开始播放以来所经过的时间,并且不会给你当前的时间播放暂停或停止的位置,但是从上次播放开始以来仅经过了一段时间。
现在你可以在
之前或之后做到这一点pygame.mixer.music.pause() #or stop()
您现在可以暂停时间。
不使用set_pos(),而是转到
pygame.music.play(-1, start)
请注意play(loop,start_pos)以秒为单位取start_pos。所以我们需要秒。你现在可以删除set_pos()
替代: 只需使用
pygame.mixer.music.pause()
pygame.mixer.music.unpause()
您不需要计算时间然后重新设置。