[SCM] calf/master: FUCK YEAH

js at users.alioth.debian.org js at users.alioth.debian.org
Tue May 7 15:40:43 UTC 2013


The following commit has been merged in the master branch:
commit a54ed3f5af9c94000b1cfa11898ce3ff60a1f954
Author: Markus Schmidt <schmidt at boomshop.net>
Date:   Wed Dec 7 04:40:19 2011 +0100

    FUCK YEAH

diff --git a/src/audio_fx.cpp b/src/audio_fx.cpp
index f979dcf..e952ba3 100644
--- a/src/audio_fx.cpp
+++ b/src/audio_fx.cpp
@@ -537,7 +537,7 @@ bool simple_lfo::get_dot(float &x, float &y, int &size, cairo_iface *context) co
 lookahead_limiter::lookahead_limiter() {
     is_active = false;
     channels = 2;
-    
+    id = 0;
 }
 
 void lookahead_limiter::activate()
@@ -704,6 +704,10 @@ void lookahead_limiter::process(float &left, float &right, float * multi_buffer)
     // post treatment (denormal, limit)
     denormal(&left);
     denormal(&right);
+    
+//    if(pos%20==0)
+//        printf("%d: limit: %+.5f eff_limit: %+.5f\n", id, limit, limit * multi_coeff * weight);
+    
     left = std::max(left, -limit * multi_coeff * weight);
     left = std::min(left, limit * multi_coeff * weight);
     right = std::max(right, -limit * multi_coeff * weight);
diff --git a/src/calf/audio_fx.h b/src/calf/audio_fx.h
index d8e1e01..657699d 100644
--- a/src/calf/audio_fx.h
+++ b/src/calf/audio_fx.h
@@ -570,6 +570,7 @@ public:
 
 class lookahead_limiter {
 private:
+public:
     float limit, attack, release, weight;
     float attack__;
     uint32_t srate;
@@ -589,11 +590,11 @@ private:
     float over_c;
     int pos_next;
     bool use_multi;
+    unsigned int id;
     static inline void denormal(volatile float *f) {
 	    *f += 1e-18;
 	    *f -= 1e-18;
     }
-public:
     lookahead_limiter();
     void set_multi(bool set);
     void process(float &left, float &right, float *multi_buffer);
diff --git a/src/calf/modules_limit.h b/src/calf/modules_limit.h
index 6735ea4..0930b78 100644
--- a/src/calf/modules_limit.h
+++ b/src/calf/modules_limit.h
@@ -60,6 +60,7 @@ private:
     int mode, mode_old;
     float meter_inL, meter_inR, meter_outL, meter_outR;
     dsp::lookahead_limiter strip[strips];
+    dsp::lookahead_limiter broadband;
     dsp::biquad_d2<float> lpL[strips - 1][3], lpR[strips - 1][3], hpL[strips - 1][3], hpR[strips - 1][3];
     float freq_old[strips - 1], sep_old[strips - 1], q_old[strips - 1];
     unsigned int pos;
diff --git a/src/modules_limit.cpp b/src/modules_limit.cpp
index cceef87..312e7b2 100644
--- a/src/modules_limit.cpp
+++ b/src/modules_limit.cpp
@@ -222,7 +222,9 @@ void multibandlimiter_audio_module::activate()
     for (int j = 0; j < strips; j ++) {
         strip[j].activate();
         strip[j].set_multi(true);
+        strip[j].id = j;
     }
+    broadband.activate();
     pos = 0;
 }
 
@@ -233,6 +235,7 @@ void multibandlimiter_audio_module::deactivate()
     for (int j = 0; j < strips; j ++) {
         strip[j].deactivate();
     }
+    broadband.deactivate();
 }
 
 void multibandlimiter_audio_module::params_changed()
@@ -298,10 +301,10 @@ void multibandlimiter_audio_module::params_changed()
     // set the params of all strips
     float rel;
     
-    *params[param_weight0] = 0.f;
-    *params[param_weight1] = 0.f;
-    *params[param_weight2] = 0.f;
-    *params[param_weight3] = 0.f;
+//    *params[param_weight0] = 0.f;
+//    *params[param_weight1] = 0.f;
+//    *params[param_weight2] = 0.f;
+//    *params[param_weight3] = 0.f;
     
     rel = *params[param_release] *  pow(0.25, *params[param_release0] * -1);
     rel = (*params[param_minrel] > 0.5) ? std::max(2500 * (1.f / 30), rel) : rel;
