Mercurial > hg > qm-vamp-plugins
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 |