# HG changeset patch # User Chris Cannam # Date 1180710475 0 # Node ID 56fe3bd9de6ea114fc4eaed67546810aca1124d2 # Parent b300de89ea30cd2f3b2773d3f191060c4cce7875 * Add programs to onset detector. Not quite sure about this. diff -r b300de89ea30 -r 56fe3bd9de6e plugins/BeatTrack.cpp --- a/plugins/BeatTrack.cpp Wed May 23 15:21:53 2007 +0000 +++ b/plugins/BeatTrack.cpp Fri Jun 01 15:07:55 2007 +0000 @@ -164,7 +164,7 @@ } if (blockSize != getPreferredBlockSize()) { - std::cerr << "WARNING: BeatTracker::initialise: Unsupported block size for this sample rate: " + std::cerr << "WARNING: BeatTracker::initialise: Sub-optimal block size for this sample rate: " << blockSize << " (wanted " << getPreferredBlockSize() << ")" << std::endl; // return false; } diff -r b300de89ea30 -r 56fe3bd9de6e plugins/OnsetDetect.cpp --- a/plugins/OnsetDetect.cpp Wed May 23 15:21:53 2007 +0000 +++ b/plugins/OnsetDetect.cpp Fri Jun 01 15:07:55 2007 +0000 @@ -159,6 +159,41 @@ } } +OnsetDetector::ProgramList +OnsetDetector::getPrograms() const +{ + ProgramList programs; + programs.push_back("General purpose"); + programs.push_back("Soft onsets"); + programs.push_back("Percussive onsets"); + return programs; +} + +std::string +OnsetDetector::getCurrentProgram() const +{ + if (m_program == "") return "General purpose"; + else return m_program; +} + +void +OnsetDetector::selectProgram(std::string program) +{ + if (program == "General purpose") { + setParameter("dftype", 3); // complex + setParameter("sensitivity", 50); + } else if (program == "Soft onsets") { + setParameter("dftype", 2); // phase deviation + setParameter("sensitivity", 70); + } else if (program == "Percussive onsets") { + setParameter("dftype", 4); // broadband energy rise + setParameter("sensitivity", 40); + } else { + return; + } + m_program = program; +} + bool OnsetDetector::initialise(size_t channels, size_t stepSize, size_t blockSize) { @@ -181,7 +216,7 @@ } if (blockSize != getPreferredBlockSize()) { - std::cerr << "WARNING: OnsetDetector::initialise: Unsupported block size for this sample rate: " + std::cerr << "WARNING: OnsetDetector::initialise: Sub-optimal block size for this sample rate: " << blockSize << " (wanted " << (getPreferredBlockSize()) << ")" << std::endl; // return false; } @@ -268,7 +303,7 @@ OnsetDetector::FeatureSet OnsetDetector::process(const float *const *inputBuffers, - Vamp::RealTime /* timestamp */) + Vamp::RealTime timestamp) { if (!m_d) { cerr << "ERROR: OnsetDetector::process: " @@ -279,6 +314,18 @@ size_t len = m_d->dfConfig.frameLength / 2; +// float mean = 0.f; +// for (size_t i = 0; i < len; ++i) { +//// std::cerr << inputBuffers[0][i] << " "; +// mean += inputBuffers[0][i]; +// } +//// std::cerr << std::endl; +// mean /= len; + +// std::cerr << "OnsetDetector::process(" << timestamp << "): " +// << "dftype " << m_dfType << ", sens " << m_sensitivity +// << ", len " << len << ", mean " << mean << std::endl; + double *magnitudes = new double[len]; double *phases = new double[len]; @@ -305,6 +352,8 @@ feature.hasTimestamp = false; feature.values.push_back(output); +// std::cerr << "df: " << output << std::endl; + returnFeatures[1].push_back(feature); // detection function is output 1 return returnFeatures; } diff -r b300de89ea30 -r 56fe3bd9de6e plugins/OnsetDetect.h --- a/plugins/OnsetDetect.h Wed May 23 15:21:53 2007 +0000 +++ b/plugins/OnsetDetect.h Fri Jun 01 15:07:55 2007 +0000 @@ -36,6 +36,10 @@ float getParameter(std::string) const; void setParameter(std::string, float); + ProgramList getPrograms() const; + std::string getCurrentProgram() const; + void selectProgram(std::string program); + size_t getPreferredStepSize() const; size_t getPreferredBlockSize() const; @@ -50,6 +54,7 @@ OnsetDetectorData *m_d; int m_dfType; float m_sensitivity; + std::string m_program; static float m_stepSecs; };