def build(self, opts = {}): writer = IO_Bit() self._buildChunk(writer, self.header, opts) for track in self.tracks: self._buildChunk(writer, track, opts) if self.xfinfo: self._buildChunk(writer, self.xfinfo, opts) if self.xfkaraoke: self._buildChunk(writer, self.xfkaraoke, opts) return writer.output()
def _buildChunk(self, writer, chunk, opts): type = chunk['type'] writerChunk = IO_Bit() if type == 'MThd': self._buildChunkHeader(writerChunk, chunk['header'], opts) elif type == 'MTrk': self._buildChunkTrack(writerChunk, chunk['track'], opts) elif type == 'XFIH': self._buildChunkXFInfo(writerChunk, chunk['xfinfo'], opts) elif type == 'XFKM': self._buildChunkXFKaraoke(writerChunk, chunk['xfkaraoke'], opts) else: raise Exception("Unknown chunk (type=type)\n") chunkData = writerChunk.output() length = len(chunkData) writer.putData(type , 4) writer.putUI32BE(length) writer.putData(chunkData, length)