changeset 140:ce50eef47bdf

Latency fix etc
author Chris Cannam
date Mon, 14 Oct 2013 08:19:45 +0100
parents 7fe0da91e9c3
children 54c9e0811ae7
files dsp/rateconversion/Resampler.cpp dsp/rateconversion/TestResampler.cpp
diffstat 2 files changed, 12 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- 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]);
--- 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);
 }