Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sys
- import os
- import struct
- def readu32(file, le=True):
- if le:
- return struct.unpack("<i", file.read(4))[0]
- else:
- return struct.unpack(">i", file.read(4))[0]
- g1l = open(sys.argv[1], 'rb')
- fourcc = g1l.read(4)
- if fourcc == "_L1G":
- le = True
- else:
- le = False
- g1l.seek(8)
- ext = ".g1l"
- fullSize = readu32(g1l, le)
- headerSize = readu32(g1l, le)
- codec = readu32(g1l, le)
- fileCount = readu32(g1l, le)
- for i in range(fileCount):
- g1l.seek(0x18+i*4)
- print(hex(g1l.tell()))
- fileOffset = readu32(g1l, le)
- g1l.seek(fileOffset)
- header = g1l.read(4)
- if header == "RIFF":
- fileSize = readu32(g1l) + 8
- ext = ".at3"
- elif header == "WiiB":
- g1l.seek(0x18,1)
- channelSize = readu32(g1l, False)
- channelCount = readu32(g1l, False)
- ext = ".wiibgm"
- fileSize = channelCount * channelSize + 0x800
- elif header == "WiiV":
- g1l.seek(0xc,1)
- fileSize = readu32(g1l, False)
- print("WiiVoice - size %s" % hex(fileSize))
- ext = ".wiivoice"
- else:
- print ("Unknown file type %s" % (header))
- continue
- g1l.seek(fileOffset)
- fileName = os.path.splitext(sys.argv[1])[0] + "_%04d%s" % (i, ext)
- outFile = open(fileName, 'wb')
- if ext == ".g1l":
- outFile.write("G1L_0000" + struct.pack(">I", 0x1c + fileSize) + struct.pack(">I", 0x1c) + struct.pack(">I", codec) + struct.pack(">I", 1) + struct.pack(">I", 0x1c))
- outFile.write(g1l.read(fileSize))
- outFile.close()
- #print("Wrote %s" % (fileName))
- g1l.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement