# HG changeset patch # User Chris Cannam # Date 1381735185 -3600 # Node ID ce50eef47bdfb6c1849665bcc232630e6bf07bd6 # Parent 7fe0da91e9c3cae5abff4e17cfe20c84fbfb1a8e Latency fix etc diff -r 7fe0da91e9c3 -r ce50eef47bdf 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 7fe0da91e9c3 -r ce50eef47bdf 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); }