PygameでゲームにBGMと効果音を追加する方法:手軽に演出力アップ!

ゲーム

ゲームに音楽や効果音を追加すると、作品のクオリティが大幅に向上します。Pygameはそのようなサウンド機能も備えており、初心者でも簡単に使えるライブラリです。このチュートリアルでは、Pygameで音楽や効果音を追加する基本的な方法や注意点を解説します。

これを読めば、BGMや効果音を簡単に扱えるようになり、さらに魅力的なゲームを作れるようになります!

ゆーや
ゆーや

今回は以前このサイトでご紹介したアニメーションにBGMを付けるよ!

アニメーションについて知りたい方は、以下の記事をぜひ見てください!

Pygameで音楽ファイルを読み込む準備

Pygameで音楽や効果音を追加するには、pygame.mixerモジュールを使用します。このモジュールは、音楽ファイルの再生や効果音の再生を簡単に制御できる機能を提供しています。まずは、Pygameの基本的なインストールと設定を確認していきましょう。

import pygame

# Pygameを初期化
pygame.init()

# サウンドミキサーを初期化
pygame.mixer.init()

音楽(BGM)の読み込みと再生

サンプルコード

import pygame
import sys

# 初期化
pygame.init()

# 画面サイズ設定
screen_width, screen_height = 800, 600
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("完全独学Python-アニメーションの基本")

# 色の定義
WHITE = (255, 255, 255)

# ボールの初期位置と速度
ball_x, ball_y = 50, 50
ball_radius = 20
ball_speed_x = 5
ball_speed_y = 5

# フレームレート設定
clock = pygame.time.Clock()

## BGMの設定
# サウンドミキサーを初期化
pygame.mixer.init()

# 音楽ファイルを読み込み
pygame.mixer.music.load("strum.mp3")
# 音楽をループ再生(-1は無限ループ)
pygame.mixer.music.play(-1)

while True:
    # イベント処理
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    # 画面を白で塗りつぶす
    screen.fill(WHITE)

    # ボールの位置を更新
    ball_x += ball_speed_x
    ball_y += ball_speed_y

    # 壁に当たったときの反転
    if ball_x - ball_radius < 0 or ball_x + ball_radius > screen_width:
        ball_speed_x *= -1
    if ball_y - ball_radius < 0 or ball_y + ball_radius > screen_height:
        ball_speed_y *= -1

    # ボールを描画
    pygame.draw.circle(screen, (0, 0, 255), (ball_x, ball_y), ball_radius)

    # 画面の更新
    pygame.display.flip()

    # フレームレートを設定
    clock.tick(60)
ゆーや
ゆーや

青いボールが動く後ろで音楽が鳴ったね!もし、BGMになるファイルを持っていないという方は、このサイトからダウンロードしてみてね!

コードの解説

BGMを設定する際の基本コードはこちらです。

import pygame

pygame.init()
pygame.mixer.init()

# 音楽ファイルを読み込み
pygame.mixer.music.load("bgm.mp3")

# 音楽をループ再生(-1は無限ループ)
pygame.mixer.music.play(-1)
ゆーや
ゆーや

pygame.mixer.music.play(-1)の引数については、次のようなルールがあるよ!

覚えておいてね!

-1 :無限ループ

0 : ループしない(1回再生)

n : n回ループ(n+1回再生)

BGMの一時停止、再開、停止、音量調整

サンプルコード

import pygame
import sys

# 初期化
pygame.init()

# 画面サイズ設定
screen_width, screen_height = 800, 600
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("完全独学Python-アニメーションの基本")

# 色の定義
WHITE = (255, 255, 255)

# ボールの初期位置と速度
ball_x, ball_y = 50, 50
ball_radius = 20
ball_speed_x = 5
ball_speed_y = 5

# フレームレート設定
clock = pygame.time.Clock()

## BGMの設定
# サウンドミキサーを初期化
pygame.mixer.init()

# 音楽ファイルを読み込み
pygame.mixer.music.load("strum.mp3")
# 音楽をループ再生(-1は無限ループ)
pygame.mixer.music.play(-1)
# 音量を0.5に設定(0.0〜1.0の範囲)
pygame.mixer.music.set_volume(0.5)

while True:
    # イベント処理
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            # キーを押したら
            if event.key == pygame.K_SPACE:
                # SPACEキーだったらBGMを停止
                pygame.mixer.music.stop()
            else:
                # それ以外だったらBGMを一時停止
                pygame.mixer.music.pause()
        elif event.type == pygame.KEYUP:
            # キーを離したらBGMを再開
            pygame.mixer.music.unpause()

    # 画面を白で塗りつぶす
    screen.fill(WHITE)

    # ボールの位置を更新
    ball_x += ball_speed_x
    ball_y += ball_speed_y

    # 壁に当たったときの反転
    if ball_x - ball_radius < 0 or ball_x + ball_radius > screen_width:
        ball_speed_x *= -1
    if ball_y - ball_radius < 0 or ball_y + ball_radius > screen_height:
        ball_speed_y *= -1

    # ボールを描画
    pygame.draw.circle(screen, (0, 0, 255), (ball_x, ball_y), ball_radius)

    # 画面の更新
    pygame.display.flip()

    # フレームレートを設定
    clock.tick(60)
