Воспроизведение музыки и звуковых эффектов друг на друге (PyGame)

1

Мне было интересно, можно ли воспроизводить звук по другому звуку с помощью микшера pygame. Так, например, у меня была бы спокойная игра в фоновой музыке, и тогда что-то случается, а другой звук звучит сверху, если это так. В настоящее время для фоновой музыки я использую это:

pygame.mixer.init()
pygame.mixer.music.load("Audio Assets//bob.wav")
pygame.mixer.music.play()

Но если я использую другой звук в методе, фоновая музыка полностью останавливается и не начинается снова. Можно ли воспроизвести два звука поверх каждого другого?

Edit: Мне теперь интересно, как я могу играть звук, пока шоу и изображение в 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 секунды. Как я смогу воспроизвести звук в течение этих секунд, используя каналы и микшер?

EDIT 2: Это было очень просто, я просто разместил pygame.mixer.Channel(0).play(pygame.mixer.Sound('sound\gun_fire.wav'), maxtime=600) в конце метода, и он воспроизводит как показано на рисунке.

Теги:
audio
pygame
mixer

1 ответ

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
  • 0
    Я приму ответ, когда получу его на работу, я сейчас не дома и не могу его проверить, в любом случае, спасибо.
  • 0
    Хорошо, я только что вернулся домой, и у меня есть вопрос, как бы я проигрывал звук, пока показываю изображение с Tkinter. Я пытался, но я могу заставить его играть только до и после отображения изображения. Я отредактирую вопрос.
Показать ещё 9 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню