diff src/Analyser.cpp @ 165:ebcfb8dce020

Replace previous candidates when making a new analysis. Also revert to built-in spectrogram for now (CQ is still pending)
author Chris Cannam
date Fri, 31 Jan 2014 17:54:49 +0000
parents 62ceae757fe0
children 6b6906017536
line wrap: on
line diff
--- a/src/Analyser.cpp	Thu Jan 30 17:33:55 2014 +0000
+++ b/src/Analyser.cpp	Fri Jan 31 17:54:49 2014 +0000
@@ -72,6 +72,9 @@
     m_paneStack = paneStack;
     m_pane = pane;
 
+    m_reAnalysingSelection = Selection();
+    m_reAnalysisCandidates.clear();
+
     // Note that we need at least one main-model layer (time ruler,
     // waveform or what have you). It could be hidden if we don't want
     // to see it but it must exist.
@@ -99,14 +102,9 @@
 }
 
 QString
-Analyser::reAnalyseSelection(Selection sel)
-{
-    return addTestCandidates(sel);
-}
-
-QString
 Analyser::addVisualisations()
 {
+/*
     TransformFactory *tf = TransformFactory::getInstance();
 
     QString name = "Constant-Q";
@@ -129,15 +127,16 @@
         (m_document->createDerivedLayer(transform, m_fileModel));
 
     if (!spectrogram) return tr("Transform \"%1\" did not run correctly (no layer or wrong layer type returned)").arg(base + out);
-    
-/*
+*/    
+
     SpectrogramLayer *spectrogram = qobject_cast<SpectrogramLayer *>
         (m_document->createMainModelLayer(LayerFactory::MelodicRangeSpectrogram));
-*/
+
     spectrogram->setColourMap((int)ColourMapper::BlackOnWhite);
     spectrogram->setNormalizeHybrid(true);
-    spectrogram->setSmooth(true);
-    spectrogram->setGain(0.5); //!!! arbitrary at this point
+//    spectrogram->setSmooth(true);
+//    spectrogram->setGain(0.5); //!!! arbitrary at this point
+    spectrogram->setGain(100);
     m_document->addLayerToView(m_pane, spectrogram);
     spectrogram->setLayerDormant(m_pane, true);
 
@@ -247,8 +246,18 @@
 }
 
 QString
-Analyser::addTestCandidates(Selection sel)
+Analyser::reAnalyseSelection(Selection sel)
 {
+    if (sel == m_reAnalysingSelection) return "";
+
+    foreach (Layer *layer, m_reAnalysisCandidates) {
+        cerr << "deleting previous candidate layer " << layer << endl;
+        m_pane->removeLayer(layer);
+        m_document->deleteLayer(layer); // also releases its model
+    }
+    m_reAnalysisCandidates.clear();
+    m_reAnalysingSelection = sel;
+
     TransformFactory *tf = TransformFactory::getInstance();
     
     QString plugname = "pYIN";
@@ -293,14 +302,23 @@
 Analyser::layersCreated(vector<Layer *> primary,
                         vector<Layer *> additional)
 {
+    //!!! how do we know these came from the right selection? user
+    //!!! might have made another one since this request was issued
+
     for (int i = 0; i < (int)primary.size(); ++i) {
         TimeValueLayer *t = qobject_cast<TimeValueLayer *>(primary[i]);
-        if (t) m_document->addLayerToView(m_pane, t);
+        if (t) {
+            m_document->addLayerToView(m_pane, t);
+            m_reAnalysisCandidates.push_back(t);
+        }
     }
 
     for (int i = 0; i < (int)additional.size(); ++i) {
         TimeValueLayer *t = qobject_cast<TimeValueLayer *>(additional[i]);
-        if (t) m_document->addLayerToView(m_pane, t);
+        if (t) {
+            m_document->addLayerToView(m_pane, t);
+            m_reAnalysisCandidates.push_back(t);
+        }
     }
 }