【问题标题】:Why Pygame only plays the last sound?为什么 Pygame 只播放最后一个声音?
【发布时间】:2018-12-14 05:59:09
【问题描述】:

我得到了这个代码:

a_0 = pygame.mixer.sound("a.mp3",)
a = pygame.mixer.music

b_0 = pygame.mixer.music.load("b.mp3")
b = pygame.mixer.music

c_0 = pygame.mixer.music.load("c.mp3",)
c   = pygame.mixer.music

d_0 = pygame.mixer.music.load("d.mp3")
d   = pygame.mixer.music

e_0 = pygame.mixer.music.load("e.mp3",)
e = pygame.mixer.music

当我想用 d (that emans d.mp3) 播放声音时:

d.play()

它只播放列表的最后一个声音,这意味着e.mp3 而不是d.mp3。 我在这里做错了什么?

【问题讨论】:

  • 你在说什么清单?
  • 这不是一个真正的 Python 列表。它只是一个声音文件夹。该文件夹包含代码中使用的所有声音。
  • 这行 'e_0 = pygame.mixer.music.load("e.mp3",)' 会是问题吗?

标签: python audio pygame


【解决方案1】:

pygame.music.mixer.load() 不返回任何内容。所以你不能将它分配给一个变量。它加载到混音器中并准备播放。 Documentation

你需要有一个你想播放的歌曲列表或字典,然后当你想播放一首时,你需要将它加载到混音器中并播放它:

def play_song(name):
    pygame.mixer.music.load(name)
    pygame.mixer.music.set_volume(0.3)  # you can also set the volume
    pygame.mixer.music.play(loops=-1)

这是专门针对mixer.music的。

pygame.mixer.Sound 返回一个 Sound 对象,您可以将其保存以备后用:documentation。因此,您可以将声音目录加载到 python 列表中。

sounds_list = []
sounds_list.append(pygame.mixer.Sound('gun_fire.wav'))
sounds_list.append(pygame.mixer.Sound('coin_pickup.wav'))
# add more sounds

【讨论】:

  • 非常感谢!有机会告诉我如何从列表中加载声音吗?
  • 您无法加载音乐并保存以备后用,但您可以加载声音
  • 通常我会让mixer.music在后台播放,mixer.Sounds在不同频道的音乐之上播放
  • 是的,这是我误解了。所以基本上我需要一个列表并在每次我想播放时加载每个声音()?
  • 如果要使用mixer.music播放音乐,每次都需要加载。如果您使用mixer.Sound,您可以将它们加载到列表中
猜你喜欢
  • 1970-01-01
  • 2017-12-21
  • 2013-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-25
  • 1970-01-01
相关资源
最近更新 更多