Mercurial > touhou
diff music.py @ 326:efcdf2ce747c
Add a very simple music player, for testing purpose.
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Thu, 21 Jun 2012 15:01:01 +0200 |
parents | |
children | b0b8825296d0 |
line wrap: on
line diff
new file mode 100755 --- /dev/null +++ b/music.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python +# -*- encoding: utf-8 -*- +## +## Copyright (C) 2012 Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published +## by the Free Software Foundation; version 3 only. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## + +import argparse +import os + +import pyximport +pyximport.install() + +from pytouhou.resource.loader import Loader +from pytouhou.ui.music import InfiniteWaveSource, ZwavSource +from pyglet.app import run + + +def get_wav_source(bgm, resource_loader): + posname = bgm.replace('bgm/', '').replace('.mid', '.pos') + track = resource_loader.get_track(posname) + wavname = os.path.join(resource_loader.game_dir, bgm.replace('.mid', '.wav')) + try: + source = InfiniteWaveSource(wavname, track.start, track.end) + except IOError: + source = None + return source + + +def get_zwav_source(track, resource_loader): + fmt = resource_loader.get_fmt('thbgm.fmt') + try: + source = ZwavSource('thbgm.dat', fmt[track]) + except IOError: + source = None + return source + + +def main(path, track, zwav, data): + resource_loader = Loader(path) + resource_loader.scan_archives(data) + + if not zwav: + source = get_wav_source('bgm/th06_%02d.mid' % track, resource_loader) + else: + source = get_zwav_source(track, resource_loader) + + source.play() + + run() + + +pathsep = os.path.pathsep +default_data = (pathsep.join(('MD.DAT', 'th6*MD.DAT', '*MD.DAT', '*md.dat')),) + + +parser = argparse.ArgumentParser(description='Player for Touhou 6 music.') + +parser.add_argument('data', metavar='DAT', default=default_data, nargs='*', help='Game’s data files') +parser.add_argument('-p', '--path', metavar='DIRECTORY', default='.', help='Game directory path.') +parser.add_argument('-t', '--track', metavar='TRACK', type=int, required=True, help='The track to play, in game order.') +parser.add_argument('-z', '--zwav', action='store_true', default=False, help='Must be set when playing from PCB or newer.') + +args = parser.parse_args() + +main(args.path, args.track, args.zwav, tuple(args.data))