Sistema de sonido con reproducción aleatoria
Capítulo 17: Sistema de sonido y reproducción random
En este capítulo te voy a enseñar a crear el sistema de audio o sonido para el juego y a hacer que se reproduzcan sonidos y músicas de forma aleatoria (random).
Ejercicio resuelto
Lo primero en este capítulo es resolver el ejercicio del capítulo anterior.
Se trata de añadir un zfill
a la variable puntuacion
con el número de ceros que queremos.
muestra_texto(pantalla,consolas,str(puntuacion).zfill(7), ROJO, 40, 700, 50)
Para añadir audio al juego, lo primero para iniciarlo con el mixer
de Pygame tal y como expliqué en el capítulo 6.
pygame.mixer.init()
Una vez hecho podemos empezar a crear una lista de sonidos.
Tienes la opción de buscarlos por internet y cumplir las condiciones de uso del autor o puedes producirlos.
Hay un programa muy bueno para generar sonidos de 8 o 16 bits para videojuegos retro principalmente.
Se llama SFXR y lo puedes descargar de forma gratuita desde su sitio web oficial haciendo click aquí.
En el vídeo puedes ver un poco su funcionamiento.
Los sonidos de Pygame, según su referencia pueden ser .wav sin comprimir y .ogg, no he probado con otros formatos.
Puesto que SFXR guarda los sonidos en formato .wav, no hay problema.
Para añadir un sonido, debes guardarlo en una variable y poner esto:
laser = pygame.mixer.Sound('sonidos/laser.wav')
Una vez cargado, para que el sonido se reproduzca en el momento del disparo, le pones en el método disparo
de la clase Jugador
el play
:
def disparo(self):
bala = Disparos(self.rect.centerx, self.rect.top + 20)
balas.add(bala)
laser.play()
Le voy a añadir cuatro sonidos más para explosiones. Basta con uno, pero así le añadimos más variedad.
explosion1 = pygame.mixer.Sound('sonidos/explosion1.wav')
explosion2 = pygame.mixer.Sound('sonidos/explosion2.wav')
explosion3 = pygame.mixer.Sound('sonidos/explosion3.wav')
explosion4 = pygame.mixer.Sound('sonidos/explosion4.wav')
Y ponemos los play
correspondientes en los if
de las colisiones.
if colision_disparos_amarillos:
puntuacion += 10
explosion1.play()
if colision_disparos_verdes:
puntuacion += 25
explosion2.play()
if colision_disparos_azules:
puntuacion += 50
explosion3.play()
if colision_disparos_rojos:
puntuacion += 100
explosion4.play()
Para poner música de ambiente ya sabes como se hace del capítulo 6, pero si no lo recuerdas, aquí lo tienes:
ambiente = pygame.mixer.Sound('sonidos/space_ambient.ogg')
ambiente.play()
Sonidos random en Pygame
Para terminar con el capítulo,veamos los sonidos aleatorios.
Para poner sonidos aleatorios lo puedes hacer muy fácilmente con una lista y un randrange()
.
Creamos la lista. Un sonido por posición.
explosiones_random = [pygame.mixer.Sound('sonidos/explosion1.wav'),
pygame.mixer.Sound('sonidos/explosion2.wav'),
pygame.mixer.Sound('sonidos/explosion3.wav'),
pygame.mixer.Sound('sonidos/explosion4.wav')]
Y finalmente reproducimos una posición aleatoria de la lista en cada colisión.
if colision_disparos_amarillos:
puntuacion += 10
explosiones_random[random.randrange(0,3)].play()
if colision_disparos_verdes:
puntuacion += 25
explosiones_random[random.randrange(0,3)].play()
if colision_disparos_azules:
puntuacion += 50
explosiones_random[random.randrange(0,3)].play()
if colision_disparos_rojos:
puntuacion += 100
explosiones_random[random.randrange(0,3)].play()
Comentarios
Si te quedan dudas sobre el temario, sobre Python, Pygame o cualquier otra cosa relacionada o simplemente quieres agradecer, aquí tienes tu sitio para dejar tu granito de arena. Gracias por tus comentarios y por darle vida a este sitio web.