2016-06-25 8 views
0

저는 파이 게임에서 동시에 여러 사운드를 재생하려고합니다. 나는 배경 음악이 있고 나는 계속해서 비극적 인 소리를 내고 오케스트리 장엄한 소리를 내고 싶다.파이 게임에서 채널에 사운드를 할당하는 방법은 무엇입니까?

나는 다음을 시도했지만 천둥 소리가 들리면 내 비 소리가 멈 춥니 다. 채널을 사용해 보았지만 두 채널을 동시에 재생할 수있는 사운드 또는 재생할 채널을 선택하는 방법을 모르겠습니다.

 var.rain_sound.play() 

     if random.randint(0,80) == 10:     
      thunder = var.thunder_sound     
      thunder.play() 

당신은 채널 당 한 번에 하나의 사운드를 재생할 수 있습니다 당신의 도움

답변

1

주셔서 감사합니다,하지만 당신은 한 번에 여러 채널을 재생할 수 있습니다. 채널 이름을 지정하지 않으면 파이 게임은 사운드를 재생하기 위해 사용되지 않은 채널을 선택합니다. 기본적으로 파이 게임에는 8 개의 채널이 있습니다. Channel 객체를 생성하여 채널을 지정할 수 있습니다. 사운드를 무기한 반복 할 때, 당신은 loop = -1 인수로 사운드를 재생함으로써 그것을 할 수 있습니다. http://www.pygame.org/docs/ref/mixer.html
내장 모듈 시간, 특히 지정된 시간 동안 실행을 일시 중지하는 sleep() 함수를 사용하는 것이 좋습니다. 이는 사운드를 재생하기 전에 가능한 빨리 Sound를 재생하는 pygame.mixer 기능이 있고 동일한 채널에서 두 번째 사운드를 재생하려고 시도하면 첫 번째 사운드가 중지되어 두 번째 사운드가 재생되기 때문입니다. 따라서 천둥 소리가 완료되도록하려면 연주하는 동안 실행을 일시 중지하는 것이 가장 좋습니다. if 문 안쪽에 sleep() 행은 천둥 소리가 들리지 않으면 sleep() 행이 실행을 일시 중지하지 않기 때문에 sleep() 행을 넣으므로 루프가 다음 천둥에 매우 빠르게 반복됩니다. 소리, "가끔"보다 훨씬 더 자주 출력됩니다.

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) 
+0

또한 'pygame.mixer.Channel.get_busy()'를 사용하여 특정 채널이 현재 소리를 재생 중인지 여부를 확인할 수 있습니다. – Isa