Menu
CoddyTech

背景音楽

CoddyのPygameジャーニー「サウンドとゲームの手応え」セクションの一部。レッスン 5/23。

音楽は効果音とは異なります。長く、ループ再生され、一度に再生されるトラックは1つだけです。pygameには、音楽用の専用プレーヤーpygame.mixer.musicがあります。Soundのようにファイル全体を読み込むのではなく、再生しながら少しずつ読み込みます。

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

load()でトラックを選びます。play()で再生を開始します。引数の数値は、あと何回繰り返すかを表します。play(-1)は無限に繰り返し再生します。これはBGMに必要な動作です。play()またはplay(0)は1回だけ再生します。

ループの前に、音楽を一度だけ再生開始します。ループ内でplay()を呼び出すと、毎フレーム、トラックが最初から再生されます。音楽には独自の音量があり、pygame.mixer.music.set_volume()で0.0から1.0の範囲で設定できます。効果音より少し小さめの音量にすると、効果音が際立ちます。

効果音は引き続き音楽に重ねて再生されます。コインの効果音とトラックは同時に聞こえます。

challenge icon

チャレンジ

簡単

コインゲームにBGMを追加しましょう。ループの前に、次の操作を行います。

  1. assets/music/level.oggをpygame.mixer.music.load()で読み込みます。
  2. 音楽の音量を0.6に設定します。
  3. ループ再生するようにplay(-1)で再生を開始します。

自分で試してみよう

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

サウンドとゲームの手応えのすべてのレッスン

自分で練習してみよう: Pygameプレイグラウンド