人工知能に関する断創録

このブログでは人工知能のさまざまな分野について調査したことをまとめています(更新停止: 2019年12月31日)

BGMを鳴らす

無音の世界で寂しかったので今回はBGMを鳴らしてみます。現在の仕様ではBGMイベントを作り、マップをロードするときにBGMを鳴らすようにしています。音楽の再生の方法はBGMと効果音の再生(2008/5/11)で解説してるので参照してください。BGMはTAM Music FactoryさんからMP3をお借りしてます。ここの曲大好きです。

pyrpg19.zip
f:id:aidiary:20100807181533p:plain

BGMイベント

まずフィールドかお城のイベントファイルを見てください。下のようなBGMイベントが追加されています。

 BGM,field
 BGM,castle

fieldやcastleはMP3ファイルのファイル名です。この場合、フィールドマップではfield.mp3、お城のマップではcastle.mp3を再生することを意味しています。BGMはすべてbgmフォルダに入っています。このイベントファイルをロードするのはMapのload_event()でしたね。

    def load_event(self):
        """ファイルからイベントをロード"""
        file = os.path.join("data", self.name + ".evt")
        # テキスト形式のイベントを読み込む
        fp = codecs.open(file, "r", "utf-8")
        for line in fp:
            line = line.rstrip()  # 改行除去
            if line.startswith("#"): continue  # コメント行は無視
            data = line.split(",")
            event_type = data[0]
            if event_type == "BGM":  # BGMイベント
                self.play_bgm(data)
            elif event_type == "CHARA":  # キャラクターイベント
                self.create_chara(data)
            elif event_type == "MOVE":  # 移動イベント
                self.create_move(data)
        fp.close()

    def play_bgm(self, data):
        """BGMを鳴らす"""
        bgm_file = "%s.mp3" % data[1]
        bgm_file = os.path.join("bgm", bgm_file)
        pygame.mixer.music.load(bgm_file)
        pygame.mixer.music.play(-1)

BGMイベントのときplay_bgm()を呼び出しています。play_bgm()ではそのまま再生するだけです。再生の方法はBGMと効果音の再生(2008/5/11)を見てください。まあ2行で音が鳴るので簡単ですね。

BGMはマップをロードするときにメモリに読み込む点に注意してください。あらかじめロードしておかなくても速度的には問題なさそうです。