在pygame.Sound模块中全局设置音量

2 投票
2 回答
8341 浏览
提问于 2025-04-18 03:29
           channel=pygame.mixer.Sound(file_name)
           channel.play(0)

我一直在尝试用pygame来调整所有正在播放的声音的音量。

当我在前端按下一个按钮时,就会播放一个声音。我可以播放很多声音。

现在我的问题是,如何控制所有音乐的音量?我应该为每个文件创建一个对象,并设置它的音量值。下面是代码:

    pygame.mixer.pre_init(44100, 16, 2, 4096) 
    pygame.init()
    pygame.mixer.init(44100)
    channel=pygame.mixer.Sound(file_name)
    channel.play(0)

我该如何全局设置音量呢?所有正在播放的文件都应该受到这个音量的影响。

谢谢大家的帮助!

2 个回答

0

我正在使用一个函数来全局设置音量。这个函数里面有一行 sound.set.volume(),你可以通过它来设置用这个函数创建的所有声音对象的音量。

# Audio
pygame.mixer.init()

# Sound
def create_sound04(name):
    fullname = "audio/sound/" + name     # path + name of the sound file
    sound = pygame.mixer.Sound(fullname)
    sound.set_volume(0.40)
    return sound

通过这个函数,我创建了我的声音对象。

closedGate = create_sound04("closedGate.wav")
openGate = create_sound04("openGate.wav")

它们的音量都设置成一样的,可以随时播放。

你还可以创建一个第二个函数,设置不同的音量和/或不同的路径,只需要用一个不同的函数名称就可以了。

2

我认为你需要单独设置每一个声音的音量,方法是使用 Sound.set_volume(value)。你需要保存每一个你创建的声音实例,然后在你想要改变音量的时候,逐个遍历它们。如果你想根据每个声音当前的音量来设置新的音量,可以这样做:

def set_all_volume(sounds,mult):
    for sound in sounds:
        vol = sound.get_volume()
        sound.set_volume(min(vol*mult,1.0))

撰写回答