【问题标题】:Loop over a list containing path to sound files遍历包含声音文件路径的列表
【发布时间】:2020-06-18 11:19:39
【问题描述】:

所以我打算做的是循环一个包含我的声音文件路径的列表,并使用 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

【问题讨论】:

  • 你能澄清一下你到底想通过这个实现什么吗?你想制作一个播放列表吗?如果是,请检查这个:stackoverflow.com/questions/45596245/…
  • 尝试在play() 之后添加time.sleep。您正在播放两个文件,只是一个接一个地播放

标签: python pygame


【解决方案1】:

使用pygame.mixer.music.queue() 加载声音文件并将其排队:

mixer.init()
mixer.music.load('abc.mp3')
mixer.music.play()
mixer.music.queue('gef.mp3')

【讨论】:

    【解决方案2】:

    您不需要使用范围来遍历 python 中的列表项,只需使用:

    for music in music_list:
         ...
         mixer.music.load(music)
         ...
    

    会成功的。

    根据您的代码不起作用的原因,很可能是因为您不能同时播放两首歌曲,所以最后一首歌曲“超过”第一首歌曲播放。

    【讨论】:

      【解决方案3】:

      我认为这是因为 play() 方法不会阻塞您的代码,因此一旦您启动了音乐,您的代码就会继续运行。因此,您将开始播放第一首音乐,然后立即启动第二首音乐。您最终会跳过所有音乐,只播放最后一首。

      【讨论】:

      • 这是正确的,pygame.mixer.music.play()(参见文档here)没有阻塞,下一首歌一被调用就开始播放,所以只有最后一首歌会被环形。来自play() 的文档:“这将播放加载的音乐流。如果音乐已经在播放,它将重新启动。”
      猜你喜欢
      • 2019-09-30
      • 1970-01-01
      • 2013-07-26
      • 2021-05-31
      • 2012-04-21
      • 2015-10-03
      • 1970-01-01
      相关资源
      最近更新 更多