]> git.sesse.net Git - nageru/blobdiff - mixer.cpp
Move the limiter after the compressor; since it is not the prettiest limiter out...
[nageru] / mixer.cpp
index 8ccd7fa0e5d71fbe24a26fd0e8c47b8092df5044..0e362f069395874c837dac1bf732c9e1d32d25a0 100644 (file)
--- a/mixer.cpp
+++ b/mixer.cpp
@@ -578,9 +578,19 @@ void Mixer::process_audio_one_frame()
 
 //     float limiter_att, compressor_att;
 
-       // Then a limiter at +0 dB (so, -14 dBFS) to take out the worst peaks only.
+       // The real compressor.
+       if (compressor_enabled) {
+               float threshold = pow(10.0f, compressor_threshold_dbfs / 20.0f);
+               float ratio = 20.0f;
+               float attack_time = 0.005f;
+               float release_time = 0.040f;
+               float makeup_gain = 2.0f;  // +6 dB.
+               compressor.process(samples_out.data(), samples_out.size() / 2, threshold, ratio, attack_time, release_time, makeup_gain);
+//             compressor_att = compressor.get_attenuation();
+       }
+
+       // Finally a limiter at -4 dB (so, -10 dBFS) to take out the worst peaks only.
        // Note that since ratio is not infinite, we could go slightly higher than this.
-       // Probably more tuning is warranted here.
        if (limiter_enabled) {
                float threshold = pow(10.0f, limiter_threshold_dbfs / 20.0f);
                float ratio = 30.0f;
@@ -591,17 +601,6 @@ void Mixer::process_audio_one_frame()
 //             limiter_att = limiter.get_attenuation();
        }
 
-       // Finally, the real compressor.
-       if (compressor_enabled) {
-               float threshold = pow(10.0f, compressor_threshold_dbfs / 20.0f);
-               float ratio = 20.0f;
-               float attack_time = 0.005f;
-               float release_time = 0.040f;
-               float makeup_gain = 2.0f;  // +6 dB.
-               compressor.process(samples_out.data(), samples_out.size() / 2, threshold, ratio, attack_time, release_time, makeup_gain);
-//             compressor_att = compressor.get_attenuation();
-       }
-
 //     printf("limiter=%+5.1f  compressor=%+5.1f\n", 20.0*log10(limiter_att), 20.0*log10(compressor_att));
 
        // Upsample 4x to find interpolated peak.