This is ConSiGno's OPL instrument patch table, found here:
<https://github.com/sneakernets/DMXOPL>
This is the result of many years' development and probably the
highest quality Doom OPL instrument set that's ever been developed. I've
obtained permission from ConSiGno to submit it to Freedoom, with the
following small omissions from the upstream version:
* Instrument 107 (Shamisen)
* Percussion 36 (Bass Drum 1)
* Percussion 69 (Cabasa)
* Percussion 76 (Hi Wood Block)
* Percussion 77 (Low Wood Block)
In doing due diligence I found that the patch data for these instruments
matched the patch data from Doom's GENMIDI table. Just to be
meticulously safe we'll keep the old versions of these (nothing, in the
case of the Cabasa). Other than these, every other instrument has been
replaced with a new patch.
Pretty much every Sound Blaster-compatible card used an OPL3 chip
(everything since the Sound Blaster 2 in October 1991) so it seems
reasonable to add this as a requirement. Because of the way that the new
waveforms are arranged in OPL3, it's a pretty graceful degradation if
they're used on an OPL2 anyway (see datasheet, page 14).
This adds dumping for the tune= field that was just added in commit
276118107, but also:
* Instrument name gets put in a comment at the end of line - like the
current configuration in config.py.
* Instrument calls get split across two lines when there are many
parameters, to try to keep to 80 columns.
* off1= and off2= parameters now get outputted as +x or -x rather than
just x or -x.
The fine tuning field was previously being hard-coded to the value of
128 with no option to change it. DMXGUS in particular makes use of this
field to tune individual instruments, so let's add proper support for
it.
Python 2 is very near end-of-life, and Python3-compatible changes to a
few scripts introduced compatibility problems with 2.7 again. It went
unnoticed for me since my system symlinks "python" to "python3", but
it broke the build on systems where that symlink is still python2. At
this point in time, I feel it is worth targetting modern Python and
forgetting about 2.7.
Organize .gitignore by moving all patterns into a top level sorted
.gitignore file. With this change both "git status" and
"git-ls-ignore-index" should return cleanly. The later checks if any
files in the index are ignored.
Using the black code reformatter, pass it over all our Python files.
This allows for a consistent style across the code base.
Exception: lumps/dmxgus/stats.py, for readability.
This is one of the built-in variables for Make and can increase
portability on different operating systems (eg, on Windows, the
built-in $(RM) may be defined as "del" instead of "rm -f").
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...).
GitHub’s AsciiDoc parser barfs on the standard AsciiDoc syntax to
represent such characters with only ASCII… Well, everybody should
support UTF‐8 these days. Let’s just use these directly.
Tweak the code used to build the GENMIDI Lump so that it properly
supports Python 3 for build. Tested use cases were:
* Normal build
* a2i-to-sbi script to convert AdTrack2 instruments to SBI format
* dumpgenmidi script to dump the instruments from a GENMIDI lump.
* Running genmidi.py, sbi_file.py, a2i_file.py standalone to print the
contents of files in their respective formats.
This music sounded really horrible with Freedoom's GENMIDI lump, which
was a shame because this is a really beautiful level. So adjust a
couple of the more prominent instruments used for this music track:
* Instrument 104 (Sci-fi):
This instrument was using a frequency multiplier that put it 2
octaves and a 5th above, making it (intentionally, because it's
a "sci-fi" effect?) discordant. Rework this so that it isn't
discordant any more.
* Instrument 51 (SynthStrings #1):
This had a slow attack phase which had the effect of offsetting
the notes slightly, so that they seemed out of sync. Adjust this
and also increase the feedback so that the instrument sounds more
"stringy" (?)
Some of the instruments were using OPL3 waveforms, but GENMIDI is
for OPL2 chips and these are not necessarily supported. Adjust the
instrument settings to only use the original four OPL2 waveforms,
while trying to maintain something resembling the same sound.
With a couple of exceptions, the majority of OPL instruments sound
better when adjusted down by one octave. It seems likely that the
original BSD instruments were supposed to sound this way and we've
been playing the wrong notes all this time.
This adds the remaining changes from horncomposer's modified version
of the old GENMIDI lump. Details from his accompanying text file
follow:
2/6/11- Replaced Electric Piano 2 (patch 5) - with the high pitched attack :)
Replaced Acoustic Piano (patch 0) - Serves as model for other pianos
Replaced Bright Acoustic Piano (patch 1)
Replaced Electric Grand Piano (patch 2)
Replaced Honky-tonk piano (patch 3) - Added "out of tune"
Accidentally discovered a good Electic Piano 1 (patch 4) - with chorus
This adds a good number of the missing percussion instruments. These
come from a dump of Matt Cadirao (horncomposer)'s modified version of
the old GENMIDI lump.
Config lists the instrument files to use to build the GENMIDI lump.
Some instruments are not yet provided and are nulled out using a dummy
SBI file that doesn't play anything.
Move C code into subdirectory as it will soon be only of historical
interest. Add extra program to dump SBI instrument patches, switch
to using OPL2 instruments, and ignore "null" instruments (all-zero).