ゆーや
ゆーや

スペースキーを押すと、BGMを停止。

そのほかのキーを押している間、BGMを一時停止。

キーを離すとBGMが再開するようにしています!

コードの解説

# 音量を0.5に設定(0.0〜1.0の範囲)
pygame.mixer.music.set_volume(0.5)
ゆーや
ゆーや

こちらは音量の調整!実際に流してみて音量を設定しよう!

    elif event.type == pygame.KEYDOWN:
            # キーを押したら
            if event.key == pygame.K_SPACE:
                # SPACEキーだったらBGMを停止
                pygame.mixer.music.stop()
            else:
                # それ以外だったらBGMを一時停止
                pygame.mixer.music.pause()
        elif event.type == pygame.KEYUP:
            # キーを離したらBGMを再開
            pygame.mixer.music.unpause()
ゆーや
ゆーや

BGM停止:pygame.mixer.music.stop()

BGM一時停止:pygame.mixer.music.pause()

BGM再開:pygame.mixer.music.unpause()

これを条件に合わせて設定しています!

キーの取得について知りたい方は、以下の記事で詳しく解説しています!

効果音の読み込みと再生

効果音を読み込み、再生するコードはこちらです。

サンプルコード

import pygame
import sys

# 初期化
pygame.init()

# 画面サイズ設定
screen_width, screen_height = 800, 600
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("完全独学Python-アニメーションの基本")

# 色の定義
WHITE = (255, 255, 255)

# ボールの初期位置と速度
ball_x, ball_y = 50, 50
ball_radius = 20
ball_speed_x = 5
ball_speed_y = 5

# フレームレート設定
clock = pygame.time.Clock()

## BGMの設定
# サウンドミキサーを初期化
pygame.mixer.init()

# 音楽ファイルを読み込み
pygame.mixer.music.load("strum.mp3")
# 音楽をループ再生(-1は無限ループ)
pygame.mixer.music.play(-1)
# 音量を0.5に設定(0.0〜1.0の範囲)
pygame.mixer.music.set_volume(0.5)

# 効果音ファイルを読み込み
sound_effect = pygame.mixer.Sound("斬.mp3")
# 効果音の音量を0.7に設定(0.0〜1.0の範囲)
sound_effect.set_volume(0.7)

while True:
    # イベント処理
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            # キーを押したら
            if event.key == pygame.K_SPACE:
                # SPACEキーだったらBGMを停止
                pygame.mixer.music.stop()
            else:
                # それ以外だったらBGMを一時停止
                pygame.mixer.music.pause()
        elif event.type == pygame.KEYUP:
            # キーを離したらBGMを再開
            pygame.mixer.music.unpause()
        elif event.type == pygame.MOUSEBUTTONDOWN:  # マウスボタンが押されたとき
            if event.button == 1:  # 左クリック
                # 効果音を再生
                sound_effect.play()

    # 画面を白で塗りつぶす
    screen.fill(WHITE)

    # ボールの位置を更新
    ball_x += ball_speed_x
    ball_y += ball_speed_y

    # 壁に当たったときの反転
    if ball_x - ball_radius < 0 or ball_x + ball_radius > screen_width:
        ball_speed_x *= -1
    if ball_y - ball_radius < 0 or ball_y + ball_radius > screen_height:
        ball_speed_y *= -1

    # ボールを描画
    pygame.draw.circle(screen, (0, 0, 255), (ball_x, ball_y), ball_radius)

    # 画面の更新
    pygame.display.flip()

    # フレームレートを設定
    clock.tick(60)
ゆーや
ゆーや

BGMが0.5なので、効果音は少し大きめの0.7に設定!

あとは、左クリックで効果音を再生するようにしているよ!

コードの解説

# 効果音ファイルを読み込み
sound_effect = pygame.mixer.Sound("斬.mp3")
# 効果音の音量を0.7に設定(0.0〜1.0の範囲)
sound_effect.set_volume(0.7)
ゆーや
ゆーや

効果音の読み込みはSoundを使います!効果音のファイルは、きちんと配置しておいてください!

ボリュームは、BGMと同じですね!

        elif event.type == pygame.MOUSEBUTTONDOWN:  # マウスボタンが押されたとき
            if event.button == 1:  # 左クリック
                # 効果音を再生
                sound_effect.play()
ゆーや
ゆーや

効果音の再生:sound_effect.play()

あとは条件に合わせて、再生するだけ!

マウス操作の取得について知りたい方は次の記事で詳しく紹介しているよ!

まとめ

PygameでBGMや効果音を簡単に扱えることがわかりました。音楽や効果音は、ゲームの面白さを左右する重要な要素ですので、ぜひ積極的に取り入れてみてください。この知識を活かして、よりリッチでエキサイティングなゲームを作り上げましょう!

コメント

タイトルとURLをコピーしました