<p>每个频道一次只能播放一个声音,但可以同时播放多个频道。如果不命名频道,pygame会选择一个未使用的频道播放声音;默认情况下,pygame有8个频道。可以通过创建通道对象来指定通道。至于无限循环一个声音,你可以通过播放一个带有参数loops=-1的声音来实现。您可以在<a href="http://www.pygame.org/docs/ref/mixer.html" rel="nofollow">http://www.pygame.org/docs/ref/mixer.html</a><br/>
我还建议使用内置的time模块,特别是sleep()函数,它将执行暂停一段指定的时间(以秒为单位)。这是因为游戏混音器播放声音的函数在声音播放结束之前会尽快返回,当您尝试在同一频道播放第二个声音时,第一个声音将停止播放第二个声音。所以,为了保证你的雷声播放完毕,最好在播放时暂停执行。我把sleep()行放在if语句之外,因为在if语句中,如果没有播放雷鸣音,sleep()行不会暂停执行,所以循环将非常快地循环到下一个雷声,输出频率远远高于“偶尔”</p>
<pre><code>import pygame
import random
import time
import var
# initialize pygame.mixer
pygame.mixer.init(frequency = 44100, size = -16, channels = 1, buffer = 2**12)
# init() channels refers to mono vs stereo, not playback Channel object
# create separate Channel objects for simultaneous playback
channel1 = pygame.mixer.Channel(0) # argument must be int
channel2 = pygame.mixer.Channel(1)
# plays loop of rain sound indefinitely until stopping playback on Channel,
# interruption by another Sound on same Channel, or quitting pygame
channel1.play(var.rain_sound, loops = -1)
# plays occasional thunder sounds
duration = var.thunder_sound.get_length() # duration of thunder in seconds
while True: # infinite while-loop
# play thunder sound if random condition met
if random.randint(0,80) == 10:
channel2.play(var.thunder_sound)
# pause while-loop for duration of thunder
time.sleep(duration)
</code></pre>