[SCM] calf/master: phase meter in stereo tools vu-meter: center mode stereo tools: LR->LL and LR->RR

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


The following commit has been merged in the master branch:
commit 041f9d5d67790c57ae3d86ea15039826083f102b
Author: Markus Schmidt <schmidt at boomshop.net>
Date:   Tue Dec 13 03:27:48 2011 +0100

    phase meter in stereo tools
    vu-meter: center mode
    stereo tools: LR->LL and LR->RR

diff --git a/gui/gui-stereo.xml b/gui/gui-stereo.xml
index fa53a1c..0cfb79b 100644
--- a/gui/gui-stereo.xml
+++ b/gui/gui-stereo.xml
@@ -97,8 +97,8 @@
     </vbox>
     <frame label="Output" expnad="1" fill="1">
         <vbox spacing="8">
-            <table rows="3" cols="3">
-                <label attach-x="0" attach-y="2" fill-x="0" expand-x="0" />
+            <table rows="4" cols="3">
+                <!--<label attach-x="0" attach-y="2" fill-x="0" expand-x="0" />-->
                 <label param="meter_outL" attach-x="0" attach-y="0" fill-x="0" expand-x="0" fill-y="0" expand-y="0" text="L"/>
                 <vumeter param="meter_outL" position="2" hold="1.5" falloff="2.5"  attach-x="1" attach-y="0" fill-x="1" expand-x="1" fill-y="0" expand-y="0"/>
                 <led param="clip_outL" attach-x="2" attach-y="0" fill-x="0" expand-x="0" fill-y="0" expand-y="0" />
@@ -106,6 +106,10 @@
                 <label param="meter_outR" attach-x="0" attach-y="1" fill-x="0" expand-x="0" fill-y="0" expand-y="0" text="R"/>
                 <vumeter param="meter_outR" position="2" hold="1.5" falloff="2.5" attach-x="1" attach-y="1" fill-x="1" expand-x="1" fill-y="0" expand-y="0"/>
                 <led param="clip_outR" attach-x="2" attach-y="1" fill-x="0" expand-x="0" fill-y="0" expand-y="0"/>
+                
+                <label param="meter_phase" attach-x="0" attach-y="2" fill-x="0" expand-x="0" fill-y="0" expand-y="0" text="φ"/>
+                <vumeter param="meter_phase" position="2" falloff="2.5"  attach-x="1" attach-y="2" fill-x="1" expand-x="1" fill-y="0" expand-y="0" mode="3"/>
+                
             </table>
             <hbox spacing="8">
                 <vbox expand="0" spacing="12">
diff --git a/src/calf/metadata.h b/src/calf/metadata.h
index 6109279..8d2ff9a 100644
--- a/src/calf/metadata.h
+++ b/src/calf/metadata.h
@@ -364,6 +364,7 @@ struct stereo_metadata: public plugin_metadata<stereo_metadata>
            param_mute_l, param_mute_r, param_phase_l, param_phase_r,
            param_mode, param_slev, param_sbal, param_mlev, param_mpan,
            param_widener, param_delay,
+           param_meter_phase,
            param_count };
     PLUGIN_NAME_ID_LABEL("stereo", "stereo", "Stereo Tools")
 };
diff --git a/src/calf/modules.h b/src/calf/modules.h
index 39072ec..dfeade3 100644
--- a/src/calf/modules.h
+++ b/src/calf/modules.h
@@ -277,7 +277,7 @@ class stereo_audio_module:
     bool active;
     
     uint32_t clip_inL, clip_inR, clip_outL, clip_outR;
-    float meter_inL, meter_inR, meter_outL, meter_outR;
+    float meter_inL, meter_inR, meter_outL, meter_outR, meter_phase;
     
     float * buffer;
     unsigned int pos;
diff --git a/src/ctl_vumeter.cpp b/src/ctl_vumeter.cpp
index ca50a73..e691fcd 100644
--- a/src/ctl_vumeter.cpp
+++ b/src/ctl_vumeter.cpp
@@ -172,7 +172,7 @@ calf_vumeter_expose (GtkWidget *widget, GdkEventExpose *event)
                         // red: 1.f -> 0.f
                         // green: 1.f -> 0.5
                         // blue: 0.f -> 1.f
-                        r = 1 - (ts - 0.25) / 0.25, g = 1.f - ts * 2.f, b = (ts - 0.25) / 0.25;
+                        r = 1 - (ts - 0.25) / 0.25, g = 1.f - (ts * 2.f - .5f), b = (ts - 0.25) / 0.25;
                     //                if (vu->value < ts || vu->value <= 0)
                     //                    r *= 0.5, g *= 0.5, b *= 0.5;
                     break;
@@ -275,6 +275,17 @@ calf_vumeter_expose (GtkWidget *widget, GdkEventExpose *event)
             int blind_x = std::min(hold_x + led_s, led_w);
             int blind_w = std::min(std::max(led_w - val_x - hold_x - led_s, 0), led_w);
             cairo_rectangle(c, led_x + blind_x, led_y, blind_w, led_h);
+        } else  if( vu->mode == VU_STANDARD_CENTER ) {
+            if(value > vu->last_value) {
+                // value is above peak hold
+                vu->last_value = value;
+                vu->last_hold = time;
+                vu->holding = true;
+            }
+            int val_x = round((1 - value) / 2.f * (led_w + led_m)); // add last led_m removed earlier
+            cairo_rectangle(c, led_x, led_y, val_x, led_h);
+            cairo_rectangle(c, led_x + led_w - val_x, led_y, val_x, led_h);
+            
         } else {
             if(value > vu->last_value) {
                 // value is above peak hold
@@ -283,23 +294,24 @@ calf_vumeter_expose (GtkWidget *widget, GdkEventExpose *event)
                 vu->holding = true;
             }
             
-            // blinder hold LED -> right
             int hold_x = round((1 - vu->last_value) * (led_w + led_m)); // add last led_m removed earlier
             hold_x -= hold_x % led_s;
-            cairo_rectangle( c, led_x + led_w - hold_x, led_y, hold_x, led_h);
-            
-            // blinder value -> hold LED
             int val_x = round(value * (led_w + led_m)); // add last led_m removed earlier
             val_x -= val_x % led_s;
             int blind_w = led_w - hold_x - led_s - val_x;
             blind_w = std::min(std::max(blind_w, 0), led_w);
             cairo_rectangle(c, led_x + val_x, led_y, blind_w, led_h);
+            cairo_rectangle( c, led_x + led_w - hold_x, led_y, hold_x, led_h);
         }
     } else {
         // darken normally
         if( vu->mode == VU_MONOCHROME_REVERSE )
             cairo_rectangle( c, led_x, led_y, value * led_w, led_h);
-        else
+        else if( vu->mode == VU_STANDARD_CENTER ) {
+            int val_x = round((1 - value) / 2.f * (led_w + led_m)); // add last led_m removed earlier
+            cairo_rectangle(c, led_x, led_y, val_x, led_h);
+            cairo_rectangle(c, led_x + led_w - val_x, led_y, val_x, led_h);
+        } else
             cairo_rectangle( c, led_x + value * led_w, led_y, led_w * (1 - value), led_h);
     }
     cairo_fill( c );
diff --git a/src/metadata.cpp b/src/metadata.cpp
index e4a3ace..d44593f 100644
--- a/src/metadata.cpp
+++ b/src/metadata.cpp
@@ -817,7 +817,7 @@ CALF_PLUGIN_INFO(mono) = { 0x8589, "MonoInput", "Calf Mono Input", "Markus Schmi
 ////////////////////////////////////////////////////////////////////////////
 
 CALF_PORT_NAMES(stereo) = {"In L", "In R", "Out L", "Out R"};
-const char *stereo_mode_names[] = { "LR - LR", "LR - MS", "MS - LR" };
+const char *stereo_mode_names[] = { "LR ▸ LR", "LR ▸ MS", "MS ▸ LR", "LR ▸ LL", "LR ▸ RR" };
 CALF_PORT_PROPS(stereo) = {
     { 0,           0,           1,     0,  PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass", "Bypass" },
     { 1,           0,           64,    0,  PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_in", "Input" },
@@ -841,7 +841,7 @@ CALF_PORT_PROPS(stereo) = {
     { 0,          0,            1,     0,  PF_BOOL | PF_CTL_TOGGLE, NULL, "phasel", "Phase L" },
     { 0,          0,            1,     0,  PF_BOOL | PF_CTL_TOGGLE, NULL, "phaser", "Phase R" },
     
-    { 0,           0,           2,     0,  PF_ENUM | PF_CTL_COMBO, stereo_mode_names, "mode", "Mode" },
+    { 0,           0,           4,     0,  PF_ENUM | PF_CTL_COMBO, stereo_mode_names, "mode", "Mode" },
     
     { 0.f,      -1.f,            1.f,   0,  PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "slev", "S Level" },
     { 0.f,      -1.f,            1.f,   0,  PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "sbal", "S Balance" },
@@ -850,6 +850,9 @@ CALF_PORT_PROPS(stereo) = {
     
     { 0,           0,           1,    0,  PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "widener", "Widener" },
     { 0.f,         -20.f,        20.f,  0,  PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "delay", "Delay" },
+    
+    { 0.f,      0.f,           1.f,   0,  PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_COEF | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_phase", "Phase Correlation" },
+    
     {}
 };
 
diff --git a/src/modules.cpp b/src/modules.cpp
index f0b955d..36eb67e 100644
--- a/src/modules.cpp
+++ b/src/modules.cpp
@@ -497,7 +497,14 @@ void stereo_audio_module::params_changed() {
             RL = slev * (2.f - sbal);
             RR = slev * sbal * -1;
             break;
-        
+        case 3:
+        case 4:
+            //LR->LL
+            LL = 0.f;
+            LR = 0.f;
+            RL = 0.f;
+            RR = 0.f;
+            break;
     }
 }
 
@@ -543,6 +550,17 @@ uint32_t stereo_audio_module::process(uint32_t offset, uint32_t numsamples, uint
                 R = tmp;
             }
             
+            // copy
+            switch((int)*params[param_mode])
+            {
+                case 3:
+                    R = L;
+                    break;
+                case 4:
+                    L = R;
+                    break;
+            }
+            
             // softclip
             if(*params[param_softclip]) {
                 int ph;
@@ -605,6 +623,13 @@ uint32_t stereo_audio_module::process(uint32_t offset, uint32_t numsamples, uint
             if(R > 1.f) clip_outR = srate >> 3;
             if(L > meter_outL) meter_outL = L;
             if(R > meter_outR) meter_outR = R;
+            
+            // phase meter
+            if(fabs(L) > 0.001 and fabs(R) > 0.001) {
+				meter_phase = fabs(fabs(L+R) > 0.000000001 ? sin(fabs((L-R)/(L+R))) : 0.f);
+			} else {
+				meter_phase = 0.f;
+			}
         }
     }
     // draw meters
@@ -616,6 +641,7 @@ uint32_t stereo_audio_module::process(uint32_t offset, uint32_t numsamples, uint
     SET_IF_CONNECTED(meter_inR);
     SET_IF_CONNECTED(meter_outL);
     SET_IF_CONNECTED(meter_outR);
+    SET_IF_CONNECTED(meter_phase);
     return outputs_mask;
 }
 

-- 
calf audio plugins packaging



More information about the pkg-multimedia-commits mailing list