]> git.sesse.net Git - nageru/blobdiff - stereocompressor.cpp
Release Nageru 1.7.2.
[nageru] / stereocompressor.cpp
index 9291dc366b8384f15cf1d204cd05ce603a0c1671..d9f1142fa3595b08ccaadd9431cb70fd7a602288 100644 (file)
@@ -1,8 +1,8 @@
-#include <math.h>
+#include "stereocompressor.h"
+
 #include <assert.h>
 #include <algorithm>
-
-#include "stereocompressor.h"
+#include <cmath>
 
 using namespace std;
 
@@ -68,7 +68,7 @@ inline float fastpow(float x, float y)
 inline float compressor_knee(float x, float threshold, float inv_threshold, float inv_ratio_minus_one, float postgain)
 {
        assert(inv_ratio_minus_one <= 0.0f);
-       if (x > threshold && inv_ratio_minus_one < 0.0f) {
+       if (x > threshold) {
                return postgain * fastpow(x * inv_threshold, inv_ratio_minus_one);
        } else {
                return postgain;
@@ -93,6 +93,17 @@ void StereoCompressor::process(float *buf, size_t num_samples, float threshold,
        float *left_ptr = buf;
        float *right_ptr = buf + 1;
 
+       if (inv_ratio_minus_one >= 0.0) {
+               for (size_t i = 0; i < num_samples; ++i) {
+                       *left_ptr *= makeup_gain;
+                       left_ptr += 2;
+
+                       *right_ptr *= makeup_gain;
+                       right_ptr += 2;
+               }
+               return;
+       }
+
        float peak_level = this->peak_level;
        float compr_level = this->compr_level;