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);