[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