Curso de videojuegos con Pygame

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)
Puntuaciones en Pygame

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.

sfxr creador de sonidos gratis para videojuegos

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.

Programación Fácil YouTube

Suscríbete

Si te ha gustado este curso y crees que el trabajo merece la pena, te agradeceré eternamente que te suscribas a mi canal de YouTube para apoyarme y que pueda seguir haciendo cursos gratuitos.

Además, si te encanta la programación, tienes un montón más de cursos gratuitos para ver.

No solo eso, podrás participar enviándome comentarios con tus sugerencias para temas específicos o cursos completos o incluso las dudas que tengas y las intentaré ir resolviendo en los cursos que estén todavía abiertos.