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