Pygame:使用多个通道设置绝对音量

时间:2017-03-22 17:45:13

标签: python audio pygame volume

我需要在循环的每次迭代中为右耳和左耳设置不同的音量以获得声音。我通过每个耳朵使用两个声道来表示左耳和右耳的声音。

但是,根据每次调用set_volume时的文档,它会将卷设置为前一个值的百分比。

 channel1.set_volume(0.0, 0.5) # sets at 0.5
 channel1.set_volume(0.0, 0.5) # sets at 0.5 * 0.5 = 0.25

我目前通过在循环的每次迭代中调用channel.play来避免此问题,这会将音量重置为1.但是它也只是在每次迭代时重新启动声音文件。有更好的方法吗?

# Current implementation
while True:
   chan1.play(sound)
   chan1.set_volume(volLeft, 0.0)

   chan2.play(sound)
   chan2.set_volume(0.0, volRight)

有一个类似的问题(Setting volume globally in pygame.Sound module)。我尝试操纵两个不同声音变量的音量,但音量不会在左右耳上发生变化

如果在pygame中无法做到这一点,你知道其他任何可能的python声音库吗?

谢谢

1 个答案:

答案 0 :(得分:0)

我通过为每个通道指定一个Sound对象并设置该声音对象的音量来操纵音量

# initialise variables
sound = pygame.mixer.Sound(sound_path)
sound_2 = pygame.mixer.Sound(sound_path)
chan1 = pygame.mixer.Channel(0)
chan2 = pygame.mixer.Channel(1)

# set channel to max
chan1.set_volume(1, 0)
chan2.set_volume(0, 1)

# set sound to initial value
sound.set_volume(0)
sound2.set_volume(0) 

chan1.play(sound, 50, 0, 0)
chan2.play(sound2, 50, 0, 0)

while True:

   volLeft = getLeftVol()
   volRight = getRightVol()

   # change volume of sound every iteration
   sound.set_volume(volLeft)
   sound2.set_volume(volRight)

   if isDone:
      break