From ed47d4a01692f16e9b514a9b5933b5394b85816a Mon Sep 17 00:00:00 2001 From: Markus Schmidt Date: Thu, 2 Jul 2015 00:31:15 +0200 Subject: [PATCH] Stereo: ms->lr and lr->ms working --- src/giface.cpp | 1 + src/metadata.cpp | 6 ++--- src/modules_tools.cpp | 71 +++++++++++++++------------------------------------ 3 files changed, 24 insertions(+), 54 deletions(-) diff --git a/src/giface.cpp b/src/giface.cpp index a32487a..9bf1489 100644 --- a/src/giface.cpp +++ b/src/giface.cpp @@ -224,6 +224,7 @@ std::string parameter_properties::to_string(float value) const //printf("%.2f %s\n", value, buf); break; case PF_FLOAT: + value = round(value * 1000) / 1000; switch (flags & PF_DIGITMASK) { case PF_DIGIT_0: snprintf(buf, sizeof(buf), "%.0f", value); diff --git a/src/metadata.cpp b/src/metadata.cpp index b32bb4e..48080d3 100644 --- a/src/metadata.cpp +++ b/src/metadata.cpp @@ -1277,11 +1277,11 @@ CALF_PORT_PROPS(stereo) = { { 0, 0, 6, 0, PF_ENUM | PF_CTL_COMBO, stereo_mode_names, "mode", "Mode" }, { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "slev", "S Level" }, - { 0.f, -1.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "sbal", "S Balance" }, + { 0.f, -1.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_DIGIT_2, NULL, "sbal", "S Bal" }, { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "mlev", "M Level" }, - { 0.f, -1.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "mpan", "M Panorama" }, + { 0.f, -1.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_DIGIT_2, NULL, "mpan", "M Pan" }, - { 0.f, -1.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "stereo_base", "Stereo Base" }, + { 0.f, -1.f, 1.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS | PF_DIGIT_2, NULL, "stereo_base", "Stereo Base" }, { 0.f, -20.f, 20.f, 0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_MSEC, 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_tools.cpp b/src/modules_tools.cpp index 236fd19..c95d258 100644 --- a/src/modules_tools.cpp +++ b/src/modules_tools.cpp @@ -133,47 +133,8 @@ uint32_t stereo_audio_module::process(uint32_t offset, uint32_t numsamples, uint L *= (1.f - std::max(0.f, *params[param_balance_in])); R *= (1.f + std::min(0.f, *params[param_balance_in])); - // copy / flip / mono ... - switch((int)*params[param_mode]) - { - case 0: - default: - // LR > LR - break; - case 1: - // LR > MS - break; - case 2: - // MS > LR - break; - case 3: - // LR > LL - R = L; - break; - case 4: - // LR > RR - L = R; - break; - case 5: - // LR > L+R - L = (L + R) / 2; - R = L; - break; - case 6: - // LR > RL - float tmp = L; - L = R; - R = tmp; - break; - } - // softclip if(*params[param_softclip]) { -// int ph; -// ph = L / fabs(L); -// L = L > 0.63 ? ph * (0.63 + 0.36 * (1 - pow(MATH_E, (1.f / 3) * (0.63 + L * ph)))) : L; -// ph = R / fabs(R); -// R = R > 0.63 ? ph * (0.63 + 0.36 * (1 - pow(MATH_E, (1.f / 3) * (0.63 + R * ph)))) : R; R = _inv_atan_shape * atan(R * _sc_level); L = _inv_atan_shape * atan(L * _sc_level); } @@ -182,24 +143,17 @@ uint32_t stereo_audio_module::process(uint32_t offset, uint32_t numsamples, uint meter_inL = L; meter_inR = R; - // mute - L *= (1 - floor(*params[param_mute_l] + 0.5)); - R *= (1 - floor(*params[param_mute_r] + 0.5)); - - // phase - L *= (2 * (1 - floor(*params[param_phase_l] + 0.5))) - 1; - R *= (2 * (1 - floor(*params[param_phase_r] + 0.5))) - 1; - - + // modes float slev = *params[param_slev]; // slev - stereo level ( -2 -> 2 ) float sbal = 1 + *params[param_sbal]; // sbal - stereo balance ( 0 -> 2 ) float mlev = *params[param_mlev]; // mlev - mono level ( 0 -> 2 ) float mpan = (1 + *params[param_mpan]); // mpan - mono pan ( 0 -> 1 ) + float bl, br; + switch((int)*params[param_mode]) { case 0: - default: // LR > LR break; case 1: @@ -218,18 +172,33 @@ uint32_t stereo_audio_module::process(uint32_t offset, uint32_t numsamples, uint break; case 3: // LR > LL + R = L; break; case 4: // LR > RR + L = R; break; case 5: // LR > L+R + L = (L + R) / 2; + R = L; break; case 6: // LR > RL + float tmp = L; + L = R; + R = tmp; break; } + // mute + L *= (1 - floor(*params[param_mute_l] + 0.5)); + R *= (1 - floor(*params[param_mute_r] + 0.5)); + + // phase + L *= (2 * (1 - floor(*params[param_phase_l] + 0.5))) - 1; + R *= (2 * (1 - floor(*params[param_phase_r] + 0.5))) - 1; + // delay buffer[pos] = L; buffer[pos + 1] = R; @@ -635,8 +604,8 @@ uint32_t widgets_audio_module::process(uint32_t offset, uint32_t numsamples, uin meter_3 = 0.f; meter_4 = 0.f; - float L = ins[0][i]; - float R = ins[1][i]; + //float L = ins[0][i]; + //float R = ins[1][i]; float values[] = {meter_1, meter_2, meter_3, meter_4}; meters.process(values); } -- 2.11.4.GIT