Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Written by soneek [github.com/soneek]
- # Specifically written for Kingdom Hearts 1.5 HD ReMIX
- # Not guaranteed to work elsewhere
- import string
- import struct
- import sys
- def readSeek(f, offset, size):
- f.seek(offset)
- return f.read(size)
- def writeSeek(f, offset, data):
- f.seek(offset)
- return f.write(data)
- if len(sys.argv) != 2:
- print "Usage:\n\t" + sys.argv[0] + " song.scd"
- sys.exit()
- scd = open(sys.argv[1], "rb")
- scdSize = struct.unpack(">I", readSeek(scd, 0x14, 4))[0]
- trackCount = struct.unpack(">H", readSeek(scd, 0x34, 2))[0]
- print trackCount
- trackOffsetOffset = 0x40 + struct.unpack(">H", readSeek(scd, 0xe, 2))[0]
- if trackCount > 1:
- for i in range(0, trackCount):
- trackOffset = struct.unpack(">I", readSeek(scd, trackOffsetOffset + i * 4, 4))[0]
- if i == trackCount - 1:
- trackSize = scdSize - trackOffset
- else:
- trackSize = struct.unpack(">I", readSeek(scd, trackOffsetOffset + (i+1) * 4, 4))[0] - trackOffset
- print hex(trackOffset)
- outName = string.replace(sys.argv[1], ".scd", "_" + str(i) + ".scd")
- outscd = open(outName, "wb")
- outscd.write(readSeek(scd, 0, 0x34))
- outscd.write(struct.pack(">H", 1))
- outscd.write(readSeek(scd, 0x36, 0x3a))
- outscd.write(struct.pack(">IIII", 0x80, 0, 0, 0))
- outscd.write(readSeek(scd, trackOffset, trackSize))
- trackSize = outscd.tell()
- writeSeek(outscd, 0x14, struct.pack(">I", trackSize))
- outscd.close()
- scd.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement