comparison plugins/OnsetDetect.cpp @ 153:38502a1595ff

Update for new DetectionFunction api
author Chris Cannam <c.cannam@qmul.ac.uk>
date Mon, 21 Oct 2013 12:02:51 +0100
parents dcf5800f0f00
children 855c91bfc912
comparison
equal deleted inserted replaced
152:979281679a39 153:38502a1595ff
349 << "OnsetDetector has not been initialised" 349 << "OnsetDetector has not been initialised"
350 << endl; 350 << endl;
351 return FeatureSet(); 351 return FeatureSet();
352 } 352 }
353 353
354 size_t len = m_d->dfConfig.frameLength / 2; 354 size_t len = m_d->dfConfig.frameLength / 2 + 1;
355 355
356 // float mean = 0.f; 356 // float mean = 0.f;
357 // for (size_t i = 0; i < len; ++i) { 357 // for (size_t i = 0; i < len; ++i) {
358 //// std::cerr << inputBuffers[0][i] << " "; 358 //// std::cerr << inputBuffers[0][i] << " ";
359 // mean += inputBuffers[0][i]; 359 // mean += inputBuffers[0][i];
363 363
364 // std::cerr << "OnsetDetector::process(" << timestamp << "): " 364 // std::cerr << "OnsetDetector::process(" << timestamp << "): "
365 // << "dftype " << m_dfType << ", sens " << m_sensitivity 365 // << "dftype " << m_dfType << ", sens " << m_sensitivity
366 // << ", len " << len << ", mean " << mean << std::endl; 366 // << ", len " << len << ", mean " << mean << std::endl;
367 367
368 double *magnitudes = new double[len]; 368 double *reals = new double[len];
369 double *phases = new double[len]; 369 double *imags = new double[len];
370 370
371 // We only support a single input channel 371 // We only support a single input channel
372 372
373 for (size_t i = 0; i < len; ++i) { 373 for (size_t i = 0; i < len; ++i) {
374 374 reals[i] = inputBuffers[0][i*2];
375 magnitudes[i] = sqrt(inputBuffers[0][i*2 ] * inputBuffers[0][i*2 ] + 375 imags[i] = inputBuffers[0][i*2+1];
376 inputBuffers[0][i*2+1] * inputBuffers[0][i*2+1]); 376 }
377 377
378 phases[i] = atan2(-inputBuffers[0][i*2+1], inputBuffers[0][i*2]); 378 double output = m_d->df->processFrequencyDomain(reals, imags);
379 } 379
380 380 delete[] reals;
381 double output = m_d->df->process(magnitudes, phases); 381 delete[] imags;
382
383 delete[] magnitudes;
384 delete[] phases;
385 382
386 if (m_d->dfOutput.empty()) m_d->origin = timestamp; 383 if (m_d->dfOutput.empty()) m_d->origin = timestamp;
387 384
388 m_d->dfOutput.push_back(output); 385 m_d->dfOutput.push_back(output);
389 386