What you need is a line in the info file (ending with a 1) associated with each mp3 file (ending with a 0) that gives a volume offset in dB.
This has already been suggested (once upon a time, I think I may have been the one suggesting it

), but this also wouldn't work for the intended purpose. In order for the cannon-fire piece to sound as loud as the harpsichord piece, you would need to either a) increase the cannon-fire piece so loud as to severely distort when the cannons went off, or b) decrease the volume of the harpsichord piece so far that you lose all detail when listening to it.
There are all sorts of implementation issues making such a system difficult, too.
If you're complaining about dynamic differences and are not willing to listen to all of the songs at their original recorded volumes, then your only solution is dynamic range compression.
___________
Tony Fabris