Pygame中音乐播放完成后如何自动退出while循环
问题场景
基于pygame mixer实现的音乐播放逻辑存在两难矛盾:
- 保留当前硬编码的死循环
while True: continue时,即便音乐播放完毕,程序也永远卡在循环里无法自动退出 - 直接移除这个while循环,主程序会在音频刚启动时就执行完毕退出,没法等音乐完整播完。
当前原始代码如下:
from pygame import mixer def mplayer(name): ''' for playing music ''' mixer.init() mixer.music.load(name) mixer.music.set_volume(0.7) mixer.music.play() mplayer('welcome.mp3') while True: continue
实现方法
不需要靠死循环卡死程序,借助pygame mixer自带的播放状态检测接口,就能实现音乐播完自动退出循环的效果:
- 核心检测接口为
mixer.music.get_busy(),该方法会返回实时播放状态:音乐正在播放时返回True,播放自然结束、被主动暂停/停止时返回False - 把原有的无限循环条件替换为该状态判断,就能做到音乐没播完就持续等待,播完立刻自动跳出循环
- 可以在循环内添加极短的休眠时间,避免空转的高速循环占满CPU资源
调整后的可运行代码:
from pygame import mixer import time def mplayer(name): ''' for playing music ''' mixer.init() mixer.music.load(name) mixer.music.set_volume(0.7) mixer.music.play() # 循环检测播放状态,音频未播完就持续等待 while mixer.music.get_busy(): # 10毫秒级休眠,降低空转带来的CPU占用 time.sleep(0.01) mplayer('welcome.mp3')
这种实现不需要手动维护额外的播放状态标志位,完全依托pygame内置的状态判断逻辑,既不会出现音乐播完循环还卡死的问题,也不会因为主程序提前退出打断播放。
内容的提问来源于stack exchange,提问作者code by Abhishek Bharti
相关产品推荐
相关产品推荐

