예제 #1
0
    def __init__(self,
                 fileobj,
                 parser_name="pikmin2",
                 custom_parser=None,
                 *args,
                 **kwargs):

        self.options = OptionsCollector(base_bpm=100, base_ppqn=100)
        self._set_options(args, kwargs)

        self._bmsfile = fileobj

        if parser_name not in PARSERS:
            raise RuntimeError(
                "Parser '{parser_name}' doesn't exist! Parser must be one of the following:"
                "{parser_list}".format(parser_name=parser_name,
                                       parser_list=", ".join(PARSERS.keys())))

        elif custom_parser is not None:
            if not isinstance(custom_parser, VersionSpecificParser):
                raise RuntimeError("Custom Parser needs to be an instance "
                                   "of VersionSpecificParser, not {0}".format(
                                       type(custom_parser)))
            else:
                self._parser = custom_parser
        else:
            self._parser = parsers.container.get_parser(PARSERS[parser_name])

        self.scheduler = MidiScheduler()
        self._subroutines = BmsSubroutines(self._bmsfile, self._parser,
                                           self.options)

        self._ticks = 0
예제 #2
0
파일: pyBMS.py 프로젝트: RenolY2/py-playBMS
    def __init__(self, fileobj, parser_name="pikmin2", custom_parser=None,
                 *args, **kwargs):

        self.options = OptionsCollector(base_bpm=100, base_ppqn=100)
        self._set_options(args, kwargs)

        self._bmsfile = fileobj
        
        if parser_name not in PARSERS:
            raise RuntimeError(
                "Parser '{parser_name}' doesn't exist! Parser must be one of the following:"
                "{parser_list}".format(
                    parser_name=parser_name,
                    parser_list=", ".join(PARSERS.keys())
                )
            )

        elif custom_parser is not None:
            if not isinstance(custom_parser, VersionSpecificParser):
                raise RuntimeError(
                    "Custom Parser needs to be an instance "
                    "of VersionSpecificParser, not {0}".format(
                        type(custom_parser)
                    )
                )
            else:
                self._parser = custom_parser
        else:
            self._parser = parsers.container.get_parser(PARSERS[parser_name])

        self.scheduler = MidiScheduler()
        self._subroutines = BmsSubroutines(self._bmsfile, self._parser,
                                           self.options)

        self._ticks = 0
예제 #3
0
파일: pyBMS.py 프로젝트: RenolY2/py-playBMS
class BmsInterpreter(object):
    def __init__(self, fileobj, parser_name="pikmin2", custom_parser=None,
                 *args, **kwargs):

        self.options = OptionsCollector(base_bpm=100, base_ppqn=100)
        self._set_options(args, kwargs)

        self._bmsfile = fileobj
        
        if parser_name not in PARSERS:
            raise RuntimeError(
                "Parser '{parser_name}' doesn't exist! Parser must be one of the following:"
                "{parser_list}".format(
                    parser_name=parser_name,
                    parser_list=", ".join(PARSERS.keys())
                )
            )

        elif custom_parser is not None:
            if not isinstance(custom_parser, VersionSpecificParser):
                raise RuntimeError(
                    "Custom Parser needs to be an instance "
                    "of VersionSpecificParser, not {0}".format(
                        type(custom_parser)
                    )
                )
            else:
                self._parser = custom_parser
        else:
            self._parser = parsers.container.get_parser(PARSERS[parser_name])

        self.scheduler = MidiScheduler()
        self._subroutines = BmsSubroutines(self._bmsfile, self._parser,
                                           self.options)

        self._ticks = 0

    def _set_options(self, *args, **kwargs):
        self.options.set_options(**kwargs)
    
    def parse_file(self):
        # We add a main subroutine that starts doing the work.
        # As such, we set its parent id and track id both to None,
        # because it neither has a parent nor a BMS track id.
        self._subroutines.add_subroutine(None, None, 0)
        unique_id = self._subroutines.get_previous_uid()
        self.scheduler.add_track(unique_id, self._ticks)

        while True:
            # TODO: Add new subroutines when they are encountered.
            self._advance_tick()

        #return self.scheduler.compile_midi(INSTRUMENT_BANK=0, BPM=100)

    def _advance_tick(self):
        for sub in self._subroutines:
            cmd = sub.handle_next_command(self.scheduler, self._ticks)
            if cmd is None:
                pass
            else:
                #print cmd
                pass
        self._ticks += 1
예제 #4
0
class BmsInterpreter(object):
    def __init__(self,
                 fileobj,
                 parser_name="pikmin2",
                 custom_parser=None,
                 *args,
                 **kwargs):

        self.options = OptionsCollector(base_bpm=100, base_ppqn=100)
        self._set_options(args, kwargs)

        self._bmsfile = fileobj

        if parser_name not in PARSERS:
            raise RuntimeError(
                "Parser '{parser_name}' doesn't exist! Parser must be one of the following:"
                "{parser_list}".format(parser_name=parser_name,
                                       parser_list=", ".join(PARSERS.keys())))

        elif custom_parser is not None:
            if not isinstance(custom_parser, VersionSpecificParser):
                raise RuntimeError("Custom Parser needs to be an instance "
                                   "of VersionSpecificParser, not {0}".format(
                                       type(custom_parser)))
            else:
                self._parser = custom_parser
        else:
            self._parser = parsers.container.get_parser(PARSERS[parser_name])

        self.scheduler = MidiScheduler()
        self._subroutines = BmsSubroutines(self._bmsfile, self._parser,
                                           self.options)

        self._ticks = 0

    def _set_options(self, *args, **kwargs):
        self.options.set_options(**kwargs)

    def parse_file(self):
        # We add a main subroutine that starts doing the work.
        # As such, we set its parent id and track id both to None,
        # because it neither has a parent nor a BMS track id.
        self._subroutines.add_subroutine(None, None, 0)
        unique_id = self._subroutines.get_previous_uid()
        self.scheduler.add_track(unique_id, self._ticks)

        while True:
            # TODO: Add new subroutines when they are encountered.
            self._advance_tick()

        #return self.scheduler.compile_midi(INSTRUMENT_BANK=0, BPM=100)

    def _advance_tick(self):
        for sub in self._subroutines:
            cmd = sub.handle_next_command(self.scheduler, self._ticks)
            if cmd is None:
                pass
            else:
                #print cmd
                pass
        self._ticks += 1