The cause of this is unknown, but is probably the fault of Source.
This is due to Source forcing what should be a floating point number into an 8-bit integer. While an upper limit makes sense, Source made it way too low. Until then, here's whats wrong, in the order it bothers me the most: Then, an HTML5 implementation of a more accurate MIDI player can be used.
The only likely path to improving this MIDI player is for Garry's Mod to ditch its outdated Chrome 18 based embedded browser (Awesomium) with one based on modern versions of Chrome (Chromium Embedded Framework). Several issues with sound playback in the Source engine prevent any improvements. Known Issues:This MIDI player is far from perfect.