mirror of https://github.com/zeldaret/tmc.git
Extract aif files
This commit is contained in:
parent
5b71bd95f7
commit
15956402ea
|
|
@ -3,4 +3,4 @@
|
||||||
.include "asm/macros/m4a.inc"
|
.include "asm/macros/m4a.inc"
|
||||||
.include "asm/macros/map.inc"
|
.include "asm/macros/map.inc"
|
||||||
.include "asm/macros/entity.inc"
|
.include "asm/macros/entity.inc"
|
||||||
.include "asm/macros/music_voice.inc"
|
.include "asm/macros/music_voice.inc"
|
||||||
|
|
|
||||||
|
|
@ -137,4 +137,4 @@
|
||||||
.byte 0x80, 0, 0, 0
|
.byte 0x80, 0, 0, 0
|
||||||
.4byte \voice_group_pointer
|
.4byte \voice_group_pointer
|
||||||
.4byte 0
|
.4byte 0
|
||||||
.endm
|
.endm
|
||||||
|
|
|
||||||
405
assets.yaml
405
assets.yaml
File diff suppressed because it is too large
Load Diff
|
|
@ -7,6 +7,8 @@
|
||||||
bgmUnused:: @ 08A12ECC
|
bgmUnused:: @ 08A12ECC
|
||||||
.incbin "data_08A127A1/bgmUnused.bin"
|
.incbin "data_08A127A1/bgmUnused.bin"
|
||||||
|
|
||||||
|
@ direct sound files
|
||||||
|
|
||||||
gUnk_08A12ED0:: @ 08A12ED0
|
gUnk_08A12ED0:: @ 08A12ED0
|
||||||
.incbin "data_08A127A1/gUnk_08A12ED0.bin"
|
.incbin "data_08A127A1/gUnk_08A12ED0.bin"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,8 @@ def extract_assets(variant, assets_folder):
|
||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
baserom = None
|
baserom = None
|
||||||
with open(map[variant], 'rb') as file:
|
baserom_path = map[variant]
|
||||||
|
with open(baserom_path, 'rb') as file:
|
||||||
baserom = bytearray(file.read())
|
baserom = bytearray(file.read())
|
||||||
|
|
||||||
with open('assets.yaml') as file:
|
with open('assets.yaml') as file:
|
||||||
|
|
@ -54,22 +55,31 @@ def extract_assets(variant, assets_folder):
|
||||||
# Use start for the current variant
|
# Use start for the current variant
|
||||||
start = asset['starts'][variant]
|
start = asset['starts'][variant]
|
||||||
|
|
||||||
size = asset['size'] # TODO can different sizes for the different variants ever occur?
|
|
||||||
|
|
||||||
mode = ''
|
mode = ''
|
||||||
if 'type' in asset:
|
if 'type' in asset:
|
||||||
mode = asset['type']
|
mode = asset['type']
|
||||||
|
|
||||||
|
|
||||||
Path(os.path.dirname(path)).mkdir(parents=True, exist_ok=True)
|
Path(os.path.dirname(path)).mkdir(parents=True, exist_ok=True)
|
||||||
with open(path, 'wb') as output:
|
|
||||||
output.write(baserom[start:start+size])
|
if 'size' in asset: # The asset has a size and want to be extracted first.
|
||||||
|
size = asset['size'] # TODO can different sizes for the different variants ever occur?
|
||||||
|
|
||||||
|
with open(path, 'wb') as output:
|
||||||
|
output.write(baserom[start:start+size])
|
||||||
|
# If an asset has no size, the extraction tool reads the baserom iself.
|
||||||
|
|
||||||
|
options = asset['options'] if 'options' in asset else []
|
||||||
|
|
||||||
if mode == 'tileset':
|
if mode == 'tileset':
|
||||||
extract_tileset(path)
|
extract_tileset(path)
|
||||||
elif mode == 'palette':
|
elif mode == 'palette':
|
||||||
extract_palette(path)
|
extract_palette(path)
|
||||||
elif mode == 'graphic':
|
elif mode == 'graphic':
|
||||||
extract_graphic(path, asset['options'] if 'options' in asset else [])
|
extract_graphic(path, options)
|
||||||
|
elif mode == 'midi':
|
||||||
|
extract_midi(path, baserom_path, start, options)
|
||||||
|
elif mode == 'aif':
|
||||||
|
extract_aif(path, options)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -99,6 +109,49 @@ def extract_graphic(path, options):
|
||||||
params.append(str(options[key]))
|
params.append(str(options[key]))
|
||||||
run_gbagfx(path, base+'.png', params)
|
run_gbagfx(path, base+'.png', params)
|
||||||
|
|
||||||
|
def extract_midi(path, baserom_path, start, options):
|
||||||
|
assert(path.endswith('.s'))
|
||||||
|
base = path[0:-2]
|
||||||
|
|
||||||
|
common_params = []
|
||||||
|
agb2mid_params = []
|
||||||
|
|
||||||
|
for key in options:
|
||||||
|
if key == 'group' or key == 'G':
|
||||||
|
common_params.append('-G')
|
||||||
|
common_params.append(str(options[key]))
|
||||||
|
elif key == 'priority' or key == 'P':
|
||||||
|
common_params.append('-P')
|
||||||
|
common_params.append(str(options[key]))
|
||||||
|
elif key == 'reverb' or key == 'R':
|
||||||
|
common_params.append('-R')
|
||||||
|
common_params.append(str(options[key]))
|
||||||
|
elif key == 'nominator':
|
||||||
|
agb2mid_params.append('-n')
|
||||||
|
agb2mid_params.append(str(options[key]))
|
||||||
|
elif key == 'denominator':
|
||||||
|
agb2mid_params.append('-d')
|
||||||
|
agb2mid_params.append(str(options[key]))
|
||||||
|
elif key == 'timeChanges':
|
||||||
|
changes = options['timeChanges']
|
||||||
|
agb2mid_params.append('-t')
|
||||||
|
agb2mid_params.append(str(changes['nominator']))
|
||||||
|
agb2mid_params.append(str(changes['denominator']))
|
||||||
|
agb2mid_params.append(str(changes['time']))
|
||||||
|
else:
|
||||||
|
common_params.append('-'+key)
|
||||||
|
common_params.append(str(options[key]))
|
||||||
|
# To midi
|
||||||
|
subprocess.check_call([os.path.join('tools', 'agb2mid', 'agb2mid'), baserom_path, hex(start), baserom_path, base+'.mid'] + common_params + agb2mid_params)
|
||||||
|
# To assembly (TODO only do in build step, not if only extracting)
|
||||||
|
subprocess.check_call([os.path.join('tools', 'mid2agb', 'mid2agb'), base+'.mid', path] + common_params)
|
||||||
|
|
||||||
|
def extract_aif(path, options):
|
||||||
|
assert(path.endswith('.bin'))
|
||||||
|
base = path[0:-4]
|
||||||
|
subprocess.check_call([os.path.join('tools', 'aif2pcm', 'aif2pcm'), path, base+'.aif'])
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
if len(sys.argv) == 1:
|
if len(sys.argv) == 1:
|
||||||
extract_assets('USA')
|
extract_assets('USA')
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue