changeset 83:4db051a704b2 tonioni_multi_transform

Make use of multi-transform support
author Chris Cannam
date Mon, 02 Dec 2013 15:06:47 +0000
parents 92e8231466a8
children 0cbe560f0fa1 ff797e8967b6
files .hgsubstate src/Analyser.cpp src/Analyser.h
diffstat 3 files changed, 62 insertions(+), 100 deletions(-) [+]
line wrap: on
line diff
--- a/.hgsubstate	Mon Dec 02 12:30:08 2013 +0000
+++ b/.hgsubstate	Mon Dec 02 15:06:47 2013 +0000
@@ -1,4 +1,4 @@
 236814e07bd07473958c1ff89103124536a0c3c8 dataquay
-19282182e60dab3e8fe3a666525579ddf80ea653 svapp
+1e61f0c26593467bd21f4eda3dc168c048ce4897 svapp
 dba8a02b0413335ee34cf302aef7754daebd0b8d svcore
 212644efa523f61316450bc6ee92f3f5158f68f3 svgui
--- a/src/Analyser.cpp	Mon Dec 02 12:30:08 2013 +0000
+++ b/src/Analyser.cpp	Mon Dec 02 15:06:47 2013 +0000
@@ -29,12 +29,28 @@
 #include "layer/ColourDatabase.h"
 #include "layer/LayerFactory.h"
 
+#include <QSettings>
+
 Analyser::Analyser() :
     m_document(0),
     m_fileModel(0),
     m_pane(0),
     m_flexiNoteLayer(0)
 {
+    QSettings settings;
+    settings.beginGroup("LayerDefaults");
+    settings.setValue
+        ("timevalues",
+         QString("<layer verticalScale=\"%1\" plotStyle=\"%2\" "
+                 "scaleMinimum=\"%3\" scaleMaximum=\"%4\"/>")
+         .arg(int(TimeValueLayer::LogScale))
+         .arg(int(TimeValueLayer::PlotDiscreteCurves))
+         .arg(27.5f).arg(880.f)); // temporary values: better get the real extents of the data from the model
+    settings.setValue
+        ("flexinotes",
+         QString("<layer verticalScale=\"%1\"/>")
+         .arg(int(FlexiNoteLayer::AutoAlignScale)));
+    settings.endGroup();
 }
 
 Analyser::~Analyser()
@@ -49,14 +65,9 @@
     m_fileModel = model;
     m_pane = pane;
 
-    TransformId f0 = "vamp:pyin:pyin:smoothedpitchtrack";
-    TransformId notes = "vamp:pyin:pyin:notes";
-
-    // TransformId f0 = "vamp:yintony:yintony:notepitchtrack";
-    // TransformId notes = "vamp:yintony:yintony:notes";
-
-    // TransformId f0 = "vamp:cepstral-pitchtracker:cepstral-pitchtracker:f0";
-    // TransformId notes = "vamp:cepstral-pitchtracker:cepstral-pitchtracker:notes";
+    QString base = "vamp:pyin:pyin:";
+    QString f0out = "smoothedpitchtrack";
+    QString noteout = "notes";
 
     // We don't want a waveform in the main pane. We must have a
     // main-model layer of some sort, but the layers created by
@@ -67,96 +78,52 @@
     m_document->addLayerToView
 	(m_pane, m_document->createMainModelLayer(LayerFactory::TimeRuler));
 
