Its not GPL'ed (well, the DosBox code is, mine isn't). My code is strictly under a Public Domain license. Since I have a wife and full time job, I don't have too much time to work on this project. If I had more time I'd be more thorough in posting both binaries and source. Moreover, this latest post was strictly made to get feedback regarding my optimizations. You're right though, I shouldn't violate the GPL, and I'll continue to try to post both the source code and binary when I get time.
As for the dropped partials, they aren't nearly as bad as they were when I wrote the original post. The problem is still in trying to figure out exactly how the MT-32 deals with partials when it runs out of them.
As for the slowdown... it was the order in how I was doing things. Here's some pseudo-code to demonstrate:
Old version:
CallbackRoutine {
for each sample requested
call getsample routine (this routine would then return a single stereo sample from all the notes currently playing)
next
}
New version:
CallbackRoutine {
for each partial playing
call getsample of partial class and generate the samples needed from that particular partial
next
}
Because I'm not calling the same getsample routine 32 times over and then reloading the pointers to all the notes and partials a gazillion times, I was able to save a ton in CPU speed. I'll be posting the source very soon.