Mercurial > hg > qm-vamp-plugins
changeset 29:56fe3bd9de6e
* Add programs to onset detector. Not quite sure about this.
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Fri, 01 Jun 2007 15:07:55 +0000 |
parents | b300de89ea30 |
children | ff5a09e45209 |
files | plugins/BeatTrack.cpp plugins/OnsetDetect.cpp plugins/OnsetDetect.h |
diffstat | 3 files changed, 57 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- 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; }
--- 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; }
--- 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; };