-    Layer *layer = 0;
-
-    layer = addLayerFor(f0);
-
-    if (layer) {
-	TimeValueLayer *tvl = qobject_cast<TimeValueLayer *>(layer);
-	if (tvl) {
-        tvl->setPlotStyle(TimeValueLayer::PlotDiscreteCurves);
-        // tvl->setPlotStyle(TimeValueLayer::PlotPoints);
-	    tvl->setBaseColour(ColourDatabase::getInstance()->
-			       getColourIndex(QString("Black")));
-			tvl->setVerticalScale(TimeValueLayer::LogScale);
-			tvl->setDisplayExtents(27.5f,880.f); // temporary values: better get the real extents of the data form the model
-	}
+    Transforms transforms;
+    
+    TransformFactory *tf = TransformFactory::getInstance();
+    if (!tf->haveTransform(base + f0out) || !tf->haveTransform(base + noteout)) {
+        std::cerr << "ERROR: Analyser::newFileLoaded: Transform unknown" << std::endl;
+	return;
     }
 
-    layer = addLayerForNotes(notes);
+    Transform t = tf->getDefaultTransformFor
+        (base + f0out, m_fileModel->getSampleRate());
+    t.setStepSize(256);
+    t.setBlockSize(2048);
 
-    if (layer) {
-	FlexiNoteLayer *nl = qobject_cast<FlexiNoteLayer *>(layer);
-	if (nl) {
-	    m_flexiNoteLayer = nl;
-	    nl->setBaseColour(ColourDatabase::getInstance()->
-			      getColourIndex(QString("Bright Blue")));
-            nl->setVerticalScale(FlexiNoteLayer::AutoAlignScale);
-            // nl->setDisplayExtents(80.f,600.f); // temporary values: better get the real extents of the data form the model
-	}
+    transforms.push_back(t);
+
+    t.setOutput(noteout);
+    
+    transforms.push_back(t);
+
+    std::vector<Layer *> layers =
+        m_document->createDerivedLayers(transforms, m_fileModel);
+
+    if (!layers.empty()) {
+
+        ColourDatabase *cdb = ColourDatabase::getInstance();
+
+        for (int i = 0; i < (int)layers.size(); ++i) {
+
+            SingleColourLayer *scl = dynamic_cast<SingleColourLayer *>
+                (layers[i]);
+
+            if (scl) {
+                if (i == 0) {
+                    scl->setBaseColour(cdb->getColourIndex(tr("Black")));
+                } else {
+                    scl->setBaseColour(cdb->getColourIndex(tr("Bright Blue")));
+                }
+            }
+
+            m_document->addLayerToView(m_pane, layers[i]);
+        }
+
+        m_flexiNoteLayer = dynamic_cast<FlexiNoteLayer *>
+            (layers[layers.size()-1]);
+        paneStack->setCurrentLayer(m_pane, m_flexiNoteLayer);
     }
-
-    paneStack->setCurrentLayer(m_pane, layer);
-}
-
-Layer *
-Analyser::addLayerFor(TransformId id)
-{
-    TransformFactory *tf = TransformFactory::getInstance();
-
-    if (!tf->haveTransform(id)) {
-	std::cerr << "ERROR: Analyser::addLayerFor(" << id << "): Transform unknown" << std::endl;
-	return 0;
-    }
-    
-    Transform transform = tf->getDefaultTransformFor
-	(id, m_fileModel->getSampleRate());
-	
-    transform.setStepSize(256);
-    transform.setBlockSize(2048);
-	
-    ModelTransformer::Input input(m_fileModel, -1);
-    
-    Layer *layer;
-    layer = m_document->createDerivedLayer(transform, m_fileModel);
-
-    if (layer) {
-		m_document->addLayerToView(m_pane, layer);
-    } else {
-		std::cerr << "ERROR: Analyser::addLayerFor: Cound not create layer. " << std::endl;
-	}
-
-    return layer;
-}
-
-Layer *
-Analyser::addLayerForNotes(TransformId id)
-{
-    TransformFactory *tf = TransformFactory::getInstance();
-
-    if (!tf->haveTransform(id)) {
-	std::cerr << "ERROR: Analyser::addLayerFor(" << id << "): Transform unknown" << std::endl;
-	return 0;
-    }
-    
-    Transform transform = tf->getDefaultTransformFor
-	(id, m_fileModel->getSampleRate());
-	
-    transform.setStepSize(256);
-    transform.setBlockSize(2048);
-	
-    ModelTransformer::Input input(m_fileModel, -1);
-
-    Layer *layer;
-    layer = m_document->createDerivedLayer(transform, m_fileModel);
-
-    if (layer) {
-        m_document->addLayerToView(m_pane, layer);
-    } else {
-        std::cerr << "ERROR: Analyser::addLayerForNotes: Cound not create layer type(" << preferredLayer << ")" << std::endl;
-    }
-
-    return layer;
 }
 
 void
--- a/src/Analyser.h	Mon Dec 02 12:30:08 2013 +0000
+++ b/src/Analyser.h	Mon Dec 02 15:06:47 2013 +0000
@@ -47,11 +47,6 @@
     WaveFileModel *m_fileModel;
     Pane *m_pane;
     FlexiNoteLayer *m_flexiNoteLayer;
-
-    Layer *addLayerFor(TransformId);
-    Layer *addLayerForNotes(TransformId);
-	LayerFactory::LayerType preferredLayer;
-
 };
 
 #endif