@@ -323,7 +326,7 @@ void multibandlimiter_audio_module::params_changed()
     weight[3] = pow(0.25, *params[param_weight3] * -1);
     strip[3].set_params(*params[param_limit], *params[param_attack], rel, weight[3], true);
     *params[param_effrelease3] = rel;
-    
+    broadband.set_params(*params[param_limit], *params[param_attack], rel, 1.f);
     // rebuild multiband buffer
     if( *params[param_attack] != attack_old) {
         // rebuild buffer
@@ -342,6 +345,7 @@ void multibandlimiter_audio_module::set_sample_rate(uint32_t sr)
     for (int j = 0; j < strips; j ++) {
         strip[j].set_sample_rate(srate);
     }
+    broadband.set_sample_rate(srate);
 }
 
 #define BYPASSED_COMPRESSION(index) \
@@ -356,6 +360,7 @@ uint32_t multibandlimiter_audio_module::process(uint32_t offset, uint32_t numsam
 {
     bool bypass = *params[param_bypass] > 0.5f;
     numsamples += offset;
+    float batt = 0.f;
 //    for (int i = 0; i < strips; i++)
 //        strip[i].update_curve();
     if(bypass) {
@@ -462,7 +467,7 @@ uint32_t multibandlimiter_audio_module::process(uint32_t offset, uint32_t numsam
             
             // write multiband coefficient to buffer
             //buffer[pos] = *params[param_limit] / std::min(fabs(sum_left), fabs(sum_right));
-            buffer[pos] = std::min(*params[param_limit] / std::min(fabs(sum_left), fabs(sum_right)), 1.0);
+            buffer[pos] = std::min(*params[param_limit] / std::max(fabs(sum_left), fabs(sum_right)), 1.0);
             
             //if(pos%20 == 0) printf("| %+.5f | %+.5f : %3d\n", buffer[pos], std::max(fabs(sum_left), fabs(sum_right)), pos);
             //if(pos%10 == 0) printf("%03d: %.5f\n", pos, buffer[pos]);
@@ -475,8 +480,18 @@ uint32_t multibandlimiter_audio_module::process(uint32_t offset, uint32_t numsam
                 outL += _tmpL[i];
                 outR += _tmpR[i];
             } // process single strip again for limiter
+            float fickdich[0];
+            //if(*params[param_minrel] > 0.5)
+            broadband.process(outL, outR, fickdich);
+            batt = broadband.get_attenuation();
             //if(outL > 0.001f) printf("%3d: out: %+.5f - coeffOut: %+.5f - bufferSum: %+.5f\n", pos, outL, buffer[(pos + 2) % buffer_size], bufferSum);
             
+//            if(outL > *params[param_limit]) {
+//                for(unsigned int i = 0; i < strips; i++) {
+//                    printf("%+.5f - ", strip[i].
+//                }
+//            }
+            
             // autolevel
             outL /= *params[param_limit];
             outR /= *params[param_limit];
@@ -533,17 +548,17 @@ uint32_t multibandlimiter_audio_module::process(uint32_t offset, uint32_t numsam
     SET_IF_CONNECTED(meter_outR);
     // draw strip meters
     if(bypass > 0.5f) {
-        BYPASSED_COMPRESSION(0)
-        BYPASSED_COMPRESSION(1)
-        BYPASSED_COMPRESSION(2)
-        BYPASSED_COMPRESSION(3)
+        if(params[param_att0] != NULL) *params[param_att0] = 1.0;
+        if(params[param_att1] != NULL) *params[param_att1] = 1.0;
+        if(params[param_att2] != NULL) *params[param_att2] = 1.0;
+        if(params[param_att3] != NULL) *params[param_att3] = 1.0;
+           
     } else {
-        ACTIVE_COMPRESSION(0)
-        ACTIVE_COMPRESSION(1)
-        ACTIVE_COMPRESSION(2)
-        ACTIVE_COMPRESSION(3)
+        if(params[param_att0] != NULL) *params[param_att0] = strip[0].get_attenuation() * batt;
+        if(params[param_att1] != NULL) *params[param_att1] = strip[1].get_attenuation() * batt;
+        if(params[param_att2] != NULL) *params[param_att2] = strip[2].get_attenuation() * batt;
+        if(params[param_att3] != NULL) *params[param_att3] = strip[3].get_attenuation() * batt;
     }
-    
     // whatever has to be returned x)
     return outputs_mask;
 }

-- 
calf audio plugins packaging



More information about the pkg-multimedia-commits mailing list