[英]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_PlayChannelTimed
和Mix_FadeInChannelTimed
,例如这里。
总而言之,如果您想确保播放声音,请使用mixer.set_reserved
保留一个或多个通道。
然后,要播放重要的声音,请使用mixer.findChannel
获取保留的频道或未保留的免费频道。 如果您想完全控制通道来播放声音,您还可以创建一个通道号为0
的新Channel
实例(如果您保留了多个通道,则为更多)。
在不指定通道的情况下播放所有其他声音,它们将仅在非保留通道上播放。
所以你问题中的代码已经做了你想要的:保留频道0
和1
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.