changeset 162:cc9aa8f4fceb

Some CQ spectrogram parameters; add experimental candidate plugin process
author Chris Cannam
date Tue, 28 Jan 2014 18:34:11 +0000
parents afaa4af03b22
children ec196bd2f068
files .hgsubstate src/Analyser.cpp src/Analyser.h
diffstat 3 files changed, 75 insertions(+), 30 deletions(-) [+]
line wrap: on
line diff
--- a/.hgsubstate	Tue Jan 28 16:01:06 2014 +0000
+++ b/.hgsubstate	Tue Jan 28 18:34:11 2014 +0000
@@ -2,4 +2,4 @@
 27d4e7152c954bf3c4387319db088fb3cd02436b sv-dependency-builds
 d2c13ec0f1482e003d86c0ba3f7c5e5fbae6de08 svapp
 4dce43294740dc971bf16d2b98164097749bf814 svcore
-137d3ff48f73b9a6bac722491e8628f1721b8f3d svgui
+5f9c0147d1d6302edac372e4d5747ae615d57638 svgui
--- a/src/Analyser.cpp	Tue Jan 28 16:01:06 2014 +0000
+++ b/src/Analyser.cpp	Tue Jan 28 18:34:11 2014 +0000
@@ -86,6 +86,9 @@
     error = addAnalyses();
     if (error != "") return error;
 
+    error = addTestCandidates();
+    if (error != "") return error;
+
     loadState(Audio);
     loadState(PitchTrack);
     loadState(Notes);
@@ -115,6 +118,7 @@
 
     Transform transform = tf->getDefaultTransformFor
         (base + out, m_fileModel->getSampleRate());
+    transform.setParameter("bpo", 36);
 
     Colour3DPlotLayer *spectrogram = qobject_cast<Colour3DPlotLayer *>
         (m_document->createDerivedLayer(transform, m_fileModel));
@@ -126,6 +130,9 @@
         (m_document->createMainModelLayer(LayerFactory::MelodicRangeSpectrogram));
 */
     spectrogram->setColourMap((int)ColourMapper::BlackOnWhite);
+    spectrogram->setNormalizeHybrid(true);
+    spectrogram->setSmooth(true);
+    spectrogram->setGain(0.5); //!!! arbitrary at this point
     m_document->addLayerToView(m_pane, spectrogram);
     spectrogram->setLayerDormant(m_pane, true);
 
@@ -202,38 +209,74 @@
     std::vector<Layer *> layers =
         m_document->createDerivedLayers(transforms, m_fileModel);
 
-    if (!layers.empty()) {
+    for (int i = 0; i < (int)layers.size(); ++i) {
 
-        for (int i = 0; i < (int)layers.size(); ++i) {
-
-            FlexiNoteLayer *f = qobject_cast<FlexiNoteLayer *>(layers[i]);
-            TimeValueLayer *t = qobject_cast<TimeValueLayer *>(layers[i]);
-
-            if (f) m_layers[Notes] = f;
-            if (t) m_layers[PitchTrack] = t;
-
-            m_document->addLayerToView(m_pane, layers[i]);
-        }
-    
-        ColourDatabase *cdb = ColourDatabase::getInstance();
-
-        TimeValueLayer *pitchLayer = 
-            qobject_cast<TimeValueLayer *>(m_layers[PitchTrack]);
-        if (pitchLayer) {
-            pitchLayer->setBaseColour(cdb->getColourIndex(tr("Black")));
-            PlayParameters *params = pitchLayer->getPlayParameters();
-            if (params) params->setPlayPan(1);
-        }
-
-        FlexiNoteLayer *flexiNoteLayer = 
-            qobject_cast<FlexiNoteLayer *>(m_layers[Notes]);
-        if (flexiNoteLayer) {
-            flexiNoteLayer->setBaseColour(cdb->getColourIndex(tr("Bright Blue")));
-            PlayParameters *params = flexiNoteLayer->getPlayParameters();
-            if (params) params->setPlayPan(1);
-        }
+        FlexiNoteLayer *f = qobject_cast<FlexiNoteLayer *>(layers[i]);
+        TimeValueLayer *t = qobject_cast<TimeValueLayer *>(layers[i]);
+        
+        if (f) m_layers[Notes] = f;
+        if (t) m_layers[PitchTrack] = t;
+        
+        m_document->addLayerToView(m_pane, layers[i]);
     }
     
+    ColourDatabase *cdb = ColourDatabase::getInstance();
+    
+    TimeValueLayer *pitchLayer = 
+        qobject_cast<TimeValueLayer *>(m_layers[PitchTrack]);
+    if (pitchLayer) {
+        pitchLayer->setBaseColour(cdb->getColourIndex(tr("Black")));
+        PlayParameters *params = pitchLayer->getPlayParameters();
+        if (params) params->setPlayPan(1);
+    }
+    
+    FlexiNoteLayer *flexiNoteLayer = 
+        qobject_cast<FlexiNoteLayer *>(m_layers[Notes]);
+    if (flexiNoteLayer) {
+        flexiNoteLayer->setBaseColour(cdb->getColourIndex(tr("Bright Blue")));
+        PlayParameters *params = flexiNoteLayer->getPlayParameters();
+        if (params) params->setPlayPan(1);
+    }
+    
+    return "";
+}
+
+QString
+Analyser::addTestCandidates()
+{
+    TransformFactory *tf = TransformFactory::getInstance();
+    
+    QString plugname = "pYIN";
+    QString base = "vamp:pyin:localcandidatepyin:";
+    QString out = "pitchtrackcandidates";
+
+    Transforms transforms;
+
+    QString notFound = tr("Transform \"%1\" not found. Unable to perform interactive analysis.<br><br>Is the %2 Vamp plugin correctly installed?");
+    if (!tf->haveTransform(base + out)) {
+	return notFound.arg(base + out).arg(plugname);
+    }
+
+    Transform t = tf->getDefaultTransformFor
+        (base + out, m_fileModel->getSampleRate());
+    t.setStepSize(256);
+    t.setBlockSize(2048);
+
+    t.setStartTime(RealTime::fromSeconds(10.785));
+    t.setDuration(RealTime::fromSeconds(1.2));
+
+    transforms.push_back(t);
+
+    std::vector<Layer *> layers =
+        m_document->createDerivedLayers(transforms, m_fileModel);
+
+    std::cerr << "Analyser::addTestCandidates: Have " << layers.size() << " layer(s)" << std::endl;
+
+    for (int i = 0; i < (int)layers.size(); ++i) {
+        TimeValueLayer *t = qobject_cast<TimeValueLayer *>(layers[i]);
+        if (t) m_document->addLayerToView(m_pane, t);
+    }
+
     return "";
 }
 
--- a/src/Analyser.h	Tue Jan 28 16:01:06 2014 +0000
+++ b/src/Analyser.h	Tue Jan 28 18:34:11 2014 +0000
@@ -93,6 +93,8 @@
     QString addWaveform();
     QString addAnalyses();
 
+    QString addTestCandidates();
+
     void saveState(Component c) const;
     void loadState(Component c);
 };