Просто есть формальный ответ на этот вопрос ...
Невозможно одновременно воспроизвести несколько MP3
звуковых файлов, используя каналы с PyGame. Они могут воспроизводиться по отдельности с набором функций * 1006. *
Однако, абсолютно возможно преобразовать ваши звуковые файлы в формат звука OGG - который сжатый так же, как MP3, или несжатый формат WAV. Очевидно, что это не решение, если вы хотите написать MP3 MUSI c плеер, но для игры это незначительное требование. Свободное программное обеспечение, такое как Audacity , легко может конвертировать звуковые форматы.
Я адаптировал пример из ссылки для комментариев , чтобы не использовать модуль var
. Как и связанный код, он непрерывно воспроизводит звук дождя, и нажатие h добавляет автомобильный гудок meep-meep в выходной сигнал.
import pygame
# Window size
WINDOW_WIDTH = 400
WINDOW_HEIGHT = 400
WINDOW_SURFACE = pygame.HWSURFACE|pygame.DOUBLEBUF|pygame.RESIZABLE
DARK_BLUE = ( 3, 5, 54)
### initialisation
pygame.init()
pygame.mixer.init()
window = pygame.display.set_mode( ( WINDOW_WIDTH, WINDOW_HEIGHT ), WINDOW_SURFACE )
pygame.display.set_caption("Multi Sound")
### sound
# create separate Channel objects for simultaneous playback
channel1 = pygame.mixer.Channel(0) # argument must be int
channel2 = pygame.mixer.Channel(1)
# Rain sound from: https://www.freesoundslibrary.com/sound-of-rain-falling-mp3/ (CC BY 4.0)
rain_sound = pygame.mixer.Sound( 'rain-falling.ogg' )
channel1.play( rain_sound, -1 ) # loop the rain sound forever
# Car Horn sound from: https://www.freesoundslibrary.com/car-horn-sound-effect/ (CC BY 4.0)
horn_sound = pygame.mixer.Sound( 'car-horn.ogg' )
### Main Loop
clock = pygame.time.Clock()
done = False
while not done:
# Handle user-input
for event in pygame.event.get():
if ( event.type == pygame.QUIT ):
done = True
elif ( event.type == pygame.KEYUP ):
if ( event.key == pygame.K_h ):
if ( not channel2.get_busy() ): # play horn if not already playing
channel2.play( horn_sound )
print( 'meep-meep' )
# Window just stays blue
window.fill( DARK_BLUE )
pygame.display.flip()
# Clamp FPS
clock.tick_busy_loop(60)
pygame.quit()