首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在pygame中预订pygame.mixer频道?

如何在pygame中预订pygame.mixer频道?
EN

Stack Overflow用户
提问于 2021-02-17 00:51:12
回答 1查看 72关注 0票数 2

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

下面是我的代码:

代码语言:javascript
复制
        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()的参数定义了将保留的通道数。

如果我不能选择哪些频道将被保留,有什么办法可以解决它吗?

提前感谢

EN

回答 1

Stack Overflow用户

发布于 2021-02-17 14:35:21

有时候,pygame的文档很少,如果你看看pygame实际调用了哪些SDL函数,以及这些函数做了什么,就会发现很多东西更有意义。

所以mixer.set_reserved()实际上是calls Mix_ReserveChannels,但不返回预留的频道数:

Mix_ReserveChannels

int Mix_ReserveChannels(int num)

在将-1作为频道号传递给播放函数时,保留播放采样时使用的频道数。从信道0到num-1预留信道。传入0将取消保留所有通道。正常情况下,SDL_mixer在启动时不保留任何通道。

以下功能受此设置影响:

4.3.3 Mix_PlayChannel

4.3.4 Mix_PlayChannelTimed

4.3.5 Mix_FadeInChannel

4.3.6 Mix_FadeInChannelTimed

mixer.findChannel() calls Mix_GroupAvailable

Mix_GroupAvailable

int Mix_GroupAvailable(int标签)

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

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

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

然后,为了播放这个重要的声音,可以使用mixer.findChannel来获得一个预留的频道或一个非预留的空闲频道。如果您希望完全控制播放声音的通道,还可以创建一个通道编号为0的新Channel实例(如果您保留了多个通道,则通道编号为更多)。

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

因此,问题中的代码已经完成了您想要的操作:预留通道01

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66228684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档