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
相关产品推荐
相关产品推荐

