Ich denke, einige verwechseln immer noch gern »MP3Gain« mit »Replay Gain« – zumal die Ausdrücke fälschlicherweise oft synonym gebraucht werden.
MP3Gain ist ein Tool, das die einzelnen Frames einer MP3-Datei anpackt und dort die Lautstärke in 1,5dB-Stufen variiert. Zusätzlich schreibt es ein APEv2-Tag, in dem Informationen zum Rückgängigmachen der Änderung sowie Replay Gain-Informationen für die Differenz zwischen Soll- und Ist-Korrektur abgelegt sind.
Damit sind von MP3Gain »behandelte« Dateien ohne weitere Tools auf nahezu jedem Gerätchen abspielbar – es war ja lange Zeit auch quasi »die einzige« Möglichkeit.
Replay Gain ist der Algorithmus zur Berechnung der Lautstärkenanpassung auf eine gegebene »Ziel-Lautstärke« (im Original von 2001 noch 83 dB, heute allgemein 89 dB, nur welche? Nehme mal an, dBFS … oder doch db SPL?).
Programme, die mit Replay Gain »umgehen« können, gibt es zweierlei:
[ul][]Die Analyser, die die Korrekturwerte durch Decodieren der Audiodaten errechnen und dann in Tags abspeichern, jedoch ohne etwas an Audiodaten bzw. MP3-Audioframes zu verändern, und
[]Die Abspiel-Programme, die die Tags lesen und einfach die Lautstärke anpassen (bzw. BASS.dll die Korrekturwerte übergeben)[/ul]
[pre] [/pre]MP3Gain ist insoweit ein »Sonderfall«, als dass es die Werte mittels des Replay Gain-Algorithmus errechnet, aber zusätzlich Änderungen an den Audio-Frames selbst vornimmt. Was es dann selbst nicht korrigieren kann, speichert es als »Differenz-ReplayGain-Tags«. Somit werden quasi die Audiodaten geändert (ok ok, nur ein paar loudness bits, nicht der content), damit ist eine mit MP3Gain »behandelte« Datei quasi »lautstärkerichtig« auf allem abspielbar, was MP3 decodieren kann (natürlich auch BASS.dll). Der Grund für die zusätzlichen »Differenz-Tags« ist die technisch bedingte Begrenzung auf Lautstärken-Anpassung in 1,5 dB-Schritten – anders geht das nicht, wenn man »verlustfrei« in den Frames korrigiert.
Für ReplayGain-Unterstützung muss jedoch einer der Korrekturwerte aus den Tags gelesen und vom Player »angewandt« werden. Das erlaubt es, wahlweise im »audiophile mode« (Album Gain) oder im »radio mode« (Track Gain) zu lauschen (um z.B. bewusste Lautstärkeunterschiede innerhalb eines Albums so zu belassen und nicht alles »auf gleiche Lautstärke zu knüppeln«). Mit ReplayGain sind auch »feinere« Abstufungen möglich, theoretisch nur begrenzt durch die digitale Auflösung der Audiodatei (und des Players).
Ganz allgemein sind mir natürlich auch Dinge lieber, die nur einen Wert ermitteln, den irgendwo ablegen (Tag, Datenbank, Gehirn des Moderators zum Faden, …) anstatt jedes Audioframe einer Datei zu verändern. Ich gehe immer noch davon aus, dass der Originator der Datei sich dabei was gedacht hat, sie eben genau so zu machen wie sie ist … Was ich (oder mein mAirList, mein Compressor/Limiter, …) dann hinten draus mache – ohne das Original zu verändern – ist meine Sache.
Ich meine mich zu erinnern, dass man diesen »ReplayGain-Wert« auch an die BASS.dll übergeben kann und die dann »die Arbeit« übernimmt, habe das aber jetzt nicht überprüft. Ich vermute aber, das meinte Torben weiter oben auch.
EDIT: Für BASS würde ich wohl als ersten Ansatz sowas wie
BASS_SetConfig(BASS_CONFIG_CURVE_VOL, TRUE); // set dB scale 0..1 = 0..-100 dB
BASS_ChannelSetAttribute(handle, BASS_ATTRIB_VOL, replaygain_track_gain/100);
versuchen. BASS_FX kann das natürlich bestimmt viel »schöner«, aber wenn man das erstmal anfängt, schreien eh gleich alle nach Effekten, Pitch, Tempo und BPM …
EDIT 2: Das ist natürlich nur ein erster Ansatz … some thinking required … weil immerhin auch positive RG-Werte möglich sind (dann würde das so nicht direkt funktionieren).