Pygame:如何创建音乐对象

时间:2018-03-11 19:54:53

标签: pygame

所以,首先,我的总体目标是根据玩家在地图上的位置播放不同的背景音乐。我希望一个音轨淡出,另一个音乐在玩家到达某个点时淡入。

以下是我的问题:

  • 我在Fade Between Two Music Tracks in-progress in Pygame的帮助下创建了一个“推子”类。这允许我淡入淡出轨道,但它没有指定如何调整代码以使用pygame.mixer.music而不是pygame.mixer.Sound。

  • 如果我将两首曲目作为声音播放,则在不同的频道上,该节目会慢慢降低 - 使其无法使用。研究表明,这是因为音乐一次播放一次,而声音一次性加载然后播放 - 这显然需要相当多的处理能力。

  • 然而,我似乎无法将它们当作音乐播放 - 而在这里我们来到了问题的核心。这是我的Fader课程,用于播放音乐作为声音:

    class Fader(object):
        def __init__(self, filename):
            self.sound = pygame.mixer.Sound(filename)
            # the speed at which it will fade
            self.increment = 0.5
            # the volume to which it will fade
            self.next_vol = 1
    
        def fade_to(self, new_vol):
            self.next_vol = new_vol
            curr_volume = self.get_volume()
            if self.next_vol > curr_volume:
                 self.set_volume(curr_volume + self.increment)
            elif self.next_vol < curr_volume:
                 self.sound.set_volume(curr_volume - self.increment)
    
  • 由于上述原因,这不起作用。但是,我不能为我的生活实现与音乐相同的效果。编写音乐作为音乐的代码是相同的,除了第3行,现在是:

    self.sound = pygame.mixer.music(filename)
    
  • 然后我收到一条错误消息“pygame.mixer.music不可调用”。我明白这意味着我不是用那条线创建一个对象,所以我尝试了:

    self.sound = pygame.mixer.music.load(filename)
    
  • ...据我所知,这是创建Music对象的行。但是,当我尝试播放曲目时,我得到“NoneType对象没有属性'play'”。

我似乎无法弄清楚这一点,没有其他人似乎有这个问题,而且 - 去图 - pygame网站已关闭,所以我无法查看文档。

1 个答案:

答案 0 :(得分:0)

根据https://www.pygame.org/docs/ref/music.html#pygame.mixer.music.load

上的文件

pygame.mixer.music.load(filename)函数将音乐流加载到混音器中,并返回None

所以播放声音,替换

self.sound = pygame.mixer.music.load(filename)

pygame.mixer.music.load(filename)

后跟pygame.mixer.music.play(filename)