使用pygame.mixer.music遍历播放多首歌曲仅播放第一首的问题求助
解决Pygame播放音乐列表只播放第一首的问题
嘿,我来帮你搞定这个问题!你的代码里的核心问题是Pygame的pygame.mixer.music.play()是异步执行的——调用它之后,程序不会等这首音乐播完就立刻往下跑,再加上每次调用load()都会替换当前加载的音乐,导致后续歌曲直接中断了前一首的播放,甚至还没来得及播放就被覆盖了。
问题原因拆解
你原来的代码逻辑是:
- 遍历歌曲列表,打印路径
- 加载当前歌曲,立刻调用播放
- 不等这首播完,直接跳到下一首加载新歌曲
这就导致第一首刚启动播放,就被下一首的load()操作中断,而如果你的程序执行完循环后直接退出,那后续歌曲连启动的机会都没有。
修复后的代码
我们需要让程序等待当前歌曲播放完毕后,再加载并播放下一首,可以用pygame.mixer.music.get_busy()来判断音乐是否还在播放:
def selection(): # 确保混音器已经正确初始化(如果程序开头没做的话) pygame.mixer.init() for song in my_music: print(song) pygame.mixer.music.load(song) pygame.mixer.music.play(loops=0) # 等待当前音乐播放结束 while pygame.mixer.music.get_busy(): # 加个小延迟,避免占用过多CPU资源 pygame.time.Clock().tick(10)
额外注意事项
- 一定要在程序开头初始化Pygame和混音器模块:
import pygame pygame.init() pygame.mixer.init() - 确认
my_music里的所有MP3路径都是正确的,推荐用绝对路径避免路径解析问题 - 如果你的程序在执行完
selection()函数后就直接退出,记得在程序末尾加个保持运行的逻辑,比如:# 等待用户关闭窗口或者按任意键退出 pygame.event.wait()
内容的提问来源于stack exchange,提问作者Nikky




