如何区分音乐和频道的发展?

时间:2015-04-22 18:11:22

标签: python events audio pygame

在pygame中,我可以使用pygame.mixer.music加载和播放长音频文件(通过流媒体播放)或pygame.mixer.Sound& pygame.mixer.Channel用于较短的(完全加载到内存中) - 正如我所理解的那样。

我想使用这两种方法。但是我也想知道,当给定频道或音乐的播放刚刚结束时。有方法:set_endevent() - 音乐和频道。当我使用pygame.locals.USEREVENT作为一种事件时,当频道播放完成后,我会收到code == <channel_id>的事件。当音乐的播放结束时,code始终为0.因此,我无法区分,音乐是停止播放还是通道ID为0。

有没有办法告诉他们分开?

1 个答案:

答案 0 :(得分:0)

-.-我误解了文档。有说:

  

type参数将是发送到队列的事件id。这可以是任何有效的事件类型,但是一个好的选择是pygame.locals.USEREVENT和pygame.locals.NUMEVENTS之间的值。如果没有给出类型参数,那么频道将停止发送事件。

我知道我应该选择USEREVENTNUMEVENTS。我一直在寻找一种方法来使用一些新的事件类型,但我认为这是不可能的。所以我选择了USEREVENT,希望没有其他的pygame模块使用它,并认为它比NUMEVENTS更好。

但后来我提出了想法,也许这些类型只是数字和#34;之间的#34;意味着字面上之间。因此,在我检查后,显示USEREVENT == 24NUMEVENTS == 32。所以我基本上可以使用25到32之间的任何数字......

傻傻的我。 :)

只剩下一件事:让我采用25作为Channel.set_endevent()的类型。如何获得我的频道ID?

<小时/> 修改

好的,现在我有一张完整的图片。它更好 - 我想。如果我理解正确:pygame.USEREVENT(等于24)是最多pygame.NUMEVENT(等于32)的许多事件的第一个。它们中的任何一个都有一个属性code,可以用于我想要的任何东西(而Channel使用它来放置它的id)。所以基本上我可以使用pygame.USEREVENT + 0用于频道,pygame.USEREVENT + 1用于音乐。

如果我错了,请纠正我。