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/map.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
|
||||
.4byte \voice_group_pointer
|
||||
.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
|
||||
.incbin "data_08A127A1/bgmUnused.bin"
|
||||
|
||||
@ direct sound files
|
||||
|
||||
gUnk_08A12ED0:: @ 08A12ED0
|
||||
.incbin "data_08A127A1/gUnk_08A12ED0.bin"
|
||||
|
||||
|
|
|
|||
|
|
@ -21,7 +21,8 @@ def extract_assets(variant, assets_folder):
|
|||
exit(1)
|
||||
|
||||
baserom = None
|
||||
with open(map[variant], 'rb') as file:
|
||||
baserom_path = map[variant]
|
||||
with open(baserom_path, 'rb') as file:
|
||||
baserom = bytearray(file.read())
|
||||
|
||||
with open('assets.yaml') as file:
|
||||
|
|
@ -54,22 +55,31 @@ def extract_assets(variant, assets_folder):
|
|||
# Use start for the current variant
|
||||
start = asset['starts'][variant]
|
||||
|
||||
size = asset['size'] # TODO can different sizes for the different variants ever occur?
|
||||
|
||||
mode = ''
|
||||
if 'type' in asset:
|
||||
mode = asset['type']
|
||||
|
||||
|
||||
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':
|
||||
extract_tileset(path)
|
||||
elif mode == 'palette':
|
||||
extract_palette(path)
|
||||
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]))
|
||||
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():
|
||||
if len(sys.argv) == 1:
|
||||
extract_assets('USA')
|
||||
|
|
|
|||
Loading…
Reference in New Issue