You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用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

火山引擎 最新活动