因此,我计划循环遍历包含声音文件路径的列表,并使用 Python 中的 pygame.mixer 模块播放它们,但当我这样做时,我遇到的问题是 pygame 总是播放列表中最后一个索引路径文件,其余文件被跳过。例如,如果我的列表包含 2 个项目:
music_list = ['abc.mp3', 'gef.mp3'] for music_index in range(len(music_list)): mixer.init() mixer.music.load(music_list[music_index]) mixer.music.play() then it never plays abc.mp3 file and directly plays the last file gef.mp3
你遇到的问题是因为在循环中,你在每次迭代时都重新初始化了 pygame.mixer,这导致前一个音乐文件没有机会播放完就被下一个文件覆盖。
pygame.mixer
要按顺序播放每个音频文件,你需要在循环开始之前初始化混音器,并确保在加载下一个音乐文件之前等待当前音乐文件播放完毕。下面是一个修改后的示例代码:
import pygame import time # 初始化 Pygame 混音器 pygame.mixer.init() music_list = ['abc.mp3', 'gef.mp3'] for music_file in music_list: # 加载音乐文件 pygame.mixer.music.load(music_file) # 播放音乐文件 pygame.mixer.music.play() # 等待当前音乐播放完毕 while pygame.mixer.music.get_busy(): time.sleep(1) # 暂停一段时间以避免忙等待 # 所有曲目播放完毕后退出混音器 pygame.mixer.quit()
while pygame.mixer.music.get_busy()
time.sleep(1)
这样,每个音频文件都会完整播放,然后再移动到列表中的下一个文件。