It has replaygain support, in that it handles RG data from plugins that supply it, and passes it to apps. Rhythmbox is one app that implements RG based on this data. The only problem is that data is only read from APE tags and vorbis tags, so only FLAC, Vorbis, and APE tagged files (With RG data in that tag) will be handled.
It would take very little effort to add RG tag reading support to the formats that are played but not RG'd, including...
m4a - RG data stored in iTunes branded tags (qtdemux is the plugin used to read these tags)
mp3 - RG data stored in id3v2 tags (mad used to decode, and as far as I can tell, read tags)
musepack - RG data stored in header (gst-musepack plugin uses libmpcdec to play IIRC)*
I do not know C. However, I am not completely stupid, and was able to submit a patch that added the support for reading the data from ape tags. I have tried to work out how to do the same for these other formats, but it seems some familiarity with the language would be required...
So. If you know a bit of C and want to help out here is what you need to know..
Anonymous CVS access to gst-plugins (I would work on the head)..
:pserver:anonymous@cvs.freedesktop.org:/gstreamer (module: gst-plugins)
See gst/qtdemux.c, ext/mad/??, ext/musepack/ etc..
CVS web: http://cvs.freedesktop.org/gstreamer/gst-plugins/
A related bug: http://bugzilla.gnome.org/show_bug.cgi?id=127574
It's a small, irritating little task, but it would make a big difference. Rather than having half of a given music collection adjusted to 89db and the other half causing one's ears to bleed, users get to enjoy a completely RG'd collection.
There is, of course, the bigger task of creating a gst-replaygain scanner plugin.. but that's another story.
*I'm basing all this on files tagged by foobar2000. If there are problems with this approach (I expect there might be) then feel free to suggest improvements, and implement them. As long as it's only reading support, some form of complete RG support is better than none.