[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()
参考
この記事が気に入ったらサポートをしてみませんか?