我在做音乐播放器时使用pygame.mixer模块,遇到了一个问题,当我在set_pos()函数中设置新位置时,get_pos()函数没有输出新位置并输出初始位置时,遇到了一个来自pygame.mixer模块的问题。
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发布于 2022-11-07 20:13:10
set_pos()这将设置音乐文件中将开始播放的位置。"pos“的含义取决于音乐格式,pos是一个浮点数(或者一个可以转换成浮点数的数字)。 对于MOD文件,pos是模块中的整数模式号。对于OGG来说,它是声音开始时的绝对位置,以秒为单位。对于MP3文件,它是当前位置的相对位置(以秒为单位)。要在MP3文件中进行绝对定位,首先调用回退()。
因此,您可以使用以下代码:
def set_pos(s): # /!\ seconds
pygame.mixer.music.rewind() # mp3 files need a rewind first
freq = pygame.mixer.get_init()[0] # get the music frequency
pygame.mixer.music.set_pos(int(s*freq))但是,使用set_pos()可以给您带来这样的错误,例如,对于.ogg声音文件:
pygame.error: set_pos unsupported for this codec然后,您应该更喜欢像这样使用pygame.mixer.music.play(loops, start):
pygame.mixer.music.play(0, s) # /!\ seconds从医生那里:
开始位置取决于所播放的音乐的格式。MP3和OGG以秒为单位使用这个位置作为时间。对于MP3文件,选择的启动时间位置可能不准确,因为可变比特率编码和ID3标记可能会抛出计时计算。对于MOD音乐,它是模式序号。如果无法设置开始位置,传递开始位置将引发NotImplementedError。
通常情况下,您应该使用.ogg文件,因为在.mp3之前已经实现了它们,并且它们具有精确的移动位置(“对于MP3文件,选择的启动时间位置可能不准确”)。
get_pos()可以给出奇怪的结果,因为它只显示了播放的时间。所以,它没有考虑到,如果音乐在1秒前开始播放,你会“跳”整整一分钟。它将输出1000 (ms)。医生:这将获得音乐播放的毫秒数。返回的时间仅表示音乐播放了多长时间;它不考虑任何起始位置偏移。
链接:不支持此编解码器的pos
https://stackoverflow.com/questions/73089784
复制相似问题