Mercurial > hg > qm-vamp-plugins
comparison plugins/ConstantQSpectrogram.cpp @ 17:d4a92aab8147
* Fix a buffer overrun and some compile warnings
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Thu, 30 Nov 2006 14:53:29 +0000 |
parents | 2fbfe5e42ad4 |
children | 99dadc93042e |
comparison
equal
deleted
inserted
replaced
16:2fbfe5e42ad4 | 17:d4a92aab8147 |
---|---|
17 using std::cerr; | 17 using std::cerr; |
18 using std::endl; | 18 using std::endl; |
19 | 19 |
20 ConstantQSpectrogram::ConstantQSpectrogram(float inputSampleRate) : | 20 ConstantQSpectrogram::ConstantQSpectrogram(float inputSampleRate) : |
21 Vamp::Plugin(inputSampleRate), | 21 Vamp::Plugin(inputSampleRate), |
22 m_bins(1), | |
22 m_cq(0), | 23 m_cq(0), |
23 m_step(0), | 24 m_step(0), |
24 m_block(0), | 25 m_block(0) |
25 m_bins(1) | |
26 { | 26 { |
27 m_minMIDIPitch = 12; | 27 m_minMIDIPitch = 12; |
28 m_maxMIDIPitch = 96; | 28 m_maxMIDIPitch = 96; |
29 m_tuningFrequency = 440; | 29 m_tuningFrequency = 440; |
30 m_normalized = true; | 30 m_normalized = true; |
265 | 265 |
266 const char *names[] = | 266 const char *names[] = |
267 { "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B" }; | 267 { "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B" }; |
268 | 268 |
269 if (m_bpo == 12) { | 269 if (m_bpo == 12) { |
270 for (int i = 0; i < d.binCount; ++i) { | 270 for (int i = 0; i < int(d.binCount); ++i) { |
271 int ipc = m_minMIDIPitch % 12; | 271 int ipc = m_minMIDIPitch % 12; |
272 int index = (i + ipc) % 12; | 272 int index = (i + ipc) % 12; |
273 d.binNames.push_back(names[index]); | 273 d.binNames.push_back(names[index]); |
274 } | 274 } |
275 } else { | 275 } else { |
323 double *cqre = new double[m_bins]; | 323 double *cqre = new double[m_bins]; |
324 double *cqim = new double[m_bins]; | 324 double *cqim = new double[m_bins]; |
325 | 325 |
326 for (size_t i = 0; i < m_block/2; ++i) { | 326 for (size_t i = 0; i < m_block/2; ++i) { |
327 real[i] = inputBuffers[0][i*2]; | 327 real[i] = inputBuffers[0][i*2]; |
328 real[m_block - i] = real[i]; | 328 if (i > 0) real[m_block - i] = real[i]; |
329 imag[i] = inputBuffers[0][i*2+1]; | 329 imag[i] = inputBuffers[0][i*2+1]; |
330 imag[m_block - i] = imag[i]; | 330 if (i > 0) imag[m_block - i] = imag[i]; |
331 } | 331 } |
332 | 332 |
333 m_cq->process(real, imag, cqre, cqim); | 333 m_cq->process(real, imag, cqre, cqim); |
334 | 334 |
335 delete[] real; | 335 delete[] real; |
336 delete[] imag; | 336 delete[] imag; |
337 | 337 |
338 Feature feature; | 338 Feature feature; |
339 feature.hasTimestamp = false; | 339 feature.hasTimestamp = false; |
340 for (size_t i = 0; i < m_bins; ++i) { | 340 for (int i = 0; i < m_bins; ++i) { |
341 double re = cqre[i]; | 341 double re = cqre[i]; |
342 double im = cqim[i]; | 342 double im = cqim[i]; |
343 if (isnan(re)) re = 0.0; | 343 if (isnan(re)) re = 0.0; |
344 if (isnan(im)) im = 0.0; | 344 if (isnan(im)) im = 0.0; |
345 double value = sqrt(re * re + im * im); | 345 double value = sqrt(re * re + im * im); |