Пример #1
0
void EngineFilterButterworth8High::process(const CSAMPLE *pIn,
                                           const CSAMPLE *ppOut,
                                           const int iBufferSize) {
    CSAMPLE *pOutput = (CSAMPLE *)ppOut;

    for (int i=0; i < iBufferSize; i += 2) {
        pOutput[i] = _processHighpass(m_coef, m_buf1, pIn[i]);
        pOutput[i+1] = _processHighpass(m_coef, m_buf2, pIn[i+1]);
    }

    zap_buffer_denormals(m_buf1, m_bufSize);
    zap_buffer_denormals(m_buf2, m_bufSize);
}
Пример #2
0
void EngineFilterButterworth8High::process(const CSAMPLE* pIn,
                                           CSAMPLE* pOutput,
                                           const int iBufferSize) {
    double tmp1, tmp2;
    double cross_mix = 0.0;
    double cross_inc = 2.0 / static_cast<double>(iBufferSize);
    for (int i = 0; i < iBufferSize; i += 2) {
        pOutput[i] = _processHighpass(m_coef, m_buf1, pIn[i]);
        pOutput[i+1] = _processHighpass(m_coef, m_buf2, pIn[i+1]);
        // Do a linear cross fade between the old samples and the new samples
        if (m_doRamping) {
            tmp1 = _processHighpass(m_oldCoef, m_oldBuf1, pIn[i]);
            tmp2 = _processHighpass(m_oldCoef, m_oldBuf2, pIn[i+1]);
            pOutput[i] = pOutput[i] * cross_mix +
                         tmp1 * (1.0 - cross_mix);
            pOutput[i + 1] = pOutput[i + 1] * cross_mix +
                         tmp2 * (1.0 - cross_mix);
            cross_mix += cross_inc;
        }
    }
    m_doRamping = false;
}
void EngineFilterButterworth8::process(const CSAMPLE *pIn, const CSAMPLE *ppOut, const int iBufferSize)
{
	CSAMPLE * pOutput = (CSAMPLE *)ppOut;

	switch(m_type)
	{
	case FILTER_LOWPASS:
		for(int i=0; i < iBufferSize; i += 2)
		{
			pOutput[i] = _processLowpass(m_coef, m_buf1, pIn[i]);
			pOutput[i+1] = _processLowpass(m_coef, m_buf2, pIn[i+1]);
		}
		break;

	case FILTER_BANDPASS:
		for(int i=0; i < iBufferSize; i += 2)
		{
			pOutput[i] = _processBandpass(m_coef, m_buf1, pIn[i]);
			pOutput[i+1] = _processBandpass(m_coef, m_buf2, pIn[i+1]);
			if(pOutput[i] != pOutput[i])	//Check for NaN
				pOutput[i] = 0;
			if(pOutput[i+1] != pOutput[i+1])	//Check for NaN
				pOutput[i+1] = 0;
		}
		break;

	case FILTER_HIGHPASS:
		for(int i=0; i < iBufferSize; i += 2)
		{
			pOutput[i] = _processHighpass(m_coef, m_buf1, pIn[i]);
			pOutput[i+1] = _processHighpass(m_coef, m_buf2, pIn[i+1]);
		}
		break;
	}
	zap_buffer_denormals(m_buf1, m_bufSize);
	zap_buffer_denormals(m_buf2, m_bufSize);
}