comparison dsp/rateconversion/Resampler.cpp @ 140:ce50eef47bdf

Latency fix etc
author Chris Cannam
date Mon, 14 Oct 2013 08:19:45 +0100
parents 7fe0da91e9c3
children 54c9e0811ae7
comparison
equal deleted inserted replaced
139:7fe0da91e9c3 140:ce50eef47bdf
50 kw.cut(filter); 50 kw.cut(filter);
51 51
52 int inputSpacing = m_targetRate / m_gcd; 52 int inputSpacing = m_targetRate / m_gcd;
53 int outputSpacing = m_sourceRate / m_gcd; 53 int outputSpacing = m_sourceRate / m_gcd;
54 54
55 m_latency = int((m_filterLength / 2) / outputSpacing); 55 m_latency = int(ceil((m_filterLength / 2.0) / outputSpacing));
56 56
57 int bufferLength = 0; 57 int bufferLength = 0;
58 58
59 m_phaseData = new Phase[inputSpacing]; 59 m_phaseData = new Phase[inputSpacing];
60 60
128 { 128 {
129 int m = 0; 129 int m = 0;
130 int offset = 0; 130 int offset = 0;
131 131
132 while (remaining >= m_phaseData[m_phase].take) { 132 while (remaining >= m_phaseData[m_phase].take) {
133 std::cerr << "remaining = " << remaining << ", m = " << m << ", take = " << m_phaseData[m_phase].take << std::endl; 133 // std::cerr << "remaining = " << remaining << ", m = " << m << ", take = " << m_phaseData[m_phase].take << std::endl;
134 int advance = m_phaseData[m_phase].take; 134 int advance = m_phaseData[m_phase].take;
135 dst[m] = reconstructOne(src + offset); 135 dst[m] = reconstructOne(src + offset);
136 offset += advance; 136 offset += advance;
137 remaining -= advance; 137 remaining -= advance;
138 m_phase = m_phaseData[m_phase].nextPhase; 138 m_phase = m_phaseData[m_phase].nextPhase;
139 std::cerr << "remaining -> " << remaining << ", new phase has advance " << m_phaseData[m_phase].take << std::endl; 139 // std::cerr << "remaining -> " << remaining << ", new phase has advance " << m_phaseData[m_phase].take << std::endl;
140 ++m; 140 ++m;
141 } 141 }
142 142
143 if (remaining > 0) { 143 // if (remaining > 0) {
144 std::cerr << "have " << remaining << " spare, pushing to buffer" << std::endl; 144 // std::cerr << "have " << remaining << " spare, pushing to buffer" << std::endl;
145 } 145 // }
146 146
147 for (int i = 0; i < remaining; ++i) { 147 for (int i = 0; i < remaining; ++i) {
148 m_buffer.push_back(src[offset + i]); 148 m_buffer.push_back(src[offset + i]);
149 } 149 }
150 150