pygame混音器音乐ogg播放失真后长时间闲置

2024-06-16 17:34:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个在设备上运行的python程序(Raspberry Pi Zero W,Raspbian Stretch Lite),当用户按下某个按钮时,播放一个音频文件。为此,我使用pygame音乐。混音器()功能。一个命令启动循环播放,另一个命令停止循环播放。当程序刚刚启动时,这一切都非常顺利,没有任何问题。然而,如果系统持续运行数小时(或数天),声音回放就会发生一些事情:它不会立即启动,在某些暂停之后,会开始一个奇怪的、起伏的播放:显然,原始声音的一小段(如1/8或1/10秒)会快速循环,而这个微小的片段会随着时间发生一些变化。很久以前我就经历过这样的事情,DOS游戏由于软盘读取而受阻,Sound Blaster上的音乐播放陷入了缓冲区中最后一位音频数据的小循环中。在

我试图在纯Python控制台中复制这个问题:

from pygame import mixer
mixer.init()
mixer.music.load('file.ogg')
mixer.music.play(-1) # Normal playback
mixer.music.stop()
# Much later
mixer.music.play(-1) # Glitchy playback
# Then stop
mixer.music.stop() # Even though the command returns immediately, the audio stops only after some time

代码在开始时初始化pygame混频器mixer.init(),并始终重用同一混频器对象。我检查了如果mixer对象被重新初始化,情况是否会有所不同:

^{pr2}$

事实上,这解决了这个问题,而且回放又是正常的。有趣的是,mixer.quit()调用返回花费了相当长的时间。显然,搅拌机的破坏者有很多清洁工作要做。我希望我可以在程序启动时初始化混频器一次,但现在看来这种方法有问题。在

有没有办法让一个单一的混频器对象保持长时间的活动?在


Tags: 对象命令程序声音play音乐init时间
1条回答
网友
1楼 · 发布于 2024-06-16 17:34:39

我又用了一个调音器来解决这个问题,我又用了一个调音器停止了播放

def player_handler(self):
    if self.player.mixer.music.get_busy() == False: #music ended
        self.player.mixer.quit()            
        self.player.mixer.init()

我的处理程序每秒钟都在运行,这对我来说是固定的。虽然不太优雅。。。在

相关问题 更多 >