Pygame: 使用多个通道设置绝对音量
Pygame: set absolute sound volume using multiple channels
我需要在循环的每次迭代中为右耳和左耳设置不同的声音音量。我通过为每只耳朵使用两个通道来代表左耳和右耳的声音。
但是,根据文档,每次调用 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 声音库可以实现?
谢谢
我通过为每个声道分配一个声音对象并设置该声音对象的音量来控制音量
# 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
我需要在循环的每次迭代中为右耳和左耳设置不同的声音音量。我通过为每只耳朵使用两个通道来代表左耳和右耳的声音。
但是,根据文档,每次调用 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 声音库可以实现?
谢谢
我通过为每个声道分配一个声音对象并设置该声音对象的音量来控制音量
# 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