繁体   English   中英

如何在 pygame 中预留一个 pygame.mixer 通道?

[英]How do you reserve a pygame.mixer Channel in pygame?

预留渠道如何运作? 我可以预订特定频道还是随机选择? 没有关于它如何工作的明确文档,我似乎做错了,因为mixer.findChannel()仍然选择保留频道。

这是我的代码:

        self.music1 = pygame.mixer.Channel(0)
        self.music2 = pygame.mixer.Channel(1)
        self.sound1 = pygame.mixer.Channel(2)
        self.sound2 = pygame.mixer.Channel(3)
        self.sound3 = pygame.mixer.Channel(4)
        self.sound4 = pygame.mixer.Channel(5)
        self.sound5 = pygame.mixer.Channel(6)
        self.sound6 = pygame.mixer.Channel(7)
        
        pygame.mixer.set_reserved(2)

我想预订music1 和music2。

该文档指出, mixer.set_reserved()的参数定义了将被保留的通道数。

如果我无法选择要保留的频道,有没有办法解决?

提前致谢

有时,缺少 pygame 的文档,如果您查看 pygame 实际调用的 SDL 函数以及这些函数的作用,那么很多东西会更有意义。

所以mixer.set_reserved()实际上调用Mix_ReserveChannels ,但不返回保留通道的数量:

Mix_ReserveChannels

int Mix_ReserveChannels(int num)

将 -1 作为通道号传递给播放函数时,保留 num 个通道,以免在播放样本时使用。 从通道 0 到 num-1 保留通道。 传入零将取消保留所有通道。 通常 SDL_mixer 启动时不保留任何通道。

以下功能受此设置影响:
4.3.3 Mix_PlayChannel
4.3.4 Mix_PlayChannelTimed
4.3.5 Mix_FadeInChannel
4.3.6 Mix_FadeInChannelTimed

mixer.findChannel() 调用Mix_GroupAvailable

Mix_Group 可用

int Mix_GroupAvailable(int tag)

在组标签中找到第一个可用(未播放)的频道。

如您所见, findChannel忽略了保留的频道。 保留频道仅可防止在使用上述功能之一时自动选择该频道。 Pygame 使用Mix_PlayChannelTimedMix_FadeInChannelTimed ,例如这里


总而言之,如果您想确保播放声音,请使用mixer.set_reserved保留一个或多个通道。

然后,要播放重要的声音,请使用mixer.findChannel获取保留的频道或未保留的免费频道。 如果您想完全控制通道来播放声音,您还可以创建一个通道号为0的新Channel实例(如果您保留了多个通道,则为更多)。

在不指定通道的情况下播放所有其他声音,它们将仅在非保留通道上播放。

所以你问题中的代码已经做了你想要的:保留频道01

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM