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 __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
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
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