【问题标题】:pygame.error: set_pos unsupported for this codecpygame.error:此编解码器不支持 set_pos
【发布时间】:2017-05-23 11:38:40
【问题描述】:

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

我也试过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。

【问题讨论】:

    标签: python audio tkinter pygame audio-player


    【解决方案1】:

    没有足够的代表发表评论。

    不幸的是 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
    

    每次你 pause() 或 stop() 以秒为单位获取时间。为什么将其添加到先前的值是因为如果您不将“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()
    

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

    【讨论】:

      【解决方案2】:

      这个错误是因为set_pos()的时间单位是秒,而get_pos()是毫秒。

      所以你的set_pos() 函数应该通过time/1000 而不是时间:

      pygame.mixer.music.set_pos(time/1000)
      

      【讨论】:

        【解决方案3】:

        在 play() 之后调用 set_pos()。

        【讨论】:

          猜你喜欢
          • 2021-02-14
          • 2019-05-21
          • 2019-02-12
          • 2013-03-31
          • 1970-01-01
          • 1970-01-01
          • 2011-11-12
          • 2021-10-24
          • 1970-01-01
          相关资源
          最近更新 更多