genmidi: Add Python code for reading OPL instruments.

These files load OPL instrument data from SBI (SoundBlaster Instrument)
or A2I (AdlibTracker2 Instrument) format files.
This commit is contained in:
Simon Howard 2011-12-27 02:42:04 +00:00
parent 1a7fa5a92b
commit 5ce7690612
2 changed files with 253 additions and 0 deletions

43
lumps/genmidi/sbi_file.py Normal file
View file

@ -0,0 +1,43 @@
import struct
import sys
HEADER_VALUE = "SBI\x1a"
FIELDS = [
"m_am_vibrato_eg",
"c_am_vibrato_eg",
"m_ksl_volume",
"c_ksl_volume",
"m_attack_decay",
"c_attack_decay",
"m_sustain_release",
"c_sustain_release",
"m_waveform",
"c_waveform",
"feedback_fm"
]
def read(filename):
f = open(filename)
data = f.read()
f.close()
header, name = struct.unpack("4s32s", data[0:36])
if header != HEADER_VALUE:
raise Exception("Invalid header for SBI file!")
instr_data = data[36:]
result = { "name": name.rstrip("\0") }
for i in range(len(FIELDS)):
result[FIELDS[i]], = struct.unpack("B", instr_data[i:i+1])
return result
if __name__ == "__main__":
for filename in sys.argv[1:]:
print filename
print read(filename)