見出し画像

[Pyxel]効果音割り込みをサポートした音声管理クラス


はじめに

Pyxelで音声周りの処理を書いていますと、標準の機能だけでは少々不便に感じることがあります。BGMを外部ファイルから読み込んで流したり、BGMに割り込んで効果音を鳴らしたい時に工夫が必要です。そこで、音声周りの処理をまとめた管理クラスを作成しました。

概要

Pyxelで使用するBGMや効果音を管理し、再生・停止・効果音の割り込みをサポートする音声管理クラスです。以下のGitHubにコードを掲載しております。


仕様

機能

  • 音声ファイルをBGMまたは効果音として読み込む

  • BGMの再生・停止

  • 効果音の割り込み再生

  • BGM・効果音の管理

メソッド

  • set_seChannel(self, ch: int): SEを再生するチャンネルを設定します

  • load_bgm(self, path: str, name: str): 指定されたパスからBGMを読み込みます

  • load_se(self, path: str, name: str): 指定されたパスからSEを読み込み、サウンドバンクにセットします

  • set_se(self, name: str, snd_num: int): PyxelのsndをSEとして登録します

  • play_bgm(self, name: str, loop: bool = True): 指定された名前のBGMを再生します

  • play_se(self, name: str): 指定された名前のSEを再生します

  • stop(self): 全てのサウンドを停止させます

注意点

1. 音声ファイルについて

本クラスが読み込む音声ファイルは、frenchboard氏制作の、「Pyxel Tracker」で制作したものを前提としています。「Pyxel Tracker」についての詳細は、以下のGitHubリポジトリをご参照ください。


2. 効果音の扱いについて

本クラスは、効果音を読み込んだ際、Pyxelの0~63までのサウンドバンクに63から-1ずつ順に格納していきます。0~3はBGM用として確保しておりますので、登録できる効果音は60個までとなります。また、既にサウンドバンクに効果音が格納してある場合でも、音声ファイルを読み込むと上書きしてしまいますので、ご注意ください。

使用例

import pyxel
from sound_manager import SoundManager

class App:
    def __init__(self):
        # 初期化
        pyxel.init(160, 120, title="Sound Manager Example")
        self.sound_manager = SoundManager()

        # BGMとSEの読み込み
        self.sound_manager.load_bgm('sample_bgm', 'bgm1')
        self.sound_manager.load_se('sample_se', 'se1')

        # BGMを再生
        self.sound_manager.play_bgm('bgm1')

        pyxel.run(self.update, self.draw)

    def update(self):
        # スペースキーが押されたらSEを再生
        if pyxel.btnp(pyxel.KEY_SPACE):
            self.sound_manager.play_se('se1')

    def draw(self):
        pyxel.cls(0)
        pyxel.text(38, 60, "Press SPACE to play SE", 7)

App()

参考


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