I thought I'd chime in for the status of things as I've had it for getting MIDI to work.
Back in the day, I used to use Yamaha S-YXG50 (there's an XP version). It's nice, but still sort of limited.
I've also tried a whole slew of software synthesizers. AudioCompositor sounds good, but it parses most MIDI files incorrectly, not to mention the fact that you HAVE to try to find a serial for it because the author is MIA.
Timidity sounds OK, but the reverb isn't configurable enough, and the quality isn't ideal... Not to mention the fact that I never managed to get it working with a loopback driver for general MIDI input.
The solution I ended up settling on is several pieces of software, tied together program called Cantabile Lite (1.2). Supporting software is the VST instruments sfz (a SoundFont software synthesizer), Freeverb (or some other VST reverb plugin, which one isn't really important), the ASIO software driver ASIO4ALL which adds ASIO support to my i9400 (I use this just because it supports a bigger buffer th an Cantabile), and a midi loopback driver (I don't recall which one I'm using, but this is also not very relevant, any will do).
Cantabile can act as a VST host, with up to two racks with two plugins each in the free version. Why do you need two racks? Well, because there's a bug somewhere where something is ignoring program changes on channel 10 setting it to a drum kit... so the drum kit would always be mapped to a regular instrument. You could set the channel to the drum kit manually in sfz, but then when you played a new file or restarted the same file, it'd reset it back away from the drum kit.
My solution ended up being to have a second copy of sfz running on the second rack, just handling the drum kit. It has channel 10 permanently set to the drum kit program, but I set Cantabile to ignore program changes on channel 10 for that rack.
Anyhow, the eventual setup is:
Cantabile 1.2 Lite
- Rack 1: sfz (all instruments except chan 10), reverb plugin
- Rack 2: sfz (just chan 10, drums), reverb plugin
ASIO4ALL driver
The loopback driver I just use when I want to redirect MIDI output there and not just play a MIDI file.
Cantabile supports saving your workspace, so I can load up this whole shebang at once without re-doing it every time. What I get as an end result is a fairly general purpose software GM midi synth. Unfortunately, sfz isn't multithreaded (apparently multithreaded VSTi are frowned upon), and it's fairly processor intensive, so I can't always use the highest quality in sfz. Still, this solution sounds excellent!
Cantabile runs different VSTs in different threads, though (it seems), so if I had the pro version of Cantabile, I could have 16 copies of sfz running, each one only handling one MIDI channel. That would probably do a pretty good job of splitting the load between my CPUs. sfz shares memory between various instances, so even when I load up a hefty 100MB+ soundfont, they just all share one copy of it.
Playing MIDI files from WinAmp or another player into Cantabile through the loopback driver produces really strange timing glitches (sounds like crap), which is why I use Cantabile's built in MIDI file player. But for a MIDI instrument (I'm not a musician, so I play around with a virtual midi keyboard), it works fine.
So that's my setup. It took a while to get it all working properly, and I still sometimes need to tweak it based on the file (if, say, it doesn't have a drum kit on chan 10, which is fairly rare, or if the file is very intensive and I need to change sfz's quality). My only regret is that with the free version of Cantabile, the limitation of 2 racks means I'm mostly limited to one CPU core, which sfz doesn't have much trouble maxing out.
Sadly, Cantabile doesn't support large buffers because it's assumed that musicians want minimal latency. But if you're playing a MIDI file and want to be able to smooth over the demanding bits of the song that will peg your CPU, you're going to need a buffer measured in seconds, not samples :P ASIO4ALL helps with this since it supports much larger buffers, but they're still much smaller than what I'd really like.
So despite the complexity, the workspace being saved means I can just double click a file and it loads up ready to play.
PS: CakeWalk uses sfz for its soundfont synth, IIRC. So sfz is something that is used professinally.
PPS: The reason I'm using a reverb VST on each rack is because sfz's built-in reveb isn't configurable. On or off. The problem is the reverb quality is a tad lacking, and it's very tame. Sometimes I have trouble telling if the reverb is on or off. I prefer having control so that I can set the reverb to a level I like. Not so much that everything is muddy, but enough that the music is going to sound a lot more rich, not so damned flat like it is without reverb.
PPPS: You can control reverb in sfz+, but that's commercial, not free. $60 for sfz+. Since the guy was bought out by Cakewalk, it eventually sort of evolved into Cakewalk Dimension Pro, which sells for almost $400.