=== modified file 'mixxx/src/engine/enginefilterblock.cpp' --- mixxx/src/engine/enginefilterblock.cpp 2012-07-04 05:37:09 +0000 +++ mixxx/src/engine/enginefilterblock.cpp 2012-12-27 13:52:20 +0000 @@ -15,8 +15,6 @@ * * ***************************************************************************/ -#include - #include "engine/enginefilterblock.h" #include "controllogpotmeter.h" @@ -27,6 +25,8 @@ #include "engine/enginestate.h" #include "sampleutil.h" +#include "engine/engineasync.h" + EngineFilterBlock::EngineFilterBlock(const char * group, EngineState* pEngineState) { ilowFreq = 0; @@ -118,6 +118,8 @@ memset(m_pTemp1, 0, sizeof(CSAMPLE) * MAX_BUFFER_LEN); memset(m_pTemp2, 0, sizeof(CSAMPLE) * MAX_BUFFER_LEN); memset(m_pTemp3, 0, sizeof(CSAMPLE) * MAX_BUFFER_LEN); + + m_lowCur = 0.f; } EngineFilterBlock::~EngineFilterBlock() @@ -177,17 +179,19 @@ if (filterKillHigh->get()==0.) fHigh = filterpotHigh->get(); //*1.2; + #ifndef __LOFI__ setFilters(); #endif + low->process(pIn, m_pTemp1, iBufferSize); band->process(pIn, m_pTemp2, iBufferSize); high->process(pIn, m_pTemp3, iBufferSize); - SampleUtil::copy3WithGain(pOutput, - m_pTemp1, fLow, - m_pTemp2, fMid, - m_pTemp3, fHigh, iBufferSize); + SampleUtil::rampCopy3WithGain(pOutput, + m_pTemp1, &m_lowCur, fLow, + m_pTemp2, fMid, + m_pTemp3, fHigh, iBufferSize); } === modified file 'mixxx/src/engine/enginefilterblock.h' --- mixxx/src/engine/enginefilterblock.h 2012-07-04 05:37:09 +0000 +++ mixxx/src/engine/enginefilterblock.h 2012-12-27 13:50:21 +0000 @@ -61,6 +61,8 @@ int ilowFreq, ihighFreq; bool blofi; + + CSAMPLE m_lowCur; }; #endif === modified file 'mixxx/src/sampleutil.cpp' --- mixxx/src/sampleutil.cpp 2011-12-08 11:47:54 +0000 +++ mixxx/src/sampleutil.cpp 2012-12-27 13:19:02 +0000 @@ -443,6 +443,30 @@ } // static +void SampleUtil::rampCopy3WithGain(CSAMPLE* pDest, + const CSAMPLE* pSrc1, CSAMPLE *curGain1, CSAMPLE gain1, + const CSAMPLE* pSrc2, CSAMPLE gain2, + const CSAMPLE* pSrc3, CSAMPLE gain3, + int iNumSamples) { + + CSAMPLE a, da; + a = *curGain1; + da = 0.f; + if (*curGain1 != gain1) + { + da = (CSAMPLE) (gain1 - a)/iNumSamples; + } + + for (int i = 0; i < iNumSamples; ++i) { + a += da; + pDest[i] = pSrc1[i] * a + pSrc2[i] * gain2 + pSrc3[i] * gain3; + } + + // update current gain of the calling instance + *curGain1 = a; +} + +// static void SampleUtil::sseCopy3WithGain(CSAMPLE* pDest, const CSAMPLE* pSrc1, CSAMPLE gain1, const CSAMPLE* pSrc2, CSAMPLE gain2, === modified file 'mixxx/src/sampleutil.h' --- mixxx/src/sampleutil.h 2012-04-08 02:31:42 +0000 +++ mixxx/src/sampleutil.h 2012-12-27 12:00:33 +0000 @@ -87,6 +87,11 @@ const CSAMPLE* pSrc3, CSAMPLE gain3, int iNumSamples); + static void rampCopy3WithGain(CSAMPLE* pDest, + const CSAMPLE* pSrc1, CSAMPLE *curGain1, CSAMPLE gain1, + const CSAMPLE* pSrc2, CSAMPLE gain2, + const CSAMPLE* pSrc3, CSAMPLE gain3, + int iNumSamples); // Copies the sum of each channel, multiplied by its gain into pDest static void copy4WithGain(CSAMPLE* pDest, const CSAMPLE* pSrc1, CSAMPLE gain1,