Menu
CoddyTech

Musica di sottofondo

Fa parte della sezione Suoni e sensazioni di gioco del percorso Pygame di Coddy. Lezione 5 di 23.

La musica è diversa da un effetto sonoro. È lunga, si ripete in ciclo e viene riprodotta una sola traccia alla volta. pygame ha un lettore dedicato, pygame.mixer.music. Legge il file un po' alla volta mentre lo riproduce, invece di caricarlo tutto come un Sound.

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

load() seleziona la traccia. play() la avvia; il numero indica quante altre volte ripeterla. play(-1) la ripete all'infinito, come serve per la musica di sottofondo. play() o play(0) la riproduce una volta.

Avvia la musica una volta, prima del ciclo. Se viene chiamato nel ciclo, play() riavvia la traccia dall'inizio a ogni fotogramma. La musica ha un volume indipendente, impostato con pygame.mixer.music.set_volume(), da 0.0 a 1.0. Una musica un po' più bassa di volume rispetto agli effetti permette agli effetti di risaltare.

Gli effetti sonori continuano a essere riprodotti sopra la musica: il suono della moneta e la traccia si sentono insieme.

challenge icon

Sfida

Facile

Aggiungi la musica di sottofondo al gioco delle monete. Prima del ciclo:

  1. Carica assets/music/level.ogg con pygame.mixer.music.load().
  2. Imposta il volume della musica su 0.6.
  3. Avviala con play(-1) in modo che venga ripetuta in ciclo.

Provalo tu

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()

Tutte le lezioni di Suoni e sensazioni di gioco

Esercitati da solo: Playground Pygame