pygame.error:set_pos不支持此编解码器

时间:2017-05-23 11:38:41

标签: python audio tkinter pygame audio-player

我的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。

2 个答案:

答案 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()

您不需要计算时间然后重新设置。