見出し画像

4-8 Pygameの音声

同人誌について

 この連載は、同人誌『PythonとPygameで作る レトロ風RPG 全コード』を一部抜粋して編集したものです。

 同人誌本編には、ゲーム本体のソースコードや、各種のサンプルコード、Windowsで実行できるEXEファイルが付属しています。PDFで288ページの本になります。ぜひ、こちらもご購入ください(2024-03-10:ver1.0.3 に更新)。


音声の例

 音声の例を示します。

 「B」キーを押すと、バトルBGMを読み込んで再生します。「F」キーを押すと、フィールドBGMを読み込んで再生します。「D」キーを押すとダメージ音のSEが鳴ります。

 音声には、BGMとSEの2種類があります。BGMは、その場で読み込んで再生をおこないます。新しいファイルを読み込んで再生すると、BGMが切り替わります。SEは、事前に複数読み込んでおき、必要に応じて再生します。

 「example_pygame/audio.py」を示します。

import pygame

def main():
    pygame.init()       # Pygameを初期化
    pygame.display.set_mode((800, 600))     # 画面作成
    running = True      # 実行継続フラグ

    p_battle = "audio/maou_bgm_8bit18.mp3"  # バトルBGM
    p_field  = "audio/maou_bgm_8bit01.mp3"  # フィールドBGM
    p_damage = "audio/maou_se_8bit22.wav"   # ダメージSE
    se = pygame.mixer.Sound(p_damage)   # SE読み込み

    while running:
        for event in pygame.event.get():        # イベント
            if event.type == pygame.QUIT: running = False   # 終了
            if event.type == pygame.KEYDOWN:    # キー押下
                if event.key == pygame.K_b:     # バトル
                    pygame.mixer.music.load(p_battle)       # BGM読み込み
                    pygame.mixer.music.play(loops=-1)       # BGM再生
                if event.key == pygame.K_f:     # フィールド
                    pygame.mixer.music.load(p_field)        # BGM読み込み
                    pygame.mixer.music.play(loops=-1)       # BGM再生
                if event.key == pygame.K_d:     # ダメージ
                    se.play()       # SE再生
    pygame.quit()

if __name__ == "__main__":
    main()

 まずは『Pygame』の初期化処理です。

import pygame

def main():
    pygame.init()       # Pygameを初期化
    pygame.display.set_mode((800, 600))     # 画面作成
    running = True      # 実行継続フラグ

 ファイル パスの作成と、SEの読み込みです。

    p_battle = "audio/maou_bgm_8bit18.mp3"  # バトルBGM
    p_field  = "audio/maou_bgm_8bit01.mp3"  # フィールドBGM
    p_damage = "audio/maou_se_8bit22.wav"   # ダメージSE
    se = pygame.mixer.Sound(p_damage)   # SE読み込み

 メイン ループの中で、音声の切り替えをおこないます。

    while running:
        for event in pygame.event.get():        # イベント
            if event.type == pygame.QUIT: running = False   # 終了
            if event.type == pygame.KEYDOWN:    # キー押下
                if event.key == pygame.K_b:     # バトル
                    pygame.mixer.music.load(p_battle)       # BGM読み込み
                    pygame.mixer.music.play(loops=-1)       # BGM再生
                if event.key == pygame.K_f:     # フィールド
                    pygame.mixer.music.load(p_field)        # BGM読み込み
                    pygame.mixer.music.play(loops=-1)       # BGM再生
                if event.key == pygame.K_d:     # ダメージ
                    se.play()       # SE再生
    pygame.quit()

BGM

 BGMは`pygame.mixer.music`を利用します。

p_battle = "audio/bgm/maou_bgm_8bit18.mp3"  # バトルBGM
pygame.mixer.music.load(p_battle)       # BGM読み込み
pygame.mixer.music.play(loops = -1)     # BGM再生

 `load()`で読み込み、`play()`で再生します。再生時に、引数で`loops = -1`を指定すると、ループし続けます。

 `pygame.mixer.music`は、次の曲を読み込むと、前の曲は止まります。ファイルは「OGG」か「MP3」を利用します。

SE

 SEは`pygame.mixer.Sound`クラスを利用します。

p_damage = "audio/maou_se_8bit22.wav"   # ダメージSE
se = pygame.mixer.Sound(p_damage)   # SE読み込み
se.play()       # SE再生

 `Sound()`の引数で読み込み、`play()`で再生します。ファイルは「OGG」か「WAV」を利用します。


同人誌について

 この連載は、同人誌『PythonとPygameで作る レトロ風RPG 全コード』を一部抜粋して編集したものです。

 同人誌本編には、ゲーム本体のソースコードや、各種のサンプルコード、Windowsで実行できるEXEファイルが付属しています。PDFで288ページの本になります。ぜひ、こちらもご購入ください(2024-03-10:ver1.0.3 に更新)。

 このnoteの記事と、Webページに一部抜粋版を掲載しています。

 技術系同人誌など まとめページ


この記事が気に入ったらサポートをしてみませんか?