There is a link to it in a post dealing with fixed Sonic & Knuckles PC MIDIs, but else I only posted it in IRC.
So, this is the offical release of MidiPlay, my FM OPL MIDI Player.
You can download the Win32 Binary and you can also get the source code (includes VC6 project files)
The archive with the binary contains various instrument sets and a few .txt files related to the research I did.
The MIDI player focuses on support for usual MID files, but CMF and LAA (Lucas Arts songs, v1+v2) also work.
Controls are similar to VGMPlay (because it's based on it), i.e. cursor keys for seeking, ESC quits, Space pauses, 'F' fades out and 'R' restarts the song.
You can enable WAV and VGM logging by editing the .ini file. (VGM logging locks the sample rate to 44100 Hz, btw.)
If you have an OPL sound card, you can play the MIDIs on it directly, too. (for Windows NT/2000/XP you need to install PortTalk)
MIDI support
The initial implementation was based on observations from the Windows OPL driver, but there are various improvements:
- Modulation Wheel and Expression
- pan law volume compensation (makes hard-panned channels slightly louder to make up for the missing speaker)
- RPNs for Pitch Bend Range and Fine/Coarse Detune
- Sustain Pedal (was half-broken in WinFM driver) and Sostenuto
- multiple drum channels via SysEx events (GS mode) and Bank MSB (XG mode)
- SysEx messages for GM Master Volume and XG Master Volume/Detune/Transpose
The drum pitch table is currently hardcoded and based on SB16.VXD from Creative's Win95 driver. I know that Windows 2000/XP uses a different table (actually none, it just uses the drum note ID as drum frequency). The one used in Windows 3 is different as well.
CMF support
All common controllers are supported, polyphony is possible. A few things behave differrently from the official SBFMDRV.COM though. Especially the volume calculation is off.
LAA support
LAA v1: sounds accurate, but lacks software vibrato
LAA v2: I'm pretty sure that the instruments are off. The volume calculation (although ported from ScummVM) seems questionable and there's no software vibrato. Pressing 'S' executes the next conditional jump.
I haven't worked on it since January 2013, so there are still a few bugs in it. IIRC it can crash sometimes when seeking through MIDIs that make heavy use of the sustain pedal or don't terminate notes properly.
Anyway, enjoy listening to MIDIs as they sounded back in Windows 95!