Menu
CoddyTech

Musique de fond

Fait partie de la section Son et sensations de jeu du Journey Pygame de Coddy. Leçon 5 sur 23.

La musique est différente d'un effet sonore. Elle est longue, elle tourne en boucle et une seule piste est jouée à la fois. pygame dispose d'un lecteur distinct pour cela, pygame.mixer.music. Il lit le fichier petit à petit pendant la lecture, au lieu de le charger en entier comme un Sound.

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

load() sélectionne la piste. play() la démarre ; son nombre indique combien de fois supplémentaires la répéter. play(-1) la répète indéfiniment, ce qu'il faut pour la musique de fond. play() ou play(0) la joue une fois.

Démarre la musique une seule fois, avant la boucle. Appelée dans la boucle, play() redémarre la piste depuis le début à chaque image. La musique a son propre volume, réglé avec pygame.mixer.music.set_volume(), de 0.0 à 1.0. Une musique un peu moins forte que les effets permet à ceux-ci de ressortir.

Les effets sonores continuent d'être joués par-dessus la musique : le son de la pièce et la piste s'entendent ensemble.

challenge icon

Défi

Facile

Ajoute une musique de fond au jeu de pièces. Avant la boucle :

  1. Charge assets/music/level.ogg avec pygame.mixer.music.load().
  2. Règle le volume de la musique sur 0.6.
  3. Lance-la avec play(-1) pour qu’elle boucle.

Essayez vous-même

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

Toutes les leçons de Son et sensations de jeu

Entraînez-vous par vous-même : Playground Pygame