You need to enable JavaScript to run this app. Pygame中音乐播放完成后如何自动退出while循环
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.07 16:15:03