From 6232a3364ee71dd0c6d8b77d5e919288faf1c434 Mon Sep 17 00:00:00 2001 From: ronso0 Date: Tue, 5 May 2020 07:28:31 +0200 Subject: [PATCH] make mic ducking use strength the same way in Auto & Man mode Previously, engine/enginetalkoverducking returned opposite values for 'strength' in Auto and Manual mode. This commit removes the inversion from Auto mode, thus the Strength knob always affects the music volume in the same way with both modes, much like a Muisc Volume knob: * fully left: music muted completely * fully right: music volume unchanged --- src/engine/enginesidechaincompressor.cpp | 31 ++++++++++++------------ 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/src/engine/enginesidechaincompressor.cpp b/src/engine/enginesidechaincompressor.cpp index 4f9b6fc634e..7ef67939945 100644 --- a/src/engine/enginesidechaincompressor.cpp +++ b/src/engine/enginesidechaincompressor.cpp @@ -3,10 +3,10 @@ #include "engine/enginesidechaincompressor.h" EngineSideChainCompressor::EngineSideChainCompressor(const char* group) - : m_compressRatio(0.0), + : m_compressRatio(1.0), m_bAboveThreshold(false), m_threshold(1.0), - m_strength(0.0), + m_strength(1.0), m_attackTime(0), m_decayTime(0), m_attackPerFrame(0.0), @@ -54,28 +54,27 @@ void EngineSideChainCompressor::processKey(const CSAMPLE* pIn, const int iBuffer double EngineSideChainCompressor::calculateCompressedGain(int frames) { if (m_bAboveThreshold) { - if (m_compressRatio < m_strength) { - m_compressRatio += m_attackPerFrame * frames; - if (m_compressRatio > m_strength) { + if (m_compressRatio > m_strength) { + m_compressRatio -= m_attackPerFrame * frames; + if (m_compressRatio < m_strength) { // If we overshot, clamp. m_compressRatio = m_strength; } - } else if (m_compressRatio > m_strength) { + } else if (m_compressRatio < m_strength) { // If the strength param was changed, we might be compressing too much. - m_compressRatio -= m_decayPerFrame * frames; + m_compressRatio += m_decayPerFrame * frames; } } else { - if (m_compressRatio > 0) { - m_compressRatio -= m_decayPerFrame * frames; - if (m_compressRatio < 0) { + VERIFY_OR_DEBUG_ASSERT(m_compressRatio >= 0) { + qWarning() << "Programming error, below-zero compression detected."; + } + if (m_compressRatio < 1) { + m_compressRatio += m_decayPerFrame * frames; + if (m_compressRatio > 1) { // If we overshot, clamp. - m_compressRatio = 0; + m_compressRatio = 1; } - } else if (m_compressRatio < 0) { - // Complain loudly. - qWarning() << "Programming error, below-zero compression detected."; - m_compressRatio += m_attackPerFrame * frames; } } - return (1. - m_compressRatio); + return m_compressRatio; }