mirror of
https://github.com/freedoom/freedoom.git
synced 2025-09-04 04:25:46 -04:00
The tags are shorthand for the license of each file and avoid copying the full license text into each one (and avoids having to manually update the dates in each one...).
85 lines
1.9 KiB
Python
85 lines
1.9 KiB
Python
#!/usr/bin/env python
|
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
#
|
|
# Dump the contents of a GENMIDI lump into separate .sbi instrument files,
|
|
# and output a config to stdout.
|
|
#
|
|
|
|
import os
|
|
import sys
|
|
|
|
import genmidi
|
|
import sbi_file
|
|
import midi
|
|
import sbi_file
|
|
|
|
def is_null_voice(voice_data):
|
|
for f in sbi_file.FIELDS:
|
|
if voice_data[f] != 0:
|
|
return False
|
|
|
|
return True
|
|
|
|
def instr_to_str_def(filename, filename2, instr):
|
|
if is_null_voice(instr.voice1):
|
|
return "NullInstrument"
|
|
|
|
args = [ "\"%s\"" % filename ]
|
|
|
|
if instr.voice2 is not None:
|
|
args.append("\"%s\"" % filename2)
|
|
|
|
if instr.fixed_note is not None:
|
|
args.append("note=%s" % midi.def_for_note(instr.fixed_note))
|
|
if instr.offset1 != 0:
|
|
args.append("off1=%i" % instr.offset1)
|
|
if instr.offset2 != 0:
|
|
args.append("off2=%i" % instr.offset2)
|
|
|
|
return "Instrument(%s)" % (", ".join(args))
|
|
|
|
def print_instr_def(filename, filename2, instr):
|
|
print("\t%s," % instr_to_str_def(filename, filename2, instr))
|
|
|
|
def dump_instrument(filename, filename2, instr):
|
|
|
|
if is_null_voice(instr.voice1):
|
|
return
|
|
|
|
sbi_file.write(os.path.join("instruments", filename), instr.voice1)
|
|
|
|
if instr.voice2 is not None:
|
|
sbi_file.write(os.path.join("instruments", filename2),
|
|
instr.voice2)
|
|
|
|
if len(sys.argv) != 2:
|
|
sys.stderr.write("Usage: %s <filename>\n" % sys.argv[0])
|
|
sys.exit(-1)
|
|
|
|
instruments = genmidi.read(sys.argv[1])
|
|
|
|
main_instrs = instruments[0:128]
|
|
percussion = instruments[128:]
|
|
|
|
print("INSTRUMENTS = [")
|
|
|
|
for i in range(len(main_instrs)):
|
|
instr = main_instrs[i]
|
|
filename = "instr%03i.sbi" % (i+1)
|
|
filename2 = "instr%03i-2.sbi" % (i+1)
|
|
dump_instrument(filename, filename2, instr)
|
|
print_instr_def(filename, filename2, instr)
|
|
|
|
print("]")
|
|
print("")
|
|
print("PERCUSSION = [")
|
|
|
|
for i in range(len(percussion)):
|
|
instr = percussion[i]
|
|
filename = "perc%02i.sbi" % (i+35)
|
|
filename2 = "perc%02i-2.sbi" % (i+35)
|
|
dump_instrument(filename, filename2, instr)
|
|
print_instr_def(filename, filename2, instr)
|
|
|
|
print("]")
|
|
|