# HG changeset patch # User Chris Cannam # Date 1381735185 -3600 # Node ID b73dad5e62016a8e36fdc6aa4f3ef9a879b0a454 # Parent 01d7da967123c6f59bdb4fe5676a239283e08b6c Latency fix etc diff -r 01d7da967123 -r b73dad5e6201 dsp/rateconversion/Resampler.cpp --- a/dsp/rateconversion/Resampler.cpp Mon Oct 14 08:15:51 2013 +0100 +++ b/dsp/rateconversion/Resampler.cpp Mon Oct 14 08:19:45 2013 +0100 @@ -52,7 +52,7 @@ int inputSpacing = m_targetRate / m_gcd; int outputSpacing = m_sourceRate / m_gcd; - m_latency = int((m_filterLength / 2) / outputSpacing); + m_latency = int(ceil((m_filterLength / 2.0) / outputSpacing)); int bufferLength = 0; @@ -130,19 +130,19 @@ int offset = 0; while (remaining >= m_phaseData[m_phase].take) { - std::cerr << "remaining = " << remaining << ", m = " << m << ", take = " << m_phaseData[m_phase].take << std::endl; +// std::cerr << "remaining = " << remaining << ", m = " << m << ", take = " << m_phaseData[m_phase].take << std::endl; int advance = m_phaseData[m_phase].take; dst[m] = reconstructOne(src + offset); offset += advance; remaining -= advance; m_phase = m_phaseData[m_phase].nextPhase; - std::cerr << "remaining -> " << remaining << ", new phase has advance " << m_phaseData[m_phase].take << std::endl; +// std::cerr << "remaining -> " << remaining << ", new phase has advance " << m_phaseData[m_phase].take << std::endl; ++m; } - if (remaining > 0) { - std::cerr << "have " << remaining << " spare, pushing to buffer" << std::endl; - } +// if (remaining > 0) { +// std::cerr << "have " << remaining << " spare, pushing to buffer" << std::endl; +// } for (int i = 0; i < remaining; ++i) { m_buffer.push_back(src[offset + i]); diff -r 01d7da967123 -r b73dad5e6201 dsp/rateconversion/TestResampler.cpp --- a/dsp/rateconversion/TestResampler.cpp Mon Oct 14 08:15:51 2013 +0100 +++ b/dsp/rateconversion/TestResampler.cpp Mon Oct 14 08:19:45 2013 +0100 @@ -97,10 +97,15 @@ delete[] inPadded; } +BOOST_AUTO_TEST_CASE(sameRateOneShot) +{ + double d[] = { 0, 0.1, -0.3, -0.4, -0.3, 0, 0.5, 0.2, 0.8, -0.1 }; + testResamplerOneShot(4, 4, 10, d, 10, d); +} + BOOST_AUTO_TEST_CASE(sameRate) { double d[] = { 0, 0.1, -0.3, -0.4, -0.3, 0, 0.5, 0.2, 0.8, -0.1 }; - testResamplerOneShot(4, 4, 10, d, 10, d); testResampler(4, 4, 10, d, 10, d); }