我的 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。
最佳答案
没有足够的代表发表评论。
不幸的是 pygame.mixer.music.set_pos() 仅在 v 1.9.2 之后受支持。由于您有 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()
您不需要计算时间然后再次设置。
关于python - pygame.错误: set_pos unsupported for this codec,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44133774/