From 89c98a77a5130a9ed31c6d2acdb3fad6590f9c78 Mon Sep 17 00:00:00 2001 From: Lost Robot <34612565+LostRobotMusic@users.noreply.github.com> Date: Fri, 10 Nov 2023 07:10:44 -0800 Subject: [PATCH] LOMM (upward/downward multiband compressor) (#6925) --- cmake/modules/PluginList.cmake | 1 + data/themes/classic/lcd_11green.png | Bin 0 -> 10455 bytes data/themes/classic/lcd_11green_dot.png | Bin 0 -> 5964 bytes data/themes/default/lcd_11green.png | Bin 0 -> 10455 bytes data/themes/default/lcd_11green_dot.png | Bin 0 -> 5964 bytes include/Effect.h | 5 + plugins/LOMM/CMakeLists.txt | 3 + plugins/LOMM/LOMM.cpp | 444 ++++++++++++++++++ plugins/LOMM/LOMM.h | 106 +++++ plugins/LOMM/LOMMControlDialog.cpp | 275 +++++++++++ plugins/LOMM/LOMMControlDialog.h | 129 +++++ plugins/LOMM/LOMMControls.cpp | 277 +++++++++++ plugins/LOMM/LOMMControls.h | 136 ++++++ plugins/LOMM/artwork.png | Bin 0 -> 70032 bytes plugins/LOMM/crossover_led_green.png | Bin 0 -> 290 bytes plugins/LOMM/crossover_led_off.png | Bin 0 -> 6684 bytes plugins/LOMM/depthScaling_active.png | Bin 0 -> 867 bytes plugins/LOMM/depthScaling_inactive.png | Bin 0 -> 886 bytes plugins/LOMM/feedback_active.png | Bin 0 -> 11378 bytes plugins/LOMM/feedback_inactive.png | Bin 0 -> 8904 bytes plugins/LOMM/high_band_active.png | Bin 0 -> 8801 bytes plugins/LOMM/high_band_inactive.png | Bin 0 -> 1818 bytes plugins/LOMM/init_active.png | Bin 0 -> 1204 bytes plugins/LOMM/init_inactive.png | Bin 0 -> 1187 bytes plugins/LOMM/logo.png | Bin 0 -> 774 bytes plugins/LOMM/lookahead_active.png | Bin 0 -> 1091 bytes plugins/LOMM/lookahead_inactive.png | Bin 0 -> 1029 bytes plugins/LOMM/lowSideUpwardSuppress_active.png | Bin 0 -> 972 bytes .../LOMM/lowSideUpwardSuppress_inactive.png | Bin 0 -> 4725 bytes plugins/LOMM/low_band_active.png | Bin 0 -> 8855 bytes plugins/LOMM/low_band_inactive.png | Bin 0 -> 1783 bytes plugins/LOMM/mid_band_active.png | Bin 0 -> 8837 bytes plugins/LOMM/mid_band_inactive.png | Bin 0 -> 1843 bytes plugins/LOMM/midside_active.png | Bin 0 -> 11242 bytes plugins/LOMM/midside_inactive.png | Bin 0 -> 9190 bytes plugins/LOMM/split1Enabled_active.png | Bin 0 -> 11035 bytes plugins/LOMM/split1Enabled_inactive.png | Bin 0 -> 1041 bytes plugins/LOMM/split2Enabled_active.png | Bin 0 -> 11351 bytes plugins/LOMM/split2Enabled_inactive.png | Bin 0 -> 1052 bytes plugins/LOMM/stereoLink_active.png | Bin 0 -> 1042 bytes plugins/LOMM/stereoLink_inactive.png | Bin 0 -> 1050 bytes 41 files changed, 1376 insertions(+) create mode 100644 data/themes/classic/lcd_11green.png create mode 100644 data/themes/classic/lcd_11green_dot.png create mode 100644 data/themes/default/lcd_11green.png create mode 100644 data/themes/default/lcd_11green_dot.png create mode 100644 plugins/LOMM/CMakeLists.txt create mode 100644 plugins/LOMM/LOMM.cpp create mode 100644 plugins/LOMM/LOMM.h create mode 100644 plugins/LOMM/LOMMControlDialog.cpp create mode 100644 plugins/LOMM/LOMMControlDialog.h create mode 100644 plugins/LOMM/LOMMControls.cpp create mode 100644 plugins/LOMM/LOMMControls.h create mode 100644 plugins/LOMM/artwork.png create mode 100644 plugins/LOMM/crossover_led_green.png create mode 100644 plugins/LOMM/crossover_led_off.png create mode 100644 plugins/LOMM/depthScaling_active.png create mode 100644 plugins/LOMM/depthScaling_inactive.png create mode 100644 plugins/LOMM/feedback_active.png create mode 100644 plugins/LOMM/feedback_inactive.png create mode 100644 plugins/LOMM/high_band_active.png create mode 100644 plugins/LOMM/high_band_inactive.png create mode 100644 plugins/LOMM/init_active.png create mode 100644 plugins/LOMM/init_inactive.png create mode 100644 plugins/LOMM/logo.png create mode 100644 plugins/LOMM/lookahead_active.png create mode 100644 plugins/LOMM/lookahead_inactive.png create mode 100644 plugins/LOMM/lowSideUpwardSuppress_active.png create mode 100644 plugins/LOMM/lowSideUpwardSuppress_inactive.png create mode 100644 plugins/LOMM/low_band_active.png create mode 100644 plugins/LOMM/low_band_inactive.png create mode 100644 plugins/LOMM/mid_band_active.png create mode 100644 plugins/LOMM/mid_band_inactive.png create mode 100644 plugins/LOMM/midside_active.png create mode 100644 plugins/LOMM/midside_inactive.png create mode 100644 plugins/LOMM/split1Enabled_active.png create mode 100644 plugins/LOMM/split1Enabled_inactive.png create mode 100644 plugins/LOMM/split2Enabled_active.png create mode 100644 plugins/LOMM/split2Enabled_inactive.png create mode 100644 plugins/LOMM/stereoLink_active.png create mode 100644 plugins/LOMM/stereoLink_inactive.png diff --git a/cmake/modules/PluginList.cmake b/cmake/modules/PluginList.cmake index 0a4686fb2..afeca3548 100644 --- a/cmake/modules/PluginList.cmake +++ b/cmake/modules/PluginList.cmake @@ -41,6 +41,7 @@ SET(LMMS_PLUGIN_LIST HydrogenImport LadspaBrowser LadspaEffect + LOMM Lv2Effect Lv2Instrument Lb302 diff --git a/data/themes/classic/lcd_11green.png b/data/themes/classic/lcd_11green.png new file mode 100644 index 0000000000000000000000000000000000000000..32e923fe887c82a01bd3c2175cc0f7109d5ffc98 GIT binary patch literal 10455 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 OGSODoQ>#_63;RD*ho7?m literal 0 HcmV?d00001 diff --git a/data/themes/classic/lcd_11green_dot.png b/data/themes/classic/lcd_11green_dot.png new file mode 100644 index 0000000000000000000000000000000000000000..9f5a660d33f6b0242163cee1c3eb41821ba4f92a GIT binary patch literal 5964 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 OGSODoQ>#_63;RD*ho7?m literal 0 HcmV?d00001 diff --git a/data/themes/default/lcd_11green_dot.png b/data/themes/default/lcd_11green_dot.png new file mode 100644 index 0000000000000000000000000000000000000000..9f5a660d33f6b0242163cee1c3eb41821ba4f92a GIT binary patch literal 5964 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 + * + * This file is part of LMMS - https://lmms.io + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + +#include "LOMM.h" + +#include "embed.h" +#include "plugin_export.h" + +namespace lmms +{ + +extern "C" +{ + Plugin::Descriptor PLUGIN_EXPORT lomm_plugin_descriptor = + { + LMMS_STRINGIFY(PLUGIN_NAME), + "LOMM", + QT_TRANSLATE_NOOP("PluginBrowser", "Upwards/downwards multiband compression plugin powered by the eldritch elder god LOMMUS."), + "Lost Robot ", + 0x0100, + Plugin::Type::Effect, + new PluginPixmapLoader("logo"), + nullptr, + nullptr + }; +} + + +LOMMEffect::LOMMEffect(Model* parent, const Descriptor::SubPluginFeatures::Key* key) : + Effect(&lomm_plugin_descriptor, parent, key), + m_lommControls(this), + m_sampleRate(Engine::audioEngine()->processingSampleRate()), + m_lp1(m_sampleRate), + m_lp2(m_sampleRate), + m_hp1(m_sampleRate), + m_hp2(m_sampleRate), + m_needsUpdate(true), + m_coeffPrecalc(-0.05), + m_crestTimeConst(0.999), + m_lookWrite(0), + m_lookBufLength(2) +{ + autoQuitModel()->setValue(autoQuitModel()->maxValue()); + + m_yL[0][0] = m_yL[0][1] = LOMM_MIN_FLOOR; + m_yL[1][0] = m_yL[1][1] = LOMM_MIN_FLOOR; + m_yL[2][0] = m_yL[2][1] = LOMM_MIN_FLOOR; + + connect(Engine::audioEngine(), SIGNAL(sampleRateChanged()), this, SLOT(changeSampleRate())); + emit changeSampleRate(); +} + +void LOMMEffect::changeSampleRate() +{ + m_sampleRate = Engine::audioEngine()->processingSampleRate(); + m_lp1.setSampleRate(m_sampleRate); + m_lp2.setSampleRate(m_sampleRate); + m_hp1.setSampleRate(m_sampleRate); + m_hp2.setSampleRate(m_sampleRate); + + m_coeffPrecalc = -2.2f / (m_sampleRate * 0.001f); + m_needsUpdate = true; + + m_crestTimeConst = exp(-1.f / (0.2f * m_sampleRate)); + + m_lookBufLength = std::ceil((LOMM_MAX_LOOKAHEAD / 1000.f) * m_sampleRate) + 2; + for (int i = 0; i < 2; ++i) + { + for (int j = 0; j < 3; ++j) + { + m_inLookBuf[j][i].resize(m_lookBufLength); + m_scLookBuf[j][i].resize(m_lookBufLength, LOMM_MIN_FLOOR); + } + } +} + +void LOMMEffect::clearFilterHistories() +{ + m_lp1.clearHistory(); + m_lp2.clearHistory(); + m_hp1.clearHistory(); + m_hp2.clearHistory(); +} + + + + +bool LOMMEffect::processAudioBuffer(sampleFrame* buf, const fpp_t frames) +{ + if (!isEnabled() || !isRunning()) + { + return false; + } + + if (m_needsUpdate || m_lommControls.m_split1Model.isValueChanged()) + { + m_lp1.setLowpass(m_lommControls.m_split1Model.value()); + m_hp1.setHighpass(m_lommControls.m_split1Model.value()); + } + if (m_needsUpdate || m_lommControls.m_split2Model.isValueChanged()) + { + m_lp2.setLowpass(m_lommControls.m_split2Model.value()); + m_hp2.setHighpass(m_lommControls.m_split2Model.value()); + } + m_needsUpdate = false; + + float outSum = 0.f; + const float d = dryLevel(); + const float w = wetLevel(); + + const float depth = m_lommControls.m_depthModel.value(); + const float time = m_lommControls.m_timeModel.value(); + const float inVol = dbfsToAmp(m_lommControls.m_inVolModel.value()); + const float outVol = dbfsToAmp(m_lommControls.m_outVolModel.value()); + const float upward = m_lommControls.m_upwardModel.value(); + const float downward = m_lommControls.m_downwardModel.value(); + const bool split1Enabled = m_lommControls.m_split1EnabledModel.value(); + const bool split2Enabled = m_lommControls.m_split2EnabledModel.value(); + const bool band1Enabled = m_lommControls.m_band1EnabledModel.value(); + const bool band2Enabled = m_lommControls.m_band2EnabledModel.value(); + const bool band3Enabled = m_lommControls.m_band3EnabledModel.value(); + const float inHigh = dbfsToAmp(m_lommControls.m_inHighModel.value()); + const float inMid = dbfsToAmp(m_lommControls.m_inMidModel.value()); + const float inLow = dbfsToAmp(m_lommControls.m_inLowModel.value()); + float inBandVol[3] = {inHigh, inMid, inLow}; + const float outHigh = dbfsToAmp(m_lommControls.m_outHighModel.value()); + const float outMid = dbfsToAmp(m_lommControls.m_outMidModel.value()); + const float outLow = dbfsToAmp(m_lommControls.m_outLowModel.value()); + float outBandVol[3] = {outHigh, outMid, outLow}; + const float aThreshH = m_lommControls.m_aThreshHModel.value(); + const float aThreshM = m_lommControls.m_aThreshMModel.value(); + const float aThreshL = m_lommControls.m_aThreshLModel.value(); + float aThresh[3] = {aThreshH, aThreshM, aThreshL}; + const float aRatioH = m_lommControls.m_aRatioHModel.value(); + const float aRatioM = m_lommControls.m_aRatioMModel.value(); + const float aRatioL = m_lommControls.m_aRatioLModel.value(); + float aRatio[3] = {1.f / aRatioH, 1.f / aRatioM, 1.f / aRatioL}; + const float bThreshH = m_lommControls.m_bThreshHModel.value(); + const float bThreshM = m_lommControls.m_bThreshMModel.value(); + const float bThreshL = m_lommControls.m_bThreshLModel.value(); + float bThresh[3] = {bThreshH, bThreshM, bThreshL}; + const float bRatioH = m_lommControls.m_bRatioHModel.value(); + const float bRatioM = m_lommControls.m_bRatioMModel.value(); + const float bRatioL = m_lommControls.m_bRatioLModel.value(); + float bRatio[3] = {1.f / bRatioH, 1.f / bRatioM, 1.f / bRatioL}; + const float atkH = m_lommControls.m_atkHModel.value() * time; + const float atkM = m_lommControls.m_atkMModel.value() * time; + const float atkL = m_lommControls.m_atkLModel.value() * time; + const float atkCoefH = msToCoeff(atkH); + const float atkCoefM = msToCoeff(atkM); + const float atkCoefL = msToCoeff(atkL); + float atk[3] = {atkH, atkM, atkL}; + float atkCoef[3] = {atkCoefH, atkCoefM, atkCoefL}; + const float relH = m_lommControls.m_relHModel.value() * time; + const float relM = m_lommControls.m_relMModel.value() * time; + const float relL = m_lommControls.m_relLModel.value() * time; + const float relCoefH = msToCoeff(relH); + const float relCoefM = msToCoeff(relM); + const float relCoefL = msToCoeff(relL); + float rel[3] = {relH, relM, relL}; + float relCoef[3] = {relCoefH, relCoefM, relCoefL}; + const float rmsTime = m_lommControls.m_rmsTimeModel.value(); + const float rmsTimeConst = (rmsTime == 0) ? 0 : exp(-1.f / (rmsTime * 0.001f * m_sampleRate)); + const float knee = m_lommControls.m_kneeModel.value() * 0.5f; + const float range = m_lommControls.m_rangeModel.value(); + const float rangeAmp = dbfsToAmp(range); + const float balance = m_lommControls.m_balanceModel.value(); + const float balanceAmpTemp = dbfsToAmp(balance); + const float balanceAmp[2] = {1.f / balanceAmpTemp, balanceAmpTemp}; + const bool depthScaling = m_lommControls.m_depthScalingModel.value(); + const bool stereoLink = m_lommControls.m_stereoLinkModel.value(); + const float autoTime = m_lommControls.m_autoTimeModel.value() * m_lommControls.m_autoTimeModel.value(); + const float mix = m_lommControls.m_mixModel.value(); + const bool midside = m_lommControls.m_midsideModel.value(); + const bool lookaheadEnable = m_lommControls.m_lookaheadEnableModel.value(); + const int lookahead = std::ceil((m_lommControls.m_lookaheadModel.value() / 1000.f) * m_sampleRate); + const bool feedback = m_lommControls.m_feedbackModel.value() && !lookaheadEnable; + const bool lowSideUpwardSuppress = m_lommControls.m_lowSideUpwardSuppressModel.value() && midside; + + for (fpp_t f = 0; f < frames; ++f) + { + std::array s = {buf[f][0], buf[f][1]}; + + // Convert left/right to mid/side. Side channel is intentionally made + // to be 6 dB louder to bring it into volume ranges comparable to the mid channel. + if (midside) + { + float tempS0 = s[0]; + s[0] = (s[0] + s[1]) * 0.5f; + s[1] = tempS0 - s[1]; + } + + std::array, 3> bands = {{}}; + std::array, 3> bandsDry = {{}}; + + for (int i = 0; i < 2; ++i)// Channels + { + // These values are for the Auto time knob. Higher crest factor allows for faster attack/release. + float inSquared = s[i] * s[i]; + m_crestPeakVal[i] = std::max(std::max(LOMM_MIN_FLOOR, inSquared), m_crestTimeConst * m_crestPeakVal[i] + (1 - m_crestTimeConst) * (inSquared)); + m_crestRmsVal[i] = std::max(LOMM_MIN_FLOOR, m_crestTimeConst * m_crestRmsVal[i] + ((1 - m_crestTimeConst) * (inSquared))); + m_crestFactorVal[i] = m_crestPeakVal[i] / m_crestRmsVal[i]; + float crestFactorValTemp = ((m_crestFactorVal[i] - LOMM_AUTO_TIME_ADJUST) * autoTime) + LOMM_AUTO_TIME_ADJUST; + + // Crossover filters + bands[0][i] = m_hp1.update(s[i], i); + bands[1][i] = m_hp2.update(m_lp1.update(s[i], i), i); + bands[2][i] = m_lp2.update(s[i], i); + + if (!split1Enabled) + { + bands[1][i] += bands[0][i]; + bands[0][i] = 0; + } + if (!split2Enabled) + { + bands[1][i] += bands[2][i]; + bands[2][i] = 0; + } + + // Mute disabled bands + bands[0][i] *= band1Enabled; + bands[1][i] *= band2Enabled; + bands[2][i] *= band3Enabled; + + std::array detect = {0, 0, 0}; + for (int j = 0; j < 3; ++j)// Bands + { + bandsDry[j][i] = bands[j][i]; + + if (feedback && !lookaheadEnable) + { + bands[j][i] = m_prevOut[j][i]; + } + + bands[j][i] *= inBandVol[j] * inVol * balanceAmp[i]; + + if (rmsTime > 0)// RMS + { + m_rms[j][i] = rmsTimeConst * m_rms[j][i] + ((1 - rmsTimeConst) * (bands[j][i] * bands[j][i])); + detect[j] = std::max(LOMM_MIN_FLOOR, std::sqrt(m_rms[j][i])); + } + else// Peak + { + detect[j] = std::max(LOMM_MIN_FLOOR, std::abs(bands[j][i])); + } + + if (detect[j] > m_yL[j][i])// Attack phase + { + // Calculate attack value depending on crest factor + const float currentAttack = autoTime + ? msToCoeff(LOMM_AUTO_TIME_ADJUST * atk[j] / crestFactorValTemp) + : atkCoef[j]; + + m_yL[j][i] = m_yL[j][i] * currentAttack + (1 - currentAttack) * detect[j]; + } + else// Release phase + { + // Calculate release value depending on crest factor + const float currentRelease = autoTime + ? msToCoeff(LOMM_AUTO_TIME_ADJUST * rel[j] / crestFactorValTemp) + : relCoef[j]; + + m_yL[j][i] = m_yL[j][i] * currentRelease + (1 - currentRelease) * detect[j]; + } + + m_yL[j][i] = std::max(LOMM_MIN_FLOOR, m_yL[j][i]); + + float yAmp = m_yL[j][i]; + if (lookaheadEnable) + { + float temp = yAmp; + // Lookahead is calculated by picking the largest value between + // the current sidechain signal and the delayed sidechain signal. + yAmp = std::max(m_scLookBuf[j][i][m_lookWrite], m_scLookBuf[j][i][(m_lookWrite + m_lookBufLength - lookahead) % m_lookBufLength]); + m_scLookBuf[j][i][m_lookWrite] = temp; + } + + const float yDbfs = ampToDbfs(yAmp); + + float aboveGain = 0; + float belowGain = 0; + + // Downward compression + if (yDbfs - aThresh[j] < -knee)// Below knee + { + aboveGain = yDbfs; + } + else if (yDbfs - aThresh[j] < knee)// Within knee + { + const float temp = yDbfs - aThresh[j] + knee; + aboveGain = yDbfs + (aRatio[j] - 1) * temp * temp / (4 * knee); + } + else// Above knee + { + aboveGain = aThresh[j] + (yDbfs - aThresh[j]) * aRatio[j]; + } + if (aboveGain < yDbfs) + { + if (downward * depth <= 1) + { + aboveGain = linearInterpolate(yDbfs, aboveGain, downward * depth); + } + else + { + aboveGain = linearInterpolate(aboveGain, aThresh[j], downward * depth - 1); + } + } + + // Upward compression + if (yDbfs - bThresh[j] > knee)// Above knee + { + belowGain = yDbfs; + } + else if (bThresh[j] - yDbfs < knee)// Within knee + { + const float temp = bThresh[j] - yDbfs + knee; + belowGain = yDbfs + (1 - bRatio[j]) * temp * temp / (4 * knee); + } + else// Below knee + { + belowGain = bThresh[j] + (yDbfs - bThresh[j]) * bRatio[j]; + } + if (belowGain > yDbfs) + { + if (upward * depth <= 1) + { + belowGain = linearInterpolate(yDbfs, belowGain, upward * depth); + } + else + { + belowGain = linearInterpolate(belowGain, bThresh[j], upward * depth - 1); + } + } + + m_displayIn[j][i] = yDbfs; + m_gainResult[j][i] = (dbfsToAmp(aboveGain) / yAmp) * (dbfsToAmp(belowGain) / yAmp); + if (lowSideUpwardSuppress && m_gainResult[j][i] > 1 && j == 2 && i == 1) //undo upward compression if low side band + { + m_gainResult[j][i] = 1; + } + m_gainResult[j][i] = std::min(m_gainResult[j][i], rangeAmp); + m_displayOut[j][i] = ampToDbfs(std::max(LOMM_MIN_FLOOR, yAmp * m_gainResult[j][i])); + + // Apply the same gain reduction to both channels if stereo link is enabled. + if (stereoLink && i == 1) + { + if (m_gainResult[j][1] < m_gainResult[j][0]) + { + m_gainResult[j][0] = m_gainResult[j][1]; + m_displayOut[j][0] = m_displayIn[j][0] - (m_displayIn[j][1] - m_displayOut[j][1]); + } + else + { + m_gainResult[j][1] = m_gainResult[j][0]; + m_displayOut[j][1] = m_displayIn[j][1] - (m_displayIn[j][0] - m_displayOut[j][0]); + } + } + } + } + + for (int i = 0; i < 2; ++i)// Channels + { + for (int j = 0; j < 3; ++j)// Bands + { + if (lookaheadEnable) + { + float temp = bands[j][i]; + bands[j][i] = m_inLookBuf[j][i][m_lookWrite]; + m_inLookBuf[j][i][m_lookWrite] = temp; + bandsDry[j][i] = bands[j][i]; + } + else if (feedback) + { + bands[j][i] = bandsDry[j][i] * inBandVol[j] * inVol * balanceAmp[i]; + } + + // Apply gain reduction + bands[j][i] *= m_gainResult[j][i]; + + // Store for Feedback + m_prevOut[j][i] = bands[j][i]; + + bands[j][i] *= outBandVol[j]; + + bands[j][i] = linearInterpolate(bandsDry[j][i], bands[j][i], mix); + } + + s[i] = bands[0][i] + bands[1][i] + bands[2][i]; + + s[i] *= linearInterpolate(1.f, outVol, mix * (depthScaling ? depth : 1)); + } + + // Convert mid/side back to left/right. + // Note that the side channel was intentionally made to be 6 dB louder prior to compression. + if (midside) + { + float tempS0 = s[0]; + s[0] = s[0] + (s[1] * 0.5f); + s[1] = tempS0 - (s[1] * 0.5f); + } + + if (--m_lookWrite < 0) { m_lookWrite = m_lookBufLength - 1; } + + buf[f][0] = d * buf[f][0] + w * s[0]; + buf[f][1] = d * buf[f][1] + w * s[1]; + outSum += buf[f][0] + buf[f][1]; + } + + checkGate(outSum / frames); + return isRunning(); +} + +extern "C" +{ + // necessary for getting instance out of shared lib + PLUGIN_EXPORT Plugin * lmms_plugin_main(Model* parent, void* data) + { + return new LOMMEffect(parent, static_cast(data)); + } +} + +} // namespace lmms diff --git a/plugins/LOMM/LOMM.h b/plugins/LOMM/LOMM.h new file mode 100644 index 000000000..039f80b6a --- /dev/null +++ b/plugins/LOMM/LOMM.h @@ -0,0 +1,106 @@ +/* + * LOMM.h + * + * Copyright (c) 2023 Lost Robot + * + * This file is part of LMMS - https://lmms.io + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + + +#ifndef LMMS_LOMM_H +#define LMMS_LOMM_H + +#include "LOMMControls.h" +#include "Effect.h" + +#include "BasicFilters.h" +#include "lmms_math.h" + +namespace lmms +{ + +constexpr inline float LOMM_MIN_FLOOR = 0.00012589;// -72 dBFS +constexpr inline float LOMM_MAX_LOOKAHEAD = 20.f; +constexpr inline float LOMM_AUTO_TIME_ADJUST = 5.f; + +class LOMMEffect : public Effect +{ + Q_OBJECT +public: + LOMMEffect(Model* parent, const Descriptor::SubPluginFeatures::Key* key); + ~LOMMEffect() override = default; + bool processAudioBuffer(sampleFrame* buf, const fpp_t frames) override; + + EffectControls* controls() override + { + return &m_lommControls; + } + + void clearFilterHistories(); + + inline float msToCoeff(float ms) + { + return (ms == 0) ? 0 : exp(m_coeffPrecalc / ms); + } + +private slots: + void changeSampleRate(); + +private: + LOMMControls m_lommControls; + + float m_sampleRate; + + StereoLinkwitzRiley m_lp1; + StereoLinkwitzRiley m_lp2; + + StereoLinkwitzRiley m_hp1; + StereoLinkwitzRiley m_hp2; + + bool m_needsUpdate; + float m_coeffPrecalc; + + std::array, 3> m_yL; + std::array, 3> m_rms; + std::array, 3> m_gainResult; + + std::array, 3> m_displayIn; + std::array, 3> m_displayOut; + + std::array m_crestPeakVal; + std::array m_crestRmsVal; + std::array m_crestFactorVal; + float m_crestTimeConst = 0.0f; + + std::array, 3> m_prevOut; + + std::array, 2>, 3> m_inLookBuf; + std::array, 2>, 3> m_scLookBuf; + + int m_lookWrite = 0; + int m_lookBufLength = 0; + + friend class LOMMControls; + friend class gui::LOMMControlDialog; +}; + + +} // namespace lmms + +#endif // LMMS_LOMM_H diff --git a/plugins/LOMM/LOMMControlDialog.cpp b/plugins/LOMM/LOMMControlDialog.cpp new file mode 100644 index 000000000..e53987a05 --- /dev/null +++ b/plugins/LOMM/LOMMControlDialog.cpp @@ -0,0 +1,275 @@ +/* + * LOMMControlDialog.cpp + * + * Copyright (c) 2023 Lost Robot + * + * This file is part of LMMS - https://lmms.io + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + + +#include "LOMM.h" +#include "LOMMControlDialog.h" +#include "LOMMControls.h" + + +namespace lmms::gui +{ + +LOMMControlDialog::LOMMControlDialog(LOMMControls* controls) : + EffectControlDialog(controls), + m_controls(controls) +{ + setAutoFillBackground(true); + QPalette pal; + pal.setBrush(backgroundRole(), PLUGIN_NAME::getIconPixmap("artwork")); + setPalette(pal); + setFixedSize(400, 256); + + createKnob(KnobType::Bright26, this, 10, 4, &controls->m_depthModel, tr("Depth:"), "", tr("Compression amount for all bands")); + createKnob(KnobType::Bright26, this, 10, 41, &controls->m_timeModel, tr("Time:"), "", tr("Attack/release scaling for all bands")); + createKnob(KnobType::Bright26, this, 10, 220, &controls->m_inVolModel, tr("Input Volume:"), " dB", tr("Input volume")); + createKnob(KnobType::Bright26, this, 363, 220, &controls->m_outVolModel, tr("Output Volume:"), " dB", tr("Output volume")); + createKnob(KnobType::Bright26, this, 10, 179, &controls->m_upwardModel, tr("Upward Depth:"), "", tr("Upward compression amount for all bands")); + createKnob(KnobType::Bright26, this, 363, 179, &controls->m_downwardModel, tr("Downward Depth:"), "", tr("Downward compression amount for all bands")); + + createLcdFloatSpinBox(5, 2, "11green", tr("High/Mid Crossover"), this, 352, 76, &controls->m_split1Model, tr("High/Mid Crossover")); + createLcdFloatSpinBox(5, 2, "11green", tr("Mid/Low Crossover"), this, 352, 156, &controls->m_split2Model, tr("Mid/Low Crossover")); + + createPixmapButton(tr("High/mid band split"), this, 369, 104, &controls->m_split1EnabledModel, "crossover_led_green", "crossover_led_off", tr("High/mid band split")); + createPixmapButton(tr("Mid/low band split"), this, 369, 126, &controls->m_split2EnabledModel, "crossover_led_green", "crossover_led_off", tr("Mid/low band split")); + + createPixmapButton(tr("Enable High Band"), this, 143, 66, &controls->m_band1EnabledModel, "high_band_active", "high_band_inactive", tr("Enable High Band")); + createPixmapButton(tr("Enable Mid Band"), this, 143, 146, &controls->m_band2EnabledModel, "mid_band_active", "mid_band_inactive", tr("Enable Mid Band")); + createPixmapButton(tr("Enable Low Band"), this, 143, 226, &controls->m_band3EnabledModel, "low_band_active", "low_band_inactive", tr("Enable Low Band")); + + createKnob(KnobType::Bright26, this, 53, 43, &controls->m_inHighModel, tr("High Input Volume:"), " dB", tr("Input volume for high band")); + createKnob(KnobType::Bright26, this, 53, 123, &controls->m_inMidModel, tr("Mid Input Volume:"), " dB", tr("Input volume for mid band")); + createKnob(KnobType::Bright26, this, 53, 203, &controls->m_inLowModel, tr("Low Input Volume:"), " dB", tr("Input volume for low band")); + createKnob(KnobType::Bright26, this, 320, 43, &controls->m_outHighModel, tr("High Output Volume:"), " dB", tr("Output volume for high band")); + createKnob(KnobType::Bright26, this, 320, 123, &controls->m_outMidModel, tr("Mid Output Volume:"), " dB", tr("Output volume for mid band")); + createKnob(KnobType::Bright26, this, 320, 203, &controls->m_outLowModel, tr("Low Output Volume:"), " dB", tr("Output volume for low band")); + + createLcdFloatSpinBox(3, 3, "11green", tr("Above Threshold High"), this, 300, 13, &controls->m_aThreshHModel, tr("Downward compression threshold for high band")); + createLcdFloatSpinBox(3, 3, "11green", tr("Above Threshold Mid"), this, 300, 93, &controls->m_aThreshMModel, tr("Downward compression threshold for mid band")); + createLcdFloatSpinBox(3, 3, "11green", tr("Above Threshold Low"), this, 300, 173, &controls->m_aThreshLModel, tr("Downward compression threshold for low band")); + createLcdFloatSpinBox(2, 2, "11green", tr("Above Ratio High"), this, 284, 44, &controls->m_aRatioHModel, tr("Downward compression ratio for high band")); + createLcdFloatSpinBox(2, 2, "11green", tr("Above Ratio Mid"), this, 284, 124, &controls->m_aRatioMModel, tr("Downward compression ratio for mid band")); + createLcdFloatSpinBox(2, 2, "11green", tr("Above Ratio Low"), this, 284, 204, &controls->m_aRatioLModel, tr("Downward compression ratio for low band")); + + createLcdFloatSpinBox(3, 3, "11green", tr("Below Threshold High"), this, 59, 13, &controls->m_bThreshHModel, tr("Upward compression threshold for high band")); + createLcdFloatSpinBox(3, 3, "11green", tr("Below Threshold Mid"), this, 59, 93, &controls->m_bThreshMModel, tr("Upward compression threshold for mid band")); + createLcdFloatSpinBox(3, 3, "11green", tr("Below Threshold Low"), this, 59, 173, &controls->m_bThreshLModel, tr("Upward compression threshold for low band")); + createLcdFloatSpinBox(2, 2, "11green", tr("Below Ratio High"), this, 87, 44, &controls->m_bRatioHModel, tr("Upward compression ratio for high band")); + createLcdFloatSpinBox(2, 2, "11green", tr("Below Ratio Mid"), this, 87, 124, &controls->m_bRatioMModel, tr("Upward compression ratio for mid band")); + createLcdFloatSpinBox(2, 2, "11green", tr("Below Ratio Low"), this, 87, 204, &controls->m_bRatioLModel, tr("Upward compression ratio for low band")); + + createKnob(KnobType::Small17, this, 120, 61, &controls->m_atkHModel, tr("Attack High:"), " ms", tr("Attack time for high band")); + createKnob(KnobType::Small17, this, 120, 141, &controls->m_atkMModel, tr("Attack Mid:"), " ms", tr("Attack time for mid band")); + createKnob(KnobType::Small17, this, 120, 221, &controls->m_atkLModel, tr("Attack Low:"), " ms", tr("Attack time for low band")); + createKnob(KnobType::Small17, this, 261, 61, &controls->m_relHModel, tr("Release High:"), " ms", tr("Release time for high band")); + createKnob(KnobType::Small17, this, 261, 141, &controls->m_relMModel, tr("Release Mid:"), " ms", tr("Release time for mid band")); + createKnob(KnobType::Small17, this, 261, 221, &controls->m_relLModel, tr("Release Low:"), " ms", tr("Release time for low band")); + + createKnob(KnobType::Small17, this, 380, 42, &controls->m_rmsTimeModel, tr("RMS Time:"), " ms", tr("RMS size for sidechain signal (set to 0 for Peak mode)")); + createKnob(KnobType::Small17, this, 356, 42, &controls->m_kneeModel, tr("Knee:"), " dB", tr("Knee size for all compressors")); + createKnob(KnobType::Small17, this, 24, 146, &controls->m_rangeModel, tr("Range:"), " dB", tr("Maximum gain increase for all bands")); + createKnob(KnobType::Small17, this, 13, 114, &controls->m_balanceModel, tr("Balance:"), " dB", tr("Bias input volume towards one channel")); + + createPixmapButton(tr("Scale output volume with Depth"), this, 51, 0, &controls->m_depthScalingModel, "depthScaling_active", "depthScaling_inactive", + tr("Scale output volume with Depth parameter")); + createPixmapButton(tr("Stereo Link"), this, 52, 237, &controls->m_stereoLinkModel, "stereoLink_active", "stereoLink_inactive", + tr("Apply same gain change to both channels")); + + createKnob(KnobType::Small17, this, 24, 80, &controls->m_autoTimeModel, tr("Auto Time:"), "", tr("Speed up attack and release times when transients occur")); + createKnob(KnobType::Bright26, this, 363, 4, &controls->m_mixModel, tr("Mix:"), "", tr("Wet/Dry of all bands")); + + m_feedbackButton = createPixmapButton(tr("Feedback"), this, 317, 238, &controls->m_feedbackModel, "feedback_active", "feedback_inactive", + tr("Use output as sidechain signal instead of input")); + createPixmapButton(tr("Mid/Side"), this, 285, 238, &controls->m_midsideModel, "midside_active", "midside_inactive", tr("Compress mid/side channels instead of left/right")); + m_lowSideUpwardSuppressButton = createPixmapButton(tr("Suppress upward compression for side band"), this, 106, 180, &controls->m_lowSideUpwardSuppressModel, + "lowSideUpwardSuppress_active", "lowSideUpwardSuppress_inactive", tr("Suppress upward compression for side band")); + createPixmapButton(tr("Lookahead"), this, 147, 0, &controls->m_lookaheadEnableModel, "lookahead_active", "lookahead_inactive", + tr(("Enable lookahead with fixed " + std::to_string(int(LOMM_MAX_LOOKAHEAD)) + " ms latency").c_str())); + createLcdFloatSpinBox(2, 2, "11green", tr("Lookahead"), this, 214, 2, &controls->m_lookaheadModel, tr("Lookahead length")); + + PixmapButton* initButton = createPixmapButton(tr("Clear all parameters"), this, 84, 237, nullptr, "init_active", "init_inactive", tr("Clear all parameters")); + + connect(initButton, SIGNAL(clicked()), m_controls, SLOT(resetAllParameters())); + connect(&controls->m_lookaheadEnableModel, SIGNAL(dataChanged()), this, SLOT(updateFeedbackVisibility())); + connect(&controls->m_midsideModel, SIGNAL(dataChanged()), this, SLOT(updateLowSideUpwardSuppressVisibility())); + connect(getGUI()->mainWindow(), SIGNAL(periodicUpdate()), this, SLOT(updateDisplay())); + + emit updateFeedbackVisibility(); + emit updateLowSideUpwardSuppressVisibility(); +} + +void LOMMControlDialog::updateFeedbackVisibility() +{ + m_feedbackButton->setVisible(!m_controls->m_lookaheadEnableModel.value()); +} + +void LOMMControlDialog::updateLowSideUpwardSuppressVisibility() +{ + m_lowSideUpwardSuppressButton->setVisible(m_controls->m_midsideModel.value()); +} + +void LOMMControlDialog::updateDisplay() +{ + update(); +} + +void LOMMControlDialog::paintEvent(QPaintEvent *event) +{ + if (!isVisible()) { return; } + + QPainter p; + p.begin(this); + + // Draw threshold lines + QColor aColor(255, 255, 0, 31); + QColor bColor(255, 0, 0, 31); + QPen aPen(QColor(255, 255, 0, 255), 1); + QPen bPen(QColor(255, 0, 0, 255), 1); + int thresholdsX[] = {dbfsToX(m_controls->m_aThreshHModel.value()), + dbfsToX(m_controls->m_aThreshMModel.value()), + dbfsToX(m_controls->m_aThreshLModel.value()), + dbfsToX(m_controls->m_bThreshHModel.value()), + dbfsToX(m_controls->m_bThreshMModel.value()), + dbfsToX(m_controls->m_bThreshLModel.value())}; + for (int i = 0; i < 3; ++i) { + p.setPen(aPen); + p.fillRect(thresholdsX[i], LOMM_DISPLAY_Y[2 * i], LOMM_DISPLAY_X + LOMM_DISPLAY_WIDTH - thresholdsX[i], LOMM_DISPLAY_Y[2 * i + 1] + LOMM_DISPLAY_HEIGHT - LOMM_DISPLAY_Y[2 * i], aColor); + p.drawLine(thresholdsX[i], LOMM_DISPLAY_Y[2 * i], thresholdsX[i], LOMM_DISPLAY_Y[2 * i + 1] + LOMM_DISPLAY_HEIGHT); + + p.setPen(bPen); + p.fillRect(LOMM_DISPLAY_X, LOMM_DISPLAY_Y[2 * i], thresholdsX[i + 3] - LOMM_DISPLAY_X, LOMM_DISPLAY_Y[2 * i + 1] + LOMM_DISPLAY_HEIGHT - LOMM_DISPLAY_Y[2 * i], bColor); + p.drawLine(thresholdsX[i + 3], LOMM_DISPLAY_Y[2 * i], thresholdsX[i + 3], LOMM_DISPLAY_Y[2 * i + 1] + LOMM_DISPLAY_HEIGHT); + } + + QPen inputPen(QColor(200, 200, 200, 80), 1); + QPen outputPen(QColor(255, 255, 255, 255), 1); + for (int i = 0; i < 3; ++i) { + // Draw input lines + p.setPen(inputPen); + int inL = dbfsToX(m_controls->m_effect->m_displayIn[i][0]); + p.drawLine(inL, LOMM_DISPLAY_Y[2 * i] + 4, inL, LOMM_DISPLAY_Y[2 * i] + LOMM_DISPLAY_HEIGHT); + int inR = dbfsToX(m_controls->m_effect->m_displayIn[i][1]); + p.drawLine(inR, LOMM_DISPLAY_Y[2 * i + 1], inR, LOMM_DISPLAY_Y[2 * i + 1] + LOMM_DISPLAY_HEIGHT - 4); + + // Draw output lines + p.setPen(outputPen); + int outL = dbfsToX(m_controls->m_effect->m_displayOut[i][0]); + p.drawLine(outL, LOMM_DISPLAY_Y[2 * i], outL, LOMM_DISPLAY_Y[2 * i] + LOMM_DISPLAY_HEIGHT); + int outR = dbfsToX(m_controls->m_effect->m_displayOut[i][1]); + p.drawLine(outR, LOMM_DISPLAY_Y[2 * i + 1], outR, LOMM_DISPLAY_Y[2 * i + 1] + LOMM_DISPLAY_HEIGHT); + } + + p.end(); +} + +int LOMMControlDialog::dbfsToX(float dbfs) +{ + float returnX = (dbfs - LOMM_DISPLAY_MIN) / (LOMM_DISPLAY_MAX - LOMM_DISPLAY_MIN); + returnX = qBound(LOMM_DISPLAY_X, LOMM_DISPLAY_X + returnX * LOMM_DISPLAY_WIDTH, LOMM_DISPLAY_X + LOMM_DISPLAY_WIDTH); + return returnX; +} + +float LOMMControlDialog::xToDbfs(int x) +{ + float xNorm = static_cast(x - LOMM_DISPLAY_X) / LOMM_DISPLAY_WIDTH; + float dbfs = xNorm * (LOMM_DISPLAY_MAX - LOMM_DISPLAY_MIN) + LOMM_DISPLAY_MIN; + return dbfs; +} + +void LOMMControlDialog::mousePressEvent(QMouseEvent* event) +{ + if ((event->button() == Qt::LeftButton || event->button() == Qt::MiddleButton) && !(event->modifiers() & (Qt::ControlModifier | Qt::ShiftModifier))) + { + const QPoint& p = event->pos(); + + if (LOMM_DISPLAY_X - 10 <= p.x() && p.x() <= LOMM_DISPLAY_X + LOMM_DISPLAY_WIDTH + 10) + { + FloatModel* aThresh[] = {&m_controls->m_aThreshHModel, &m_controls->m_aThreshMModel, &m_controls->m_aThreshLModel}; + FloatModel* bThresh[] = {&m_controls->m_bThreshHModel, &m_controls->m_bThreshMModel, &m_controls->m_bThreshLModel}; + + for (int i = 0; i < 3; ++i) + { + if (LOMM_DISPLAY_Y[i * 2] <= p.y() && p.y() <= LOMM_DISPLAY_Y[i * 2 + 1] + LOMM_DISPLAY_HEIGHT) + { + int behavior = (p.x() < dbfsToX(bThresh[i]->value())) ? 0 : (p.x() > dbfsToX(aThresh[i]->value())) ? 1 : 2; + if (event->button() == Qt::MiddleButton) + { + if (behavior == 0 || behavior == 2) {bThresh[i]->reset();} + if (behavior == 1 || behavior == 2) {aThresh[i]->reset();} + return; + } + + m_bandDrag = i; + m_lastMousePos = p; + m_buttonPressed = true; + + m_dragType = behavior; + return; + } + } + } + } +} + +void LOMMControlDialog::mouseMoveEvent(QMouseEvent * event) +{ + if (m_buttonPressed && event->pos() != m_lastMousePos) + { + const float distance = event->pos().x() - m_lastMousePos.x(); + float dbDistance = distance * LOMM_DISPLAY_DB_PER_PIXEL; + m_lastMousePos = event->pos(); + + FloatModel* aModel[] = {&m_controls->m_aThreshHModel, &m_controls->m_aThreshMModel, &m_controls->m_aThreshLModel}; + FloatModel* bModel[] = {&m_controls->m_bThreshHModel, &m_controls->m_bThreshMModel, &m_controls->m_bThreshLModel}; + + float bVal = bModel[m_bandDrag]->value(); + float aVal = aModel[m_bandDrag]->value(); + if (m_dragType == 0) + { + bModel[m_bandDrag]->setValue(bVal + dbDistance); + } + else if (m_dragType == 1) + { + aModel[m_bandDrag]->setValue(aVal + dbDistance); + } + else + { + dbDistance = qBound(bModel[m_bandDrag]->minValue(), bVal + dbDistance, bModel[m_bandDrag]->maxValue()) - bVal; + dbDistance = qBound(aModel[m_bandDrag]->minValue(), aVal + dbDistance, aModel[m_bandDrag]->maxValue()) - aVal; + bModel[m_bandDrag]->setValue(bVal + dbDistance); + aModel[m_bandDrag]->setValue(aVal + dbDistance); + } + } +} + +void LOMMControlDialog::mouseReleaseEvent(QMouseEvent* event) +{ + if (event && event->button() == Qt::LeftButton) + { + m_buttonPressed = false; + } +} + + +} // namespace lmms::gui diff --git a/plugins/LOMM/LOMMControlDialog.h b/plugins/LOMM/LOMMControlDialog.h new file mode 100644 index 000000000..bf7e67c4c --- /dev/null +++ b/plugins/LOMM/LOMMControlDialog.h @@ -0,0 +1,129 @@ +/* + * LOMMControlDialog.h + * + * Copyright (c) 2023 Lost Robot + * + * This file is part of LMMS - https://lmms.io + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + +#ifndef LMMS_GUI_LOMM_CONTROL_DIALOG_H +#define LMMS_GUI_LOMM_CONTROL_DIALOG_H + +#include "EffectControlDialog.h" + +#include +#include + +#include "embed.h" +#include "GuiApplication.h" +#include "Knob.h" +#include "LcdFloatSpinBox.h" +#include "LcdSpinBox.h" +#include "LedCheckBox.h" +#include "MainWindow.h" +#include "PixmapButton.h" + +namespace lmms +{ + +inline constexpr float LOMM_DISPLAY_MIN = -72; +inline constexpr float LOMM_DISPLAY_MAX = 0; +inline constexpr float LOMM_DISPLAY_X = 125; +inline constexpr float LOMM_DISPLAY_Y[6] = {24, 41, 106, 123, 186, 203}; +inline constexpr float LOMM_DISPLAY_WIDTH = 150; +inline constexpr float LOMM_DISPLAY_HEIGHT = 13; +inline constexpr float LOMM_DISPLAY_DB_PER_PIXEL = (LOMM_DISPLAY_MAX - LOMM_DISPLAY_MIN) / LOMM_DISPLAY_WIDTH; + +class LOMMControls; + + +namespace gui +{ + +class LOMMControlDialog : public EffectControlDialog +{ + Q_OBJECT +public: + LOMMControlDialog(LOMMControls* controls); + ~LOMMControlDialog() override = default; + + int dbfsToX(float dbfs); + float xToDbfs(int x); + + Knob* createKnob(KnobType knobType, QWidget* parent, int x, int y, FloatModel* model, const QString& hintText, const QString& unit, const QString& toolTip) + { + Knob* knob = new Knob(knobType, parent); + knob->move(x, y); + knob->setModel(model); + knob->setHintText(hintText, unit); + knob->setToolTip(toolTip); + return knob; + } + + LcdFloatSpinBox* createLcdFloatSpinBox(int integerDigits, int decimalDigits, const QString& color, const QString& unit, QWidget* parent, int x, int y, FloatModel* model, const QString& toolTip) + { + LcdFloatSpinBox* spinBox = new LcdFloatSpinBox(integerDigits, decimalDigits, color, unit, parent); + spinBox->move(x, y); + spinBox->setModel(model); + spinBox->setSeamless(true, true); + spinBox->setToolTip(toolTip); + return spinBox; + } + + PixmapButton* createPixmapButton(const QString& text, QWidget* parent, int x, int y, BoolModel* model, const QString& activeIcon, const QString& inactiveIcon, const QString& tooltip) + { + PixmapButton* button = new PixmapButton(parent, text); + button->move(x, y); + button->setCheckable(true); + if (model) { button->setModel(model); } + button->setActiveGraphic(PLUGIN_NAME::getIconPixmap(activeIcon)); + button->setInactiveGraphic(PLUGIN_NAME::getIconPixmap(inactiveIcon)); + button->setToolTip(tooltip); + return button; + } + +protected: + void paintEvent(QPaintEvent *event) override; + void mousePressEvent(QMouseEvent* event) override; + void mouseReleaseEvent(QMouseEvent* event) override; + void mouseMoveEvent(QMouseEvent* event) override; + +private: + LOMMControls* m_controls; + + QPoint m_lastMousePos; + bool m_buttonPressed = false; + int m_bandDrag = 0; + int m_dragType = -1; + + PixmapButton* m_feedbackButton; + PixmapButton* m_lowSideUpwardSuppressButton; + +private slots: + void updateFeedbackVisibility(); + void updateLowSideUpwardSuppressVisibility(); + void updateDisplay(); +}; + + +} // namespace gui + +} // namespace lmms + +#endif // LMMS_GUI_LOMM_CONTROL_DIALOG_H diff --git a/plugins/LOMM/LOMMControls.cpp b/plugins/LOMM/LOMMControls.cpp new file mode 100644 index 000000000..d695cf483 --- /dev/null +++ b/plugins/LOMM/LOMMControls.cpp @@ -0,0 +1,277 @@ +/* + * LOMMControls.cpp + * + * Copyright (c) 2023 Lost Robot + * + * This file is part of LMMS - https://lmms.io + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + + +#include "LOMMControls.h" +#include "LOMM.h" + +#include +#include + +namespace lmms +{ + +LOMMControls::LOMMControls(LOMMEffect* effect) : + EffectControls(effect), + m_effect(effect), + m_depthModel(0.4, 0, 1, 0.00001, this, tr("Depth")), + m_timeModel(1, 0, 10, 0.00001, this, tr("Time")), + m_inVolModel(0, -48, 48, 0.00001, this, tr("Input Volume")), + m_outVolModel(8, -48, 48, 0.00001, this, tr("Output Volume")), + m_upwardModel(1, 0, 2, 0.00001, this, tr("Upward Depth")), + m_downwardModel(1, 0, 2, 0.00001, this, tr("Downward Depth")), + m_split1Model(2500, 20, 20000, 0.01, this, tr("High/Mid Split")), + m_split2Model(88.3, 20, 20000, 0.01, this, tr("Mid/Low Split")), + m_split1EnabledModel(true, this, tr("Enable High/Mid Split")), + m_split2EnabledModel(true, this, tr("Enable Mid/Low Split")), + m_band1EnabledModel(true, this, tr("Enable High Band")), + m_band2EnabledModel(true, this, tr("Enable Mid Band")), + m_band3EnabledModel(true, this, tr("Enable Low Band")), + m_inHighModel(0, -48, 48, 0.00001, this, tr("High Input Volume")), + m_inMidModel(0, -48, 48, 0.00001, this, tr("Mid Input Volume")), + m_inLowModel(0, -48, 48, 0.00001, this, tr("Low Input Volume")), + m_outHighModel(4.6, -48, 48, 0.00001, this, tr("High Output Volume")), + m_outMidModel(0.0, -48, 48, 0.00001, this, tr("Mid Output Volume")), + m_outLowModel(4.6, -48, 48, 0.00001, this, tr("Low Output Volume")), + m_aThreshHModel(-30.3, LOMM_DISPLAY_MIN, LOMM_DISPLAY_MAX, 0.001, this, tr("Above Threshold High")), + m_aThreshMModel(-25.0, LOMM_DISPLAY_MIN, LOMM_DISPLAY_MAX, 0.001, this, tr("Above Threshold Mid")), + m_aThreshLModel(-28.6, LOMM_DISPLAY_MIN, LOMM_DISPLAY_MAX, 0.001, this, tr("Above Threshold Low")), + m_aRatioHModel(99.99, 1, 99.99, 0.01, this, tr("Above Ratio High")), + m_aRatioMModel(66.7, 1, 99.99, 0.01, this, tr("Above Ratio Mid")), + m_aRatioLModel(66.7, 1, 99.99, 0.01, this, tr("Above Ratio Low")), + m_bThreshHModel(-35.6, LOMM_DISPLAY_MIN, LOMM_DISPLAY_MAX, 0.001, this, tr("Below Threshold High")), + m_bThreshMModel(-36.6, LOMM_DISPLAY_MIN, LOMM_DISPLAY_MAX, 0.001, this, tr("Below Threshold Mid")), + m_bThreshLModel(-35.6, LOMM_DISPLAY_MIN, LOMM_DISPLAY_MAX, 0.001, this, tr("Below Threshold Low")), + m_bRatioHModel(4.17, 1, 99.99, 0.01, this, tr("Below Ratio High")), + m_bRatioMModel(4.17, 1, 99.99, 0.01, this, tr("Below Ratio Mid")), + m_bRatioLModel(4.17, 1, 99.99, 0.01, this, tr("Below Ratio Low")), + m_atkHModel(13.5, 0, 1000, 0.001, this, tr("Attack High")), + m_atkMModel(22.4, 0, 1000, 0.001, this, tr("Attack Mid")), + m_atkLModel(47.8, 0, 1000, 0.001, this, tr("Attack Low")), + m_relHModel(132, 0, 1000, 0.001, this, tr("Release High")), + m_relMModel(282, 0, 1000, 0.001, this, tr("Release Mid")), + m_relLModel(282, 0, 1000, 0.001, this, tr("Release Low")), + m_rmsTimeModel(10, 0, 500, 0.001, this, tr("RMS Time")), + m_kneeModel(6, 0, 36, 0.00001, this, tr("Knee")), + m_rangeModel(36, 0, 96, 0.00001, this, tr("Range")), + m_balanceModel(0, -18, 18, 0.00001, this, tr("Balance")), + m_depthScalingModel(true, this, tr("Scale output volume with Depth")), + m_stereoLinkModel(false, this, tr("Stereo Link")), + m_autoTimeModel(0, 0, 1, 0.00001, this, tr("Auto Time")), + m_mixModel(1, 0, 1, 0.00001, this, tr("Mix")), + m_feedbackModel(false, this, tr("Feedback")), + m_midsideModel(false, this, tr("Mid/Side")), + m_lookaheadEnableModel(false, this, tr("Lookahead")), + m_lookaheadModel(0.f, 0.f, LOMM_MAX_LOOKAHEAD, 0.01, this, tr("Lookahead Length")), + m_lowSideUpwardSuppressModel(false, this, tr("Suppress upward compression for side band")) +{ + auto models = {&m_timeModel, &m_inVolModel, &m_outVolModel, &m_inHighModel, &m_inMidModel, + &m_inLowModel, &m_outHighModel, &m_outMidModel, &m_outLowModel, &m_aRatioHModel, + &m_aRatioMModel, &m_aRatioLModel, &m_bRatioHModel, &m_bRatioMModel, &m_bRatioLModel, + &m_atkHModel, &m_atkMModel, &m_atkLModel, &m_relHModel, &m_relMModel, &m_relLModel, + &m_rmsTimeModel, &m_balanceModel}; + for (auto model : models) { model->setScaleLogarithmic(true); } +} + + +void LOMMControls::resetAllParameters() +{ + int choice = QMessageBox::question(m_view, "Clear Plugin Settings", "Are you sure you want to clear all parameters?\n(This wipes LOMM to a clean slate, not the default preset.)", QMessageBox::Yes | QMessageBox::No); + if (choice != QMessageBox::Yes) { return; } + + // give the user a chance to beg LMMS for forgiveness + addJournalCheckPoint(); + + // This plugin's normal default values are fairly close to what they'd want in most applications. + // The Init button is there so the user can start from a clean slate instead. + // These are those values. + setInitAndReset(m_depthModel, 1); + setInitAndReset(m_timeModel, 1); + setInitAndReset(m_inVolModel, 0); + setInitAndReset(m_outVolModel, 0); + setInitAndReset(m_upwardModel, 1); + setInitAndReset(m_downwardModel, 1); + setInitAndReset(m_split1Model, 2500); + setInitAndReset(m_split2Model, 88); + setInitAndReset(m_split1EnabledModel, true); + setInitAndReset(m_split2EnabledModel, true); + setInitAndReset(m_band1EnabledModel, true); + setInitAndReset(m_band2EnabledModel, true); + setInitAndReset(m_band3EnabledModel, true); + setInitAndReset(m_inHighModel, 0); + setInitAndReset(m_inMidModel, 0); + setInitAndReset(m_inLowModel, 0); + setInitAndReset(m_outHighModel, 0); + setInitAndReset(m_outMidModel, 0); + setInitAndReset(m_outLowModel, 0); + setInitAndReset(m_aThreshHModel, m_aThreshHModel.maxValue()); + setInitAndReset(m_aThreshMModel, m_aThreshMModel.maxValue()); + setInitAndReset(m_aThreshLModel, m_aThreshLModel.maxValue()); + setInitAndReset(m_aRatioHModel, 1); + setInitAndReset(m_aRatioMModel, 1); + setInitAndReset(m_aRatioLModel, 1); + setInitAndReset(m_bThreshHModel, m_bThreshHModel.minValue()); + setInitAndReset(m_bThreshMModel, m_bThreshMModel.minValue()); + setInitAndReset(m_bThreshLModel, m_bThreshLModel.minValue()); + setInitAndReset(m_bRatioHModel, 1); + setInitAndReset(m_bRatioMModel, 1); + setInitAndReset(m_bRatioLModel, 1); + setInitAndReset(m_atkHModel, 13.5); + setInitAndReset(m_atkMModel, 22.4); + setInitAndReset(m_atkLModel, 47.8); + setInitAndReset(m_relHModel, 132); + setInitAndReset(m_relMModel, 282); + setInitAndReset(m_relLModel, 282); + setInitAndReset(m_rmsTimeModel, 10); + setInitAndReset(m_kneeModel, 6); + setInitAndReset(m_rangeModel, 36); + setInitAndReset(m_balanceModel, 0); + setInitAndReset(m_depthScalingModel, true); + setInitAndReset(m_stereoLinkModel, false); + setInitAndReset(m_autoTimeModel, 0); + setInitAndReset(m_mixModel, 1); + setInitAndReset(m_feedbackModel, false); + setInitAndReset(m_midsideModel, false); + setInitAndReset(m_lookaheadEnableModel, false); + setInitAndReset(m_lookaheadModel, 0.f); + setInitAndReset(m_lowSideUpwardSuppressModel, false); +} + + + +void LOMMControls::loadSettings(const QDomElement& parent) +{ + m_depthModel.loadSettings(parent, "depth"); + m_timeModel.loadSettings(parent, "time"); + m_inVolModel.loadSettings(parent, "inVol"); + m_outVolModel.loadSettings(parent, "outVol"); + m_upwardModel.loadSettings(parent, "upward"); + m_downwardModel.loadSettings(parent, "downward"); + m_split1Model.loadSettings(parent, "split1"); + m_split2Model.loadSettings(parent, "split2"); + m_split1EnabledModel.loadSettings(parent, "split1Enabled"); + m_split2EnabledModel.loadSettings(parent, "split2Enabled"); + m_band1EnabledModel.loadSettings(parent, "band1Enabled"); + m_band2EnabledModel.loadSettings(parent, "band2Enabled"); + m_band3EnabledModel.loadSettings(parent, "band3Enabled"); + m_inHighModel.loadSettings(parent, "inHigh"); + m_inMidModel.loadSettings(parent, "inMid"); + m_inLowModel.loadSettings(parent, "inLow"); + m_outHighModel.loadSettings(parent, "outHigh"); + m_outMidModel.loadSettings(parent, "outMid"); + m_outLowModel.loadSettings(parent, "outLow"); + m_aThreshHModel.loadSettings(parent, "aThreshH"); + m_aThreshMModel.loadSettings(parent, "aThreshM"); + m_aThreshLModel.loadSettings(parent, "aThreshL"); + m_aRatioHModel.loadSettings(parent, "aRatioH"); + m_aRatioMModel.loadSettings(parent, "aRatioM"); + m_aRatioLModel.loadSettings(parent, "aRatioL"); + m_bThreshHModel.loadSettings(parent, "bThreshH"); + m_bThreshMModel.loadSettings(parent, "bThreshM"); + m_bThreshLModel.loadSettings(parent, "bThreshL"); + m_bRatioHModel.loadSettings(parent, "bRatioH"); + m_bRatioMModel.loadSettings(parent, "bRatioM"); + m_bRatioLModel.loadSettings(parent, "bRatioL"); + m_atkHModel.loadSettings(parent, "atkH"); + m_atkMModel.loadSettings(parent, "atkM"); + m_atkLModel.loadSettings(parent, "atkL"); + m_relHModel.loadSettings(parent, "relH"); + m_relMModel.loadSettings(parent, "relM"); + m_relLModel.loadSettings(parent, "relL"); + m_rmsTimeModel.loadSettings(parent, "rmsTime"); + m_kneeModel.loadSettings(parent, "knee"); + m_rangeModel.loadSettings(parent, "range"); + m_balanceModel.loadSettings(parent, "balance"); + m_depthScalingModel.loadSettings(parent, "depthScaling"); + m_stereoLinkModel.loadSettings(parent, "stereoLink"); + m_autoTimeModel.loadSettings(parent, "autoTime"); + m_mixModel.loadSettings(parent, "mix"); + m_feedbackModel.loadSettings(parent, "feedback"); + m_midsideModel.loadSettings(parent, "midside"); + m_lookaheadEnableModel.loadSettings(parent, "lookaheadEnable"); + m_lookaheadModel.loadSettings(parent, "lookahead"); + m_lowSideUpwardSuppressModel.loadSettings(parent, "lowSideUpwardSuppress"); +} + + + + +void LOMMControls::saveSettings(QDomDocument& doc, QDomElement& parent) +{ + m_depthModel.saveSettings(doc, parent, "depth"); + m_timeModel.saveSettings(doc, parent, "time"); + m_inVolModel.saveSettings(doc, parent, "inVol"); + m_outVolModel.saveSettings(doc, parent, "outVol"); + m_upwardModel.saveSettings(doc, parent, "upward"); + m_downwardModel.saveSettings(doc, parent, "downward"); + m_split1Model.saveSettings(doc, parent, "split1"); + m_split2Model.saveSettings(doc, parent, "split2"); + m_split1EnabledModel.saveSettings(doc, parent, "split1Enabled"); + m_split2EnabledModel.saveSettings(doc, parent, "split2Enabled"); + m_band1EnabledModel.saveSettings(doc, parent, "band1Enabled"); + m_band2EnabledModel.saveSettings(doc, parent, "band2Enabled"); + m_band3EnabledModel.saveSettings(doc, parent, "band3Enabled"); + m_inHighModel.saveSettings(doc, parent, "inHigh"); + m_inMidModel.saveSettings(doc, parent, "inMid"); + m_inLowModel.saveSettings(doc, parent, "inLow"); + m_outHighModel.saveSettings(doc, parent, "outHigh"); + m_outMidModel.saveSettings(doc, parent, "outMid"); + m_outLowModel.saveSettings(doc, parent, "outLow"); + m_aThreshHModel.saveSettings(doc, parent, "aThreshH"); + m_aThreshMModel.saveSettings(doc, parent, "aThreshM"); + m_aThreshLModel.saveSettings(doc, parent, "aThreshL"); + m_aRatioHModel.saveSettings(doc, parent, "aRatioH"); + m_aRatioMModel.saveSettings(doc, parent, "aRatioM"); + m_aRatioLModel.saveSettings(doc, parent, "aRatioL"); + m_bThreshHModel.saveSettings(doc, parent, "bThreshH"); + m_bThreshMModel.saveSettings(doc, parent, "bThreshM"); + m_bThreshLModel.saveSettings(doc, parent, "bThreshL"); + m_bRatioHModel.saveSettings(doc, parent, "bRatioH"); + m_bRatioMModel.saveSettings(doc, parent, "bRatioM"); + m_bRatioLModel.saveSettings(doc, parent, "bRatioL"); + m_atkHModel.saveSettings(doc, parent, "atkH"); + m_atkMModel.saveSettings(doc, parent, "atkM"); + m_atkLModel.saveSettings(doc, parent, "atkL"); + m_relHModel.saveSettings(doc, parent, "relH"); + m_relMModel.saveSettings(doc, parent, "relM"); + m_relLModel.saveSettings(doc, parent, "relL"); + m_rmsTimeModel.saveSettings(doc, parent, "rmsTime"); + m_kneeModel.saveSettings(doc, parent, "knee"); + m_rangeModel.saveSettings(doc, parent, "range"); + m_balanceModel.saveSettings(doc, parent, "balance"); + m_depthScalingModel.saveSettings(doc, parent, "depthScaling"); + m_stereoLinkModel.saveSettings(doc, parent, "stereoLink"); + m_autoTimeModel.saveSettings(doc, parent, "autoTime"); + m_mixModel.saveSettings(doc, parent, "mix"); + m_feedbackModel.saveSettings(doc, parent, "feedback"); + m_midsideModel.saveSettings(doc, parent, "midside"); + m_lookaheadEnableModel.saveSettings(doc, parent, "lookaheadEnable"); + m_lookaheadModel.saveSettings(doc, parent, "lookahead"); + m_lowSideUpwardSuppressModel.saveSettings(doc, parent, "lowSideUpwardSuppress"); +} + + +} // namespace lmms + + diff --git a/plugins/LOMM/LOMMControls.h b/plugins/LOMM/LOMMControls.h new file mode 100644 index 000000000..3e5325426 --- /dev/null +++ b/plugins/LOMM/LOMMControls.h @@ -0,0 +1,136 @@ +/* + * LOMMControls.h + * + * Copyright (c) 2023 Lost Robot + * + * This file is part of LMMS - https://lmms.io + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + +#ifndef LMMS_LOMM_CONTROLS_H +#define LMMS_LOMM_CONTROLS_H + +#include "LOMMControlDialog.h" +#include "EffectControls.h" + +namespace lmms +{ +class LOMMEffect; + +namespace gui +{ +class LOMMControlDialog; +} + +class LOMMControls : public EffectControls +{ + Q_OBJECT +public: + LOMMControls(LOMMEffect* effect); + ~LOMMControls() override = default; + + void saveSettings(QDomDocument & doc, QDomElement & parent) override; + void loadSettings(const QDomElement & parent) override; + inline QString nodeName() const override + { + return "LOMMControls"; + } + + int controlCount() override + { + return 49; + } + + gui::EffectControlDialog* createView() override + { + m_view = new gui::LOMMControlDialog(this); + return m_view; + } + + template + void setInitAndReset(AutomatableModel& model, T initValue) + { + model.setInitValue(initValue); + model.reset(); + } + +public slots: + void resetAllParameters(); + +private: + LOMMEffect* m_effect; + gui::LOMMControlDialog* m_view; + + FloatModel m_depthModel; + FloatModel m_timeModel; + FloatModel m_inVolModel; + FloatModel m_outVolModel; + FloatModel m_upwardModel; + FloatModel m_downwardModel; + FloatModel m_split1Model; + FloatModel m_split2Model; + BoolModel m_split1EnabledModel; + BoolModel m_split2EnabledModel; + BoolModel m_band1EnabledModel; + BoolModel m_band2EnabledModel; + BoolModel m_band3EnabledModel; + FloatModel m_inHighModel; + FloatModel m_inMidModel; + FloatModel m_inLowModel; + FloatModel m_outHighModel; + FloatModel m_outMidModel; + FloatModel m_outLowModel; + FloatModel m_aThreshHModel; + FloatModel m_aThreshMModel; + FloatModel m_aThreshLModel; + FloatModel m_aRatioHModel; + FloatModel m_aRatioMModel; + FloatModel m_aRatioLModel; + FloatModel m_bThreshHModel; + FloatModel m_bThreshMModel; + FloatModel m_bThreshLModel; + FloatModel m_bRatioHModel; + FloatModel m_bRatioMModel; + FloatModel m_bRatioLModel; + FloatModel m_atkHModel; + FloatModel m_atkMModel; + FloatModel m_atkLModel; + FloatModel m_relHModel; + FloatModel m_relMModel; + FloatModel m_relLModel; + FloatModel m_rmsTimeModel; + FloatModel m_kneeModel; + FloatModel m_rangeModel; + FloatModel m_balanceModel; + BoolModel m_depthScalingModel; + BoolModel m_stereoLinkModel; + FloatModel m_autoTimeModel; + FloatModel m_mixModel; + BoolModel m_feedbackModel; + BoolModel m_midsideModel; + BoolModel m_lookaheadEnableModel; + FloatModel m_lookaheadModel; + BoolModel m_lowSideUpwardSuppressModel; + + friend class gui::LOMMControlDialog; + friend class LOMMEffect; +}; + +} // namespace lmms + +#endif // LMMS_LOMM_CONTROLS_H diff --git a/plugins/LOMM/artwork.png b/plugins/LOMM/artwork.png new file mode 100644 index 0000000000000000000000000000000000000000..cfc65908ff17596ab9a64e15b8b255041299b6e8 GIT binary patch literal 70032 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

Mv;?M#zTV?^Kf$O8on#Sdn!)c7<+v{2US!r;ajG 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

y zZ{9_%%BN>2DTX7@A2Y7OI?=55MafWt>Zr?L%FDEnsaa-L+Fe9w%Lu=t3mx`+3k zp$yy4xZqYL%sXf@e?d@;0+b$7DCY#3nkZ(@Z%PD$k|2pQ9~GXfSQTy)%vv~l+h_Rp z_n>im4|be;5LO&#kbFQN5ei9cmfMc65Fq{vpQl>h8_(mvjD419fmD1398&}L?4vjE5YW3V><7stoTwg1Ud zD7X0qe%;ya7`18Z1_R;TFES^G0C1n?_XFj%|2m*_nYDp0`BJiQS>i|E01B8oW^afuOt5lB|12Cd`@;=0a*{* z-%o#EKDj@QJ5RA3+FxUQUwXbZ)Nv|&Z@~W_&e;0+)B-WifSs8+TuGsUr`m@D;Z8=& z9wd=qwld`zNn*%(Xzpi{^TN_=*_$emZiS~G|10diFAnt%Gr5*mmr;T=4*9u=2s4XM zFEJZGD|Rtn#}lgn6GIMQ#X)TMqezQ~47PR_2P|4v>LsO&*!Jh%p?4Rx!VDbgP~a9k zs-$!E?8{Wakhy?ClJY?<)64Jvd0StuJX`qQQ*>K82t){PQPwkO0~R!0)HuAp(%$@5 z89iJ_6Pnskk4wm;U!k{UQD1Ps5CocE#K=pO>NEJ$gm`|F#H*67cEpTw}^$|*pbMEte2 z<==gGI1LQ_hBiLHWY0dPa`-{btxgC~%wKv9ri8yg9v<{s9QH>OBFg&gqr^``gX?=4 zUK#ccfA=aHi&4%<>)Mt}jHUC8``NgfabQKp)ZLDG$B@Ot5S_8p4|?SdFH}m=lfsGF z3Qnyr;PrV|p~fl@{woU(CSx-LlXoTUwZcoa1+X4y)s-_t08-CU@15)8&BSAlJE`Do zQM=S^u>DehrSa9s78Z9>+}G^9AVmbAiT`%Zc180itR|yu%=vN2QwqvLCTLL*V(OBr zSSv*4M6nbGyAUH`n2RHt125ib^JmN{@wep7p{!gMTN28a6sj^j`@w?!1gv zw-xzHzMr;+qJ`JT?%dl@G@F}1DpW%7*Hxzxbwyw%7>*DN;k(32xA{3&EFil0lYC21 zqj764{sv;qS16p6`Q?6uvyoAg1>?%5^nO}6uWq&!^n`dNxn{e`7W)$%A9SVD%hmIU zQ4fchU!TYSUn(PD&|PQ6jkUY6qoczK;ONK3NqfWf63AWhLK)FJqygs)#sI8L4hnHwMO=$>&)pLzT~@KDjkI&fa1_ zG%$(kMZCn5ilvdupUEa!NEK$xc6qI;BDiFxSd^kpCNz}G^%Zk@W_^A7^LyWL?#I_9 z|MtP!wkIlx;rCkFeAQD;4bvRRE6(}K;$n&mwXqQ3N6ru9YKbs^yxzP)Qd&()$P`@> z*~I#}4}O(F>fT-Obd;*tKPvAGvr1%(Df6i+Lx)G~%CKJ$_%pD_00`6}JQN0U^03vW zbC+x?T^B%iuy&--mpWZJ{`ladHBi){SR;OJX|9+qt9-_pM}*{Phud@4)F z&9?2aI0ks18!|Qeq0-+|Rje zkk*iSmV}<`xd)rOb`LQOGdaoV<^~mYou&l!y0J(Ia+n`RG#&^Lh7-7%CvLD^HU~r# zmUMJDK4OgufB)mo$jUKyaY_98@^A0xXuTV^_1p=}bGlezrJ|-@tuy7H_L?gGa|84# zgNxHXq(I}4)$_qd{y2Eocj{|+-SX%`m$wflt_N~k;F&sK4s;Mra0qeXV+-(bRbmy} z#``&jn}JBW6p(Nb?BN=2Z#)p%=Z)h0dj)7ayVKluD=4p%tTkR+@c#kBxEnkY($duE zDz0EuNd+c?Uq^n=IY zRWJlIIDi}6#bT}%k{7c0qWdXGTL|Ku!-#3HY;Khi?&xTOy*v7vUE*%f>Gp_@!G}bA z$0KRsH&Af!uCjX`g*$A7;g^ZC_`$PLNqkv0$GK6a1Q3*nlzg z&(_oBdQiNY`FgWe;GpuRRH_tSzkZa%Fbk`H@at>2It+J{8`PS;L!wJtPeXMJ z<&7l+XfkneaRdYhxje^%8&N23y8?0pA19~qgal(gKEAW5p7XhXFT2P+)0kTN?!FjH z@P;Tew|&sWJBh~znQ(hQI{Xn)fTJB~zMPJHGnyG73V106(nsWhOWi$wus|S#l0MD% z{6UZhlYW%6_S%`Xf1me_z|PJNWQELaEy?-#P&50i(u2HwU^2IyDwA&OcP zA@1q|=FINE>}4b&;Z@c1H{^k?FtXyllhq*c@}lY2^rGf{C4o8H-=TwQ7)q;L+V zfFTCw2Svfujck|clrf{rlt0V?CKujza5G9;6TLILwp163CJ!)t-2>)l`{yrx$UP%F zy&|Il3Gpb{+1F^0Ew)zf7|=PS4ItT3YfVBI^2|F8QaFPK}6ZEz2RJpftn8 zdAR;taoO&d*J(C(etA7xdhYIv6cFFtsJugS?ryY`l6sag?Cu*KgQt3}yI1B9!TEW$ z3BdH+8eaC&f5`c-T#auayK5{CbcKg!H1Jc+_t@~8v*ug2eLBwnp-|>rFzde%e`7-c z$ba2BeB!fW=_ipxx6f!F-tCZt5NKjDLyq^>j z@xjTgbGy&mYNIuL7!u*m$}H^H+x6Aq_UA66?~Zuh!DYY;AMkfvV*YFw@7))R&}O^- zq1Knfid#iMw9D;KPxGElCt2uh-2~X{%7{=uVM`CKE(xJJR>?~xvR{1j6W3MirNZry zUo?;_`jg9kE0v0eaVjoBh2M-)5DDp8-eXmuF(wH5neoa29cQgGD2P*5^R>LPG|n_3 z3$Qg+!pLs|p-GC=WV|3kYUhEvWjKFv!BLaOaLVFpMJ-^9R$i9+q&vq1}Qc0oXo7R9(`8 zW$cQHcAVkNxk>8@|XN=%JfXE`FAQFA;HcsRKHp?W-cO}m!}#4CCus7J!< zjN&AD@=jhZ=u7X*a*GzrTnK z9xIk_Blv~Ks~tOoVzOGCPIf?rZX@Dc&Z|9&-u)g514e++ew$I?3(6T5!M?ou{^cbh z%|YP9(*ql;e-X+skjE4hZtDGp!*~gbaa0mlvg~M&h$VqG46p2PTJ*OC-ksFx;3j{7 zHM%7O5&wOlUbCLNfD#G{8V8pUyk};I8+O6P(eV4sk0din0FQ`hYU!~5t^`Q0gO2Tg zdBM5%KmML9?#P|Y>p2#_h4z5p5Oy+37wqxPRxOtRst)0E+w+cnPBj?UBG(FhJ_s=Z zLsrmJZhJ&yS0yFqT}kZO*)=hsZ2|do0`IGpe-`eVLJCNR;IqP-&9UO2?Y0`LUrf{W zNyQ7 z;Ejb&z60P8FdZ$5+=Ew0~llD=0G7^$WtulApB zkE{jlZH_=%SE29u`uD`iD9ondQ7bUDMdG;`4TrUbb~NYTb7`7`$ubsXV?*<8ow2Lr zy}TBl&cx2O7-FTaw_k52bZbqgVJLDWi!QKe^bP-=O@@7p>cs-pol(W5zmO(L&~0U# zn5cr@sKA81Bq$FOrTCEBNJ>Sgy-20E$%c!d@R+d%%D-GPNC8{C<%rCfb zBZ3|l;)$87eeAr4?(3OQN!fy(TyDA(DNxM&^^+4BhRCsM{@s-(RBDFx^O)G^;Sl>S zKUwhC8_KmqcgZss2v!I=YzeT_(WV~-_FsZl)h5p+Zrc0er!r%dz{kBZ;lo^{fMzuc^tqRhfl`NC*ZP4|-Hkj;zIuCv?d?(PU31m0ANcUX#RR z)%v#5FwBvfgM4X!@%k=AO7m5>Ch(FfGar0pp$}Uj*Kusm*WzO<`y6bvXaRPo+3UUT zRvLnMlT1-Mi$OH(V(!Y{eHib&WsRt#JZ#g0x;yt&k(-*n#JJ=a>`g!l`pt?D-^a~> zeSpM8v+>pfZCh)4O%A969n1UZg|l0U^yo7F~< z^BB-8cM0=Xt&9SL%i^X z!M*KE?%4Inwfw^ev8jnO+kI&nx4DGuG(#Q{5fPk)g=KWpqq@IA`B+0kk|l*qzQ_-L2*3!3WjwFnZa86!VA&2eS=?{Tah_kqhe zV5umWgq;@<+Z>Ce7H46|y|~JYy)>XYpV(dNx#adW`J2pacS7b}7nPP%a)OQNw-k+1R_>4Wu6j zT1}l5RLT>|(XpeTwoy}N+SJL2UibJ0Ero-N3kR_%0Hm5NL8AX=GF$>O$Nqk$(;Obi zDpECR)`Go%F+(p`stPC@rhBCuQd~b|Fk|Oc0BoWS33h>qwK? zJ!VUIG~1XddyGCSfc1OaBPjmm<;m4j;Q6X%_{zb>p|@Tpx>Z$Hg|KkrHxx}7Qq=J` zZa;AeOQO^m8gQU(IKTGGKA*Zrwd&KNv%O-W%jp<$(V zqrNkH>=b@xJIh#e?~(z^nsgmv-;r1(&ic+$QSyWR6>E51MS3T}K^%5|Hz>uAPBJqh zLg$t7;+M)}+4@yL-;-IzZ##>MaLSUzs;T_?wwEth=0Wj>vgHT~%G`$)uFjC=C&;2i z+9PIxcr8O6g$gplPIi_4i-SmSUg0t?M5b7Vjp-I;MzkO@BQOSxxi@n}n?Om6RJ_Bi z`Z+m1DHGpxsNFtzz_cO?1`>n%=;gdf5y$GN!lXj$T7LW1<7ce~#k{)4qKb}&to;viPEJlyT#Xp1$l7V@*md_!!cHX>viG*| zl@yOJnN92I{UJ`J`Pnw7yjeg|vfHz}>qaCxT)H%$25v#fi+O164@OVNd?)s~t>J;V z&ro1{hijGBDev0)6PkiqsL5um*Mr+%%U4$F4CSu^Xskr7{U_yleeJrO?h9?kx6@~O zj5q!G=%8{`o)tnId_s%$W>OTmQ(3A~s`%WI`a-4jSxB5pHQ|^<%w(8(I+~*56!&=3 zo!H=^;`ud*ZL5yBX0R~VZu;UIjVX$%H~-ejXZyT$;o927F^bbOzQh#RdjC*HJ+9gL zEb+pEd|0GDU%YCgpUvfjF3)LBHz_#Xl6p)@riZtscOPdXrziTY%j@mM@egj#P8W3} z_c!|?6XJSn)b-~6wd7n@IUH=Vnd1UfF2s3X3&+}@{Wg5->+s~?PhzBnr9OfqL>_F@ zg6}X93m0RF=}W0Q!Sk1g9u2%yiLzvH?(Zg`2)St#8Gv}XlGVm9N05ids_oLSUH?9j zU=#$zr`d%SEKQC9a;Q)(77{ZGfYY{>E?utAQ^KzZH-}Oxlg7VdJphzjlZx@_~Qh=^b`eO5psQYaodmFrxaIE5`pI9 zG#|4JHRh3$lH&Vldkp4uuON)vtff)>dZ#tDo7>@d{Lhd#YbsWI6XAt1kDi|D8<_PezpF(kzsgn)!}eVZzveX z9B@bg;?TLPJJqw3XoPEI=NA6%@5-F_zJV>fyfkTWzp^rUJCdhvLDbP!9LkXaC0Zhi zVM&%J5Okay5Lz>}n$=Lh%8;i2R!stP9=qNizhxS3gU_;gz zLlw^wMj}vV1v5Cx`Swc}l#G z*CwiuFE8nf0{zPVDaZP`5njG15WPSP#ix$tYJQJ&d-Q(}3`T*Rx*{|tJ70F(nUyA% zkW+JZ{tQLY^!F8buuuY|ADT-OkJtuyXOPEgOFfs!^6~LU@y*5z_@dLt!DmQUR>NSM z6GhO*DE=CibdDXjpE?%n?>yI+%#KhmQMCgF&al7Y>%pnO^98!wq#@3{&^-fVw%eTS z#5v4t(YrVIoRFgsu+$9iQEz`bS2%MbgUS)-MVP}sBrvzw^j@r_c33iM_7u1B_$dL- zYE_&2@bnKJJRjla zc311_Xg1sF)mz6e`$|W%)Z$0GIMN(>+*-!W`l4-@!>QINo<*{V*1G3L@Hb_qWYdD8 zTFYP`Xfwx5=dG3JB3ur>+@qE(I%Bu`uv$7C6-cnOvvQK@Bc+~Kt6`Qy0ygKFH=i5+ zVR2N!wITQ82xiRhZ1M3Cms46RTIy9L!(7cs4!Mx%Ug;^+{+Y*le$i7kl8~jkEZ-tr zcD^3N@>90f#-E|PqrK2}l3t7okazK3AF&d8_>-JXp7z#M_>q-3NLKTp)>sHq9fAoo z{=Q@x8%;^Zz);C@{iK$(u}#0`Y z1cHlu7VPk4ap9pXNRWx@`J`<=`L|YA&;L1>lYK6^G$m4qu|IIpL382#}{31Xx8nRaFv_co$ z`4_D^CoAWeGre%1snS!79A(<*g&1()&03mm2K z+#82TQcanKuZx{#>aPc zR+fUOUQ}u2;1KtVHd9ptX;?fQ#z7j?$ym0_^=Yh7ER`vivbg*Xi}05!mh|Fcjkcnj zqbym%P6jnGNmfqwZ1&?g{q)YeP3nVw%AQ3?l9V`^PT;6TIq^R-YCjk6Y-2$gE>jyz zpIJT;iL;V4uo~<&uuY2E7`_+@=;S{?5;*45&-4>UQnU~&`A2HC-0}N|=|Ey!N#6{G>=toG| zin8hS$>x3d*oLa@hN~ZCwRfVSZsvY7g+$%6I34Mx%pna{DQp@`_GUaVVfwP$r$q(Q zA|V5dhTSnWA;eT^leGu&aiknRwCM$LdF4L1x=>MDB$f{hDaX)|W7 zyoy4HZbShOU$_}El9HIZS9s_-4-`o*;n7onT!&ZbLL{gsA6>luGMDwxYpKo)2t@o#7`cax>e5Ov0sO>}a@|7-zZ`O;!#Hda|8u_cq zkvHa7zaxUH=;o)eAy)$~k@4Arul1rC$`ul*Q`lE@%qG$wXcS(^SuP;CjF_3k$E{;0 z^L7Ih@>c-Zzkz#wcQqUb(?Ah4CkNi^tsI)?b%EXUBVjw$jI8^vBJ%6>e_Q|$TyPbu zA`W*0FxOwX#&eTy^bJkuR~KGKXF^X4ug52EVlqXII4&LGm9V6HLdc{yO~`ly0z!UN zO2V(d`esz~DF_!u8sl!?C5O|-E!hsTDiK(pK@%)v889x%E&9`s_NUJz;db4A#b?Nn z%222cn_WeE)2bf%4)1aEXLHB~HpZ4kI*5~cR)y+?w2ckP~J*0)~w-r4h z>Cu=OWU24ly};uExZBUwY)W&S=;0A@oPsJ2)BQpMmlISP;g0#g+J|271xema!dVY! zop*cp9Gu(@!Y!X^fmWhi?0u;6afij&xh2gtq*Jt!DZ3149z-h>9@;3`SK8J*-h<1e zoYBz^rmJ`8p3j%uvL$qI|DyKtlS>+G6U@mh?^eirXpP9wJIK{%n1ggL&ly|rNhLUN zj-1zyz0RCXo8gqvDTbf-D1l}jRosCDdHfMO`C6#40XqI4*ddYN?6h9Mf z%UW?MJjd&1QDcRUB);mOl+<;x{Cai z@}2>UjjAHGy{1;>4_u7$pJ1uu%dCHg+Mc~8T%F%sx!mkNFTZ}#UYSPN_tTr<;kbh5 z#;!IbtGfMUJSe9Qn5HfD1CHgxJwrKV-C$kuvxE8Oz%DWav7*Cqez!>P!Ppj*c0%pB=txHm}uw-J?svww0;qG4o=Jn0RtY7wXF$| zCTzfh3;-!J=1CTE@T@v|_1!SzMl%riTg5w3pM^1hjGmju=^(6d7!= zYR)zG<%c3ma>XKrD%a&0V97Wl<5vA$;Ag|8LL2=-$jR!cJbrCtOb+If+aDAdUwl4V zUt&YJU`H{!pcy&4(V~CEYIvjw@2I-C89!dBZdF3^(?I%{Y07)Cm$>cIZZG|4eAD1} z*L`7)apEFC<07$`Mnn&cY4E~Y^P;+ij9u6PKGxja0|}s*evhRFLylX9(r<`SrFO7rUIKIpgGH1ARVUr5E#%(5Pr6UL6a? zEER({8P<4da)J9+C&?de^qCN+ozvD>)C=5yge>~9ZVE+IjiPx(rHZ) zxKFXH5Sg-N-L3QaO|^hQHbhh#vN=1Bw@`lSxj_<$<2Wk{(O!Rk|GsX9*!4j<2_jR_fBk5;u`nSUN+)}8-T-T{!uHO@_CQ$%c zu2!3eu%*&7)Y%zco9$xt!V>4)d`I^|cSboXk=Ma9Fz&xdB6gj+((;zEkGi)C#0ZVg ztkRCa8aE5JdB+|@;1q$w6AnjTe(C1wH<^Gl;(D=aIFMdVA?59kanlv)wD5bSn_CxrO}v9nlOoGl zH}YEJ{AoUtFRg2PCNCC&0|(!eohNU?rC$pjSTleLT!6D5NtmI-QCqW6=%~XWv|Wp# z$BbpZ?@%zAr{dSK#XLZRz;We*RXBGN2B*Zxl`rp~IQlJYp6LIqqy79N93E&bg@rk< z@JJwH97kVYpzYjUO4B8ez*1yssSmiIApXkQw$gLS)k;iLBgeHm(u~8b2(W)vNXT{V z*z+dP(0OBA3D9wUQ)^6=#nt6FBhY}3+EDhV(014VZ#5k0j4DZR^O)8xDlH0)y^ETd zHxA|S(EuOpg8Vp(xSRxMX1E`qeTNCxh90dbmfD_uuvMoa#LEI^yeV@Lb|J(*6S;1@1;IRQq%DNKKERQSWIPHCgpE;{r zXTPoq44oGsb;CtQ<;WvmOCDyqb6js3 z?6ltf+d3rrQ7})7<7ua7kJ7zpg^h~c*z!1^i)d7nmTJ*(o023|FJg?Y02VlTP`R5! zFZ^VCeuD%SzIZ#3gE}O$iV<_6EWBa0Gh~BQa430@ViaKIoD*+|b7k9ST z>E`6w>yM-V7IcFniUTz{a$aamIw>NbDwMrWDwpzhubA7TN#6n~kRTIV>fa-RYh{S8 z2oknKL_9U+o*~3=rG9Nv3G6SRT;&!#@4(tN)f104ER()nRcA~M=#!J};3$&I&?rCg zXW5U}qvr+3P^tIZd0bGV?hcL9|Jc?B8Iu6ZcVkes+O{6=OO#GOsWGLi$yJmzM?B7U zHAqm&hNu@s83SU)C;AT8<|H7@HD0NQ^s&%8Nz{46QMS2<@o@yhdgovLiIl{khyi~0 zh)6;QESfa}30j7J89;=P4<{a2tmesk?O+DE*|`oFyQTJx%v^iJwVQwELcdL6o8_hp z8>dRhMRHBPnG9}7&}B=HV!JVyz@NY#Go-|c$L6m6Aag;+{;w(nc3Bpo(L$bs8eISgt_tx<+ ze$D=hsS*pA|MR=2fjI-5?O#)p^QG$jmgmhVYC+$_28T^P5H1G<^!H{5LYRos5RH>F z-N6!tlKza!hHL=ED+$N;GkB|cjMCKfJk`L{c;|D4Xy=^@&BoVd4(jNv z*J^hmn?!(1*%9!|Zo$&HN{4Jmi|4)55}-FrLvQ~H0VOgA-|*JdxRay} zokR9$yytEKmXs-IxD()XjC{474>#&tna6ozpSP1=l_c<|nyg;%NTy}#Cn^&;!+V{g zOFlp%Z8lntx8EHH%1+!b#66tegP2K9p4Jyt$~v%Dt9wz3f+i2-VQX)ZA3%+29_=qP z0p46*a7~h|SwUB!qC-sT7EYT2txL%uA^S2VXPN{L>Axg1p@L|YXG%e5*t^L&J-4!g z5>0GQzDWS?3^S^hLHo7*-Hum{S*{)_&-8h;RUOD+(3vhSgh9 zxMSB&D$}A58Ul3`cRr|U$uw_`4eUz6p$(m2@?&+oeE$eH#<&};`NsD}$Sy@4ATaS;A>yux_ z$E;lSF-J=^Mn5MaB~GlhE+d+!b5Bz?*5Pk!IqdL>Kr%*=QzhUf)3;FjGhvu1_!Qk^ zSuy1`>c1$$i2WgYdajYit2d6?{qB<4J>RQaWQsdmWhW>hb%nJU&Np5=z(P?4hokjq zDaZ%JCu|K5;7qk$4N!B1=zXiuD*6%pQ&&a0I`pUNX6{I0oQX4%&t^!srL znpi04n|zCoejb>3HW2ttM3j+*7kcv@C8W7E^LNq(`Z5Y``F?6t*q)hY%*5v7EEy}y zqvq0rW{%`!GYT0|a4C_T(-%D`kC!&r1Sag}yBJ;_7io1j7xAH%ZZvmR5)ax%h@CN2 zogMImbHPTGoBienX4U5Zlwd-N%F>19Nlti47gX+Zb7jfH|JmHI>c9Ab z9CmZtlBA?8*8SDf(0~W4s5t-Kr>bEO(9Zc0b+Yv!w7B@#$GRRGhCu3$Q0Dq%+$kpF zDo-Eaw?7>yJCtEq6w@@acQZ|*J+Y^YDjvS%r7sFh32PyQKYroKv|5paayGeJ{HZ_@ zU>%qF_!U88iceQ>I4a|dzLe?lw_j>3`Q1er+mE$GInjCWDT;^$R*;p7p{=ggHy zhdkOD8^XGg??nhNPDWFxLcD8qa-pj}Xx(l)MPE$`uGdoV0SmXg0w~K*D=R84rj#k6 zwXdM7j({OOxh5t_%OObstkZ%k(7WFs>ov`xNWo0FGZMZq}&4c#F#oa}+KF|qlVVD5tvD7b6mkejLaynhT z%rRP5X4w(9>}GPx&rk4|Rp-v4RW16E)Wp6oP_|WP0cHhPTk^H#cTVtxcm6Q-Hdu#_ zN35ETC%l^Ow=f`qc3Rv0*#6fvp~qHeUREP7HqqSu&E0pAECxGV)FjH(JGxlnKSihK zO^^70iV(_RQv{Si&G0dYe}EY0>CMVfK=dyb6hg6qg9V)Dt%k^n1?>cFM0!D56_im@ zm~(z;eH|5n9q|yn@Tduz=RN4Qp z1q1s4S%aH~eV`QTC2$4?E{Y`nj9HB6xQ|r7d_i1PCYbsp!P+WuGbbFKALl~D`1@aS z>if=`_mL3d6Bg&!Wo!}c2g#OHj9LuuGndszZX8J1>HY8nA6O5CtKsD0k~39f7u-DZ zCCq`Ja4{orU-|WGY-~)#XVvW4+Q!bp&5fhv=Ln-JQ>SVWu?;yyH)^2eClOVI5;m`F z_`>;WJJ@0O#N> zBy4e7{?U?@MNnE-p24rRIb6Z-m=FBAYcFoGp3~w4tQ5EcR~`cV40`)Jpw)Ge5tQ88 z&gQ6w-|-OmDXy!_Aj1D~^uYv79F)}5*gdwr=)XS=zlqV&lSIE%tR)LtxyTBdw@lW; zO)L5VFA@d++5CAF+b`_|XGsQZigul_qrXl%e;SqKUCDD&tvYx&c)vj!b6me4gTB)` zt~*moN-RoBhFgzo_^oVgcK^HaR)nR997Vz%`V#WU+_rJ*Y!6x zh}P%y^*sO7WO>`JZl;O5y@$iQ#iv%%wqDQqrEm2 zMccQT4SZ}_TD#Lz*6yD)(ie<)ki`vyKyP|#EYF@(_sdWN&c>RO^s$(C`||w8Mt@

HnRa>!OCZpGz`LZWb!Y0EYELt;cv`lqz7PKEdEO2+}h4=?{2v+tm5*c6MfYRMx<2Ny8rwb0JQ-T6FH9R+P9wx*V*a7& zM$8hTOK=Y|vCZ4S|Af|M{b{d+Drn*JffAmMSnbAwXg^}F--tKDsNIuBU3bX$IQTr0`-?aZ+37v_WL{P>~ZC*BZ3g-Vgs z0S?fN2b5SSsR_#<6cxK00N#L1(y#$x$EKdPt=p~4H7KZ-C+PJb{|uG1xJR0snx_ie zmt=sA5rlnDv5M%ZOY>cUsi|HhfHI?9!K-%Az27jt!g@dlk^R^a)Y{beb5J`fgW16D zsI9NW+GZB-ukgK_QsT%tm6n{dZ&I{m%QRE)d~vHPfxFsgCK+pWlkBVi=0gh3ky?LPm6LYS}i0DN@j$+ z?oIF}@9nzCp$S&-;s!-en@kLU_SNUBhM?*H3k2SBERkC3iL0rYwm`cOW}lp z*he1#%~q`_zzR08ahb@htUwV<7z4!1sPDlCPDP6rz~%cU3uB_U7E(e2?okvJE_qRZ zudSFoF{$xJ-X2sGqv}!HC}E?@fEiDSLcS}3o2x1tJ7j9t_w|7y2|mDZ*?Gp zO{#0CC&-lCpuwUUfaw+Rw@P~`4Y|uy?R#BeSdv;4hQmjKMqR+QUC_wBsxj(=MerZ27MV-Xn(oYgb3BQ8+F zHcY7@Z86&7E(Y^2Pg&F@J2<$`=fnUnhnK4R=$DT zet%@b2Qo*&xqo}>lU{NJ#}0o-Us17Gg}uLao(An40x}K4&iOjK=~@E_4Ye@*kWzZ` z&SO;ZA^1*lr~X>JgH$YBx4-OfzG`e~ zzvB_}KA2YVc+>WDefzJi@vm+yPvVy5O=YHipTt# zR#lG0HO)sshZ4^v?|%xyFWsR(;a4Y;8INs5Ff3cyNM==pWyS)TOn=w7J$o}3on%m~SAhPH z3n1V*|3b2IWugkyuVi!HvmyHniV-QC^2I23nxha$yG zakt_WcXuhp-HOw@-=ExsWD^3LGc#x2^U5Qu{iYdfCH#(PLSG;$zFyDyKIAG%|NDG9 zUoUk1GmlMf8O!lYJ_%cUB6+@yMp3Fj0mqS$lq>NLLTGWVUXq5`Wk5l2!3sZbhE4uU zfpwUF?urAJYmFwx_qDG#Pr3T}AQPK8Actx3B$1b)`KS#^&Lmb;z`d-o{v9Xe$Y^r^ zh8xo-o^|ass{VNV>y46fFpSZ_mE!8>I}L;xG53kqDbo&eo$hl;YKGo3kiobcWH8=% zXa^aL(?#Rat4DIT;=C2;+$&*OFqBC$OsyV+Wa@ZR+ID;?voQsn=Wnx_ehfP1m^T*Z z{(~q%gng>}nHn=DH-EyJW#o&$w6yf|B}&KQwcuaEXP1Kvolw>ZK--QN2PP(F=|YB~ z%f~Zd)Af}}QCU$nr}oc=jv-W^NWf!ZJ0w;??e6?b3WCo8Qa?wr1m*}h_hu~3)Ip^j z_6A;?7(VA;xtv%X8u#30)Ioecj9qrDFtrO*8#J`lYt$HIAR~F`cOk!XzKugBP+7P7 zRWY)d@#RrHTG=)QLD+3&l>=n|50ZSvoMIv#W?-ca1P3iwn{ju>&d0VcYa0jM5%&ac zNA!DT$@=X5%2HFa8c1$YcRVK9&2vXdldT|>)md_zhPY-B>8NR`@Ec969p&L}N*1$2 z*jBJVZ%_57`CkpIx-}tcFQITRZTIef`Hmg1lwNDv-9^AOg`*GK*ro= z7tyC|Hf|%e_U6(WI{2YKH)pJ_^7D?q2T4aR$k+k*zt67;R zIOgzMT6!Xu(p*H7@rDIwCmB%5PK%R)Y4g7$6ADMWq1S)^1-?9n_``L_9%Dw?EMyVL z9i#q4kBhp`DKo@u5ug=%zh zic(Qqvt-gz(MxJzZaM~iwQ3pl`a)N0&oEIwZHnUUI;k;5&T30=Y(duU=QHED40>jc z%6hSSNJA5J>^1 zepoYpCV{)kJjbe!J|Yrf!{dA{B=<0rVdQ$|?5cn6U?hFHHhbz=Gpb-ry!`%smkO62 z`Yt)sjRil9CTZx~_iPUdrzt&2`LIk#vrVUazGo?rTK!lQldYUGj-$y&E2&uVmr_8D zCvSz#C(UW|#u@y+2rtwtBL%Z&xSdBE;%e>17-4qy&~YWWArREk5|^g7_SJ$Qq>|0t z?rE!Tk@Uf+98_T_;l=h#4FH8XP?t6DWx!R@(+VlwO=-0NOR={|8LL2xg{Kn{I5OdolP6Vt*eg=3{=_Pg3caJc!6qQHlF# zYL)T*dyA8$QKyQ<;=;!#F0O4gD^z7a3~hCok+3JWAW_S3R&gL#w@(JvAQvYt?|xbS zP{2!2`(M>fa|zfYDk|3p~2I!MEKf?qVwj&9~)%4?0mj-GHWs5+c;k%_bx6*bEt zV}A0U7eiIb;b--;R{ARM0?j7mKG z40fq$drqLNcDbFiqZtHY9DYhIcJSrHDmC#7ahD8q&Vww>3_EH!@#*bl%cFdF%MC%y zY?B&s5yHfy)_)Oj`KuX=s(x}ZD&njRq7h=V(<7pmz8!Hf^Un|c z%bq*#ACQCPfTkVNgIiqUx*ozrOUuvu)@DQLbdfLkzDOx}cfT)q_ebI{|6Q09msSR3 zxV&TGoT%P|Cd2`|(?qHTstOs6R$8~E87R8u|LO@@a?@!|xtKBOoMf(52j}q+b|8P=ow@92kZPz!HNrx&y{xQ&KhT@Oq zkJ-J~5)EgLhW}6}wDTlC&%kjz`DfKW!xQ+w{p3D^Eeo|x#fR%m7E5&cC>>Q)y4j;9 z-7CW_ENU&^j+`4O+Zl0}U>9BBQX_NaW(KnfWJeqG|9RCW&GHiJe7(LVQ%DkweBAM) z)t2G=I(A+33;u3ZqPKW++zDPzS}x}$9Ri>73-Tk(QPdAN6ywga+8aQ-S+8PIGtfyw zJpBmQTawms1?i^L*MjD2V~KvBcAlhp^+{DTA$%Gt5L?BnobO_w-)^0Ooc<{Yrby-Z0rAtAxv=SC*

5{{ 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 JPDHLkV1gv)PwM~x literal 0 HcmV?d00001 diff --git a/plugins/LOMM/crossover_led_green.png b/plugins/LOMM/crossover_led_green.png new file mode 100644 index 0000000000000000000000000000000000000000..440eb82dd1f891316ff59478df12f792391e8081 GIT binary patch literal 290 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 literal 0 HcmV?d00001 diff --git a/plugins/LOMM/depthScaling_inactive.png b/plugins/LOMM/depthScaling_inactive.png new file mode 100644 index 0000000000000000000000000000000000000000..ba806b6c35fa5c9c2d2683e9c7fd4a7a696ec97a GIT binary patch literal 886 zcmV-+1Bv{JP)EX>4Tx04R}tkvmAkKpe)uKBOWQ2Rn!l$WWauf{HlSDionYs1;guFuC*vO&XFE z7e~Rh;NWAi>fqw6tAnc`2tGhuU7QqMq{ROvg%&X$9QWh9`#$cz1N@B&Q_Wx;P&La) zClf+8wiKB|DQNBOx zvch?bvs$UK);;+P!+C9Gnd>x%k;EdFAVPqQ8p^1^LX1|86ccIMPk8tT9luB}nOtQs zax9<<6_Voz|AXJ%nuV!JHz}L|x?XJiV-yJO0?oQ@e;?a+^8^Sy16NwxUu^)hpQP8@ zTJ#9$+XgPK+nT%wTc`thv3l_Hp_EWT>mu4RCM> zj1?(+-Q(TeoxS~grq$mMt?F{VmYf}100006VoOIv00000008+zyMF)x010qNS#tmY z3ljhU3ljkVnw%H_000McNliru=L8-U05>5)sZ{^~02y>eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00B-(L_t(2&%KhrPr^_TfUoUq3J5Wh5-li7AQXa8V`|Fc z!a^9FO#CBFoEQiTi&JA`peZ3CG1~H@8VL?sWOTUt@=Srzo4)(*?p{rSa zV4^?hyWV)6M?NVZXOs-`#G6-k~P|5RszvPyjHxCZ@EBdbLoZDLaKeB1PHi zN+zNxavVsJSa6Bc^IZ0bUGwa|7`;biwlmC|tHC~=7r&QFK_Hl$wq@ED{0&-VJHx!W z8tmf)-e34?F8|~PkCD$Frg!)5AB@WjefsvwdVk@Q-$|UJOau}(Vdi4-ZADHUC~5XW zBX9cg`L&aXuk^@@ET@u5-}WI4?f0sbp~0E+;oH2>v;=>Px# M07*qoM6N<$f*VnW_W%F@ literal 0 HcmV?d00001 diff --git a/plugins/LOMM/feedback_active.png b/plugins/LOMM/feedback_active.png new file mode 100644 index 0000000000000000000000000000000000000000..426abb50683157fed7f88616a749b8448be0b67c GIT binary patch literal 11378 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 IEtiY`1(q$GDF6Tf literal 0 HcmV?d00001 diff --git a/plugins/LOMM/high_band_inactive.png b/plugins/LOMM/high_band_inactive.png new file mode 100644 index 0000000000000000000000000000000000000000..43a24cc8f7b42f548896c1dce256c2ad442f144c GIT binary patch literal 1818 zcmV+#2j%#QP)EX>4Tx04R}tkvmAkP!xv$rWGGl9PA+CkfA!Yi;6hbDionYs1;guFuCaqnlvOS zE{=k0!NJF3)xpJCR|i)?5PX2Rx;QDiNQvhrg%&YhINXo_-v8&^a{-}QWttUA0Ge)_ znN(8Dq;L}Gd2yVNaiDh>Xf+(?``B?>CqVESxY9fRS`(Q4B)!qm zqDR2cHgIv>(Ud*lat9cBGGtSBr6841ECTOm^i6qS_!byg^XAq*$LRx*rCFtKfP+I| zqD0y2KJV`9p4-27+VlGXHYjqA!#?Ry00006VoOIv0RI600RN!9r;`8x010qNS#tmY z3ljhU3ljkVnw%H_000McNliru=L8D`G#k@WGMoSa02y>eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00i<$L_t(&-tC!NZ`(E$$N!Y5pay33#gUvmG#IeeZ4xH| z+FXWa5BmiDtosD(fE9Dn3+Bj9;K%KuwUWNnUXUV`#63u)NnLzV)Gfe#07K*v4-dhg z4tYqE$4~Y+2tYs}g(x*qCb5RZjgwad(vlDa0YhWe!Ml@JSW2-xKl}-wK3#!Q6W{;` z0M6qlI5_9Btt`v;dRw71WSw)!rkQfmq0nMJvaH4{D4Dv%ibWO#2!a64s*69~|F)!4LiV2hh^s3flu`*Ui5Pv! z<#I8VWeCUs$ajx-cm|-{|5D}Dei;M-9LGiX{cD(}xujA;!Z5_%vtwLdreNkl%-cH? zprt_ujKOi6=yf|FgupNi&1NaHg>#N5ioiL?_U;e3x*UR1s}x9DW&n&aI8F?aQVP>F zCB!An`5}sD7>4L|f5-Oj(Ihe#l!Yx=5JT*r#SksalF?WO;?2#CEZ1r^t*%O~R-0)% zkB?b>-ev4%U~5wJGWhTFp%}#Rtw$1ps?ROv27cp(P-+}%Pg;H+x}Sx zTRVriO!mymK(ZvU>3h{f1c2JgN^bqA-39=3JWs0&>3AM$D=V75<9Qg3Mj4nzKGOZF zzB-<#jX^+Eb?JT=5kiPuUaizp+CMwN*3Kb(e+X-iJ(JEAiS8QCz0)kjD2fMU7Bva$cYm5j_2X!i(>%5%NNJ^`Ss+iD)g@XFr!!Nst;iUKx-r5srI71XeY{P-Cczc z0-j{9xiH&@@Gn2Ynh}|FRwRCHh-olombYnoRf>QY`Of91drl#C#eRaKl-dig}T)FqtDuNUVWYq6}YG$wc8pn;k&5) zy#C6-1djlog?a9sVzYe!-!G0#V`?N8KukPWcBZaUXE6xVdb0Amb65Xk4|_CAKgj|ynz zt~Cf4Tz4H8{TQOSsn8&DnQHy(S6buoSo`_~#HuIop4{K*)11H*ml#11;OX{0{NV>! z*2)AVW4CBF*KyH*DT5wY#uBM7^ zGQ_@V6dX(LYG2e}+5K8vXhhL`AFXJo|NAhJFbt>mcUSu$48ekM0&{CW-ZNbVqFi%{ zfgtHH$CJp4u$2EMDuGb4y6C^b)2-(qwr%rFVzZQcFX;s6AL{{nkvo0QZU6uP07*qo IM6N<$f_F<@>i_@% literal 0 HcmV?d00001 diff --git a/plugins/LOMM/init_active.png b/plugins/LOMM/init_active.png new file mode 100644 index 0000000000000000000000000000000000000000..3401a74c1925715de160a6430b6d4ef3bd3ebf8e GIT binary patch literal 1204 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 bSS0`8G&1+&#;`c+ND~D0 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 literal 0 HcmV?d00001 diff --git a/plugins/LOMM/mid_band_inactive.png b/plugins/LOMM/mid_band_inactive.png new file mode 100644 index 0000000000000000000000000000000000000000..6ccabc0ad9f766bbdbb6d471af856dc9fa0636cf GIT binary patch literal 1843 zcmV-32h8}1P)EX>4Tx04R}tkvmAkP!xv$rWGGl9PA+CkfA!Yi;6hbDionYs1;guFuCaqnlvOS zE{=k0!NJF3)xpJCR|i)?5PX2Rx;QDiNQvhrg%&YhINXo_-v8&^a{-}QWttUA0Ge)_ znN(8Dq;L}Gd2yVNaiDh>Xf+(?``B?>CqVESxY9fRS`(Q4B)!qm zqDR2cHgIv>(Ud*lat9cBGGtSBr6841ECTOm^i6qS_!byg^XAq*$LRx*rCFtKfP+I| zqD0y2KJV`9p4-27+VlGXHYjqA!#?Ry00006VoOIv0RI600RN!9r;`8x010qNS#tmY z3ljhU3ljkVnw%H_000McNliru=L8D`G!Zk0+kyZ902y>eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00j$4L_t(&-tC$}Q`<%q$Nwu!OnktdDYj%dz;vdG2w+T` zLP*Q0U!b2gUm(4NiGfU8V;e@tiM>@vilHkao3_EG!$R&B1T5wfpqmTh0Fb zcAs`&o7*pl0YLN>HiLH1WU`?wn6zh+y$}NBl?u)pZ?KSTIe7IeZvMW3Sug?kkkR7pc9I;0}K#>Kp+Z@C~zktztr|;fi<=Zm2 z;MyEUS4uL8&3D8`XJAkW0ttwSL6m_bo&1#$0bC4GUMb^!-$b091$AZZ=?=CJKdu@?XHr4^du6qY;D_?J79uxnh~QGSOMZMe8&T(f5M~G7LOcoYFS{ zfJUo@-+np5>*Kd$^-^>jU7rA_ZZf8{*W}K-i~y$Zr(w2EuvI%iuX`0$v(td& zd&`%16dB-`WqS+Vt)hqYP^m|QZm?57!X7MLI( zpft>j)+x4X2k3UQGt+o56Eh%&BhNJp2gBh+eO9~fx|#mEt=#8iKPyHu)+GBm(hRF0 zKecCGv`*pJtC@SIIW`lkYq)5iWkMt{fM~8S|M!FY2lejy2JQ#5S*XuEo&m#NNj5&K1%fLY6GqZh)t(^mOyPs0kEc^c1F3E!c&N-aw8ZIY6 zoU`2C-m3QU^72@HUeWz$jiJZN~$eu?EEf1%^^&AkRgP?^PPQkuRg)DmLiax4^geI;j;5yL5%H(3;8-E z1e%6vfo*)ZNhyeC0cOT&g*=|hI?a&#rjhYlGL646;nijyd$c^z@cn#0T4@*mmy1Y7 zqtS!$9_uegBXBW_U~caRd#0m7RBJ9XAi{uSMv_(0B18VCtOQ1i)n(@l&$oX9E0s!= hDr^?=)l0Gf`WHH+v=fF4M&SSe002ovPDHLkV1l0!RZ0K= literal 0 HcmV?d00001 diff --git a/plugins/LOMM/midside_active.png b/plugins/LOMM/midside_active.png new file mode 100644 index 0000000000000000000000000000000000000000..9caf8b69147bd7f94411fe814000140075aecd8e GIT binary patch literal 11242 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 literal 0 HcmV?d00001 diff --git a/plugins/LOMM/midside_inactive.png b/plugins/LOMM/midside_inactive.png new file mode 100644 index 0000000000000000000000000000000000000000..7b14b75df0199da8d1dc7a0422cd906898a57308 GIT binary patch literal 9190 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 SRTbl|M-1A*s%ZOxsQ&?()v&4n literal 0 HcmV?d00001 diff --git a/plugins/LOMM/split1Enabled_active.png b/plugins/LOMM/split1Enabled_active.png new file mode 100644 index 0000000000000000000000000000000000000000..6b3f8ec62d854a55aadfa38570387a6671bdf5b7 GIT binary patch literal 11035 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 Wk5`zv_zjf+0000ly literal 0 HcmV?d00001 diff --git a/plugins/LOMM/stereoLink_active.png b/plugins/LOMM/stereoLink_active.png new file mode 100644 index 0000000000000000000000000000000000000000..2ba9c4b8857d1e557a106929e378200d38e465d3 GIT binary patch literal 1042 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 literal 0 HcmV?d00001