mirror of
https://github.com/freedoom/freedoom.git
synced 2025-09-02 07:25:45 -04:00
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:
parent
1a7fa5a92b
commit
5ce7690612
2 changed files with 253 additions and 0 deletions
43
lumps/genmidi/sbi_file.py
Normal file
43
lumps/genmidi/sbi_file.py
Normal 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)
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue