You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pygame.mixer.set_pos()调用后get_pos()返回值不符合预期求助

Pygame mixer.music.get_pos() 无法正确返回 set_pos() 设置后的播放位置

调用pygame.mixer.music.set_pos()调整音频播放位置后,get_pos()返回的是从初始调用play()开始计算的时长,而非从设置位置起累计的总播放位置。

代码示例

from time import sleep
from pygame import mixer

mixer.init()
mixer.music.load("file.mp3")
mixer.music.play()
mixer.music.set_pos(10.0)
sleep(2)
print(mixer.music.get_pos())

实际输出

2000 ms

预期输出

12000 ms

问题原因

pygame.mixer.music.get_pos()的设计逻辑是返回从首次调用play()到当前的毫秒数,set_pos()仅调整音频的播放进度,但不会重置或偏移这个内部计时的起点,因此无法直接通过该方法获取包含设置偏移后的总播放位置。

解决方案

方案1:手动计算偏移后的总位置

记录set_pos()设置的偏移量,将get_pos()的返回值与偏移量相加,得到实际的总播放位置:

from time import sleep
from pygame import mixer

mixer.init()
mixer.music.load("file.mp3")
mixer.music.play()

# 记录设置的位置偏移(转成毫秒)
pos_offset = 10.0 * 1000
mixer.music.set_pos(pos_offset / 1000)

sleep(2)
# 计算实际总播放位置
current_total_pos = mixer.music.get_pos() + pos_offset
print(f"{current_total_pos} ms")

方案2:直接从指定位置启动播放

如果是刚开始播放就需要定位到指定位置,可以直接用play()的start参数,后续结合get_pos()计算总位置:

from time import sleep
from pygame import mixer

mixer.init()
mixer.music.load("file.mp3")

# 直接从10秒位置开始播放
start_pos = 10.0
mixer.music.play(start=start_pos)

sleep(2)
# 计算总播放位置
total_pos = (start_pos * 1000) + mixer.music.get_pos()
print(f"{total_pos} ms")

如果是中途调整位置,可以先停止播放,再从目标位置重新启动:

from time import sleep
from pygame import mixer

mixer.init()
mixer.music.load("file.mp3")
mixer.music.play()

# 中途调整到10秒位置
target_pos = 10.0
mixer.music.stop()
mixer.music.play(start=target_pos)

sleep(2)
total_pos = (target_pos * 1000) + mixer.music.get_pos()
print(f"{total_pos} ms")

内容的提问来源于stack exchange,提问作者Mohsen Rahmani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 19:12:22