Воспроизведение музыки и звуковых эффектов друг на друге (PyGame)
Мне было интересно, возможно ли воспроизвести звук поверх другого звука, используя микшер Pygame. Так, например, у меня будет тихая фоновая музыка, а потом что-то случится, и если это произойдет, появится другой звук. В настоящее время для фоновой музыки я использую это:
pygame.mixer.init()
pygame.mixer.music.load("Audio Assets//bob.wav")
pygame.mixer.music.play()
Но если я играю другой звук в методе, фоновая музыка полностью останавливается и не начинается снова. Можно ли воспроизвести два звука поверх друг друга?
Изменить: теперь мне интересно, как я мог воспроизвести звук во время шоу и изображения в Tkinter, вот мой код для показа изображения:
def one():
pone = PhotoImage(file="Image Assets//DEAD.gif")
labelone = Label(root, image=pone)
labelone.image = pone
labelone.pack(pady=70)
labelone.after(2000, labelone.destroy)
Как вы можете видеть, изображение показывается, а затем уничтожается через 2 секунды. Как я смогу воспроизводить звук в эти секунды, используя каналы и микшер?
РЕДАКТИРОВАТЬ 2: Это было очень просто, я просто поместил pygame.mixer.Channel(0).play(pygame.mixer.Sound('sound\gun_fire.wav'), maxtime=600)
в конце метода, и он играет, как показано на рисунке.
1 ответ
Чтобы воспроизводить звуковые эффекты поверх музыки (или звуковые эффекты поверх других звуковых эффектов), вы можете использовать каналы. например:
# initialize
pygame.mixer.pre_init()
pygame.mixer.init()
pygame.init()
# start playing the background music
pygame.mixer.music.load(os.path.join(os.getcwd(), 'sound', 'main_theme.wav'))
pygame.mixer.music.set_volume(0.3)
pygame.mixer.music.play(loops=-1) # loop forever
Затем в коде вы можете воспроизводить звуковые эффекты через каналы:
# play a sound on channel 0 with a max time of 600 milliseconds
pygame.mixer.Channel(0).play(pygame.mixer.Sound('sound\gun_fire.wav'), maxtime=600)
# you can play a longer sound on another channel and they won't conflict
pygame.mixer.Channel(1).play(pygame.mixer.Sound("sound\death.wav"), maxtime=2000)
Для получения дополнительной информации о каналах
если вы хотите установить громкость отдельного канала, вы можете использовать функцию set_volume():
channel.set_volume(0.5) # play at 50% volume