Exemplo n.º 1
0
 def dump(self, fp = sys.stdout, opts = {}):
     if ('hexdump' in opts) and opts['hexdump']:
         bitio = IO_Bit()
         bitio.input(self._mididata)
     fp.write("HEADER:\n")
     for key, value in self.header['header'].items(): 
         fp.write("  {0}: {1}\n".format(key, value))
     if ('hexdump' in opts) and opts['hexdump']:
         bitio.hexdump(0, self.header['length'] + 8)
     xfkaraoke_with_track = {}
     for idx, value in enumerate(self.tracks):
         xfkaraoke_with_track["{0}".format(idx)] = value;
     if not self.xfkaraoke is None:
         xfkaraoke_with_track["karaoke"] = self.xfkaraoke
         xfkaraoke_with_track["karaoke"]["track"] = self.xfkaraoke["xfkaraoke"]
     for idx, track in xfkaraoke_with_track.items():
         scaleCharactors = ['C','C#','D','D#','E','F','F#','G','G#','A','A#','B']
         fp.write("TRACK[{0}]:\n".format(idx))
         if ('hexdump' in opts) and opts['hexdump']:
             bitio.hexdump(track['_offset'], 8)
         for idx2, chunk in enumerate(track['track']):
             fp.write("  [{0}:".format(idx2))
             meta_event_type = -1
             for key, value in chunk.items():
                 if key == 'EventType':
                     if value < 0xFF: 
                         eventname = self.event_name[value]
                     else:
                         eventname = "Meta Event"
                     fp.write(" {0}:{1}({2}),".format(key, value, eventname))
                 elif key == 'MetaEventType':
                     meta_event_type = value
                     if value in self.meta_event_name:
                         eventname = self.meta_event_name[value]
                         fp.write(" {0}:{1}({2}),".format(key, value, eventname))
                     else:
                         fp.write(" {0}:{1},".format(key, value))
                     
                 elif key == 'ControllerType':
                     typename = self.controller_type_name[value]
                     fp.write(" {0}:{1}({2}),".format(key, value, typename))
                 elif key ==  'SystemEx' or key ==  'SystemExCont' or key ==  'MetaEventData':
                     fp.write(" {0}:".format(key))
                     dataLen = len(value)
                     if key == 'MetaEventData':
                         if meta_event_type == 0x05:
                             fp.write(value.decode('SJIS'))
                         elif meta_event_type == 0x07:
                             fp.write(value)
                     fp.write("(")
                     i = 0
                     while i < dataLen:
                        fp.write("{:02x}".format(ord(value[i:i+1])))
                        i += 1
                     fp.write(")")
                 elif key ==  'NoteNumber':
                         noteoct = math.floor(value / 12)
                         notekey = scaleCharactors[value % 12]
                         fp.write(" {:s}:{:d}({:s}{:.0f}),".format(key, value, notekey, noteoct))
                 else:
                     if (key[0:1] != '_') or (('verbose' in opts) and opts['verbose']): 
                         fp.write(" {0}:{1},".format(key, value))
             fp.write("\n")
             if ('hexdump' in opts) and opts['hexdump']:
                 bitio.hexdump(chunk['_offset'], chunk['_length'])