Menu
CoddyTech

Música de fondo

Parte de la sección Sonido y sensaciones del juego del Journey de Pygame de Coddy. Lección 5 de 23.

La música es diferente de un efecto de sonido. Es larga, se repite en bucle y solo se reproduce una pista a la vez. pygame tiene un reproductor aparte para ella, pygame.mixer.music. Lee el archivo poco a poco mientras lo reproduce, en lugar de cargarlo todo como hace Sound.

pygame.mixer.music.load("assets/music/level.ogg")
pygame.mixer.music.set_volume(0.6)
pygame.mixer.music.play(-1)

load() selecciona la pista. play() la inicia; el número indica cuántas veces más debe repetirse. play(-1) la repite indefinidamente, que es lo que necesita la música de fondo. play() o play(0) la reproduce una vez.

Inicia la música una vez, antes del bucle. Si se llama dentro del bucle, play() reinicia la pista desde el principio en cada fotograma. La música tiene su propio volumen, que se ajusta con pygame.mixer.music.set_volume(), de 0.0 a 1.0. Si la música está un poco más baja que los efectos, estos destacan.

Los efectos de sonido siguen reproduciéndose sobre la música: se oyen a la vez el sonido de la moneda y la pista.

challenge icon

Desafío

Fácil

Añade música de fondo al juego de monedas. Antes del bucle:

  1. Carga assets/music/level.ogg con pygame.mixer.music.load().
  2. Ajusta el volumen de la música a 0.6.
  3. Iníciala con play(-1) para que se reproduzca en bucle.

Pruébalo tú mismo

import random
import pygame

pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Coins")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 32)

coin_sound = pygame.mixer.Sound("assets/sounds/coin.ogg")

player = pygame.Rect(220, 160, 40, 40)
coin = pygame.Rect(100, 100, 16, 16)
score = 0

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        player.x -= 5
    if keys[pygame.K_RIGHT]:
        player.x += 5
    if keys[pygame.K_UP]:
        player.y -= 5
    if keys[pygame.K_DOWN]:
        player.y += 5
    player.clamp_ip(screen.get_rect())

    if player.colliderect(coin):
        score += 1
        coin_sound.play()
        coin.x = random.randint(20, 444)
        coin.y = random.randint(50, 324)

    screen.fill((30, 30, 46))
    pygame.draw.rect(screen, (255, 210, 60), coin)
    pygame.draw.rect(screen, (90, 200, 120), player)
    score_text = font.render(f"Coins: {score}", True, (240, 240, 240))
    screen.blit(score_text, (10, 10))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Todas las lecciones de Sonido y sensaciones del juego

Practica por tu cuenta: Playground de Pygame