diff src/Analyser.cpp @ 402:a0eedd10dee3 cxx11-types

Merge from default branch
author Chris Cannam
date Mon, 23 Mar 2015 10:33:32 +0000
parents ffd1a89a68fa 6f7133733032
children cc33cdb114f6
line wrap: on
line diff
--- a/src/Analyser.cpp	Wed Mar 11 12:20:06 2015 +0000
+++ b/src/Analyser.cpp	Mon Mar 23 10:33:32 2015 +0000
@@ -374,7 +374,7 @@
 
     if (lowamp) {
         cerr << "setting parameters for lowamp suppression" << endl;
-        t.setParameter("lowampsuppression", 0.2f);
+        t.setParameter("lowampsuppression", 0.1f);
     } else {
         cerr << "setting parameters for no lowamp suppression" << endl;
         t.setParameter("lowampsuppression", 0.0f);
@@ -408,9 +408,9 @@
         pitchLayer->setBaseColour(cdb->getColourIndex(tr("Black")));
         PlayParameters *params = pitchLayer->getPlayParameters();
         if (params) params->setPlayPan(1);
+        connect(pitchLayer, SIGNAL(modelCompletionChanged()),
+                this, SLOT(layerCompletionChanged()));
     }
-    connect(pitchLayer, SIGNAL(modelCompletionChanged()),
-            this, SLOT(layerCompletionChanged()));
     
     FlexiNoteLayer *flexiNoteLayer = 
         qobject_cast<FlexiNoteLayer *>(m_layers[Notes]);
@@ -418,19 +418,47 @@
         flexiNoteLayer->setBaseColour(cdb->getColourIndex(tr("Bright Blue")));
         PlayParameters *params = flexiNoteLayer->getPlayParameters();
         if (params) params->setPlayPan(1);
+        connect(flexiNoteLayer, SIGNAL(modelCompletionChanged()),
+                this, SLOT(layerCompletionChanged()));
+        connect(flexiNoteLayer, SIGNAL(reAnalyseRegion(int, int, float, float)),
+                this, SLOT(reAnalyseRegion(int, int, float, float)));
+        connect(flexiNoteLayer, SIGNAL(materialiseReAnalysis()),
+                this, SLOT(materialiseReAnalysis()));
     }
-    connect(flexiNoteLayer, SIGNAL(modelCompletionChanged()),
-            this, SLOT(layerCompletionChanged()));
     
     return "";
 }
 
+void
+Analyser::reAnalyseRegion(int frame0, int frame1, float freq0, float freq1)
+{
+    cerr << "Analyser::reAnalyseRegion(" << frame0 << ", " << frame1
+         << ", " << freq0 << ", " << freq1 << ")" << endl;
+    showPitchCandidates(true);
+    (void)reAnalyseSelection(Selection(frame0, frame1),
+                             FrequencyRange(freq0, freq1));
+}
+
+void
+Analyser::materialiseReAnalysis()
+{
+    if (m_reAnalysingSelection.isEmpty()) return;
+    switchPitchCandidate(m_reAnalysingSelection, true); // or false, doesn't matter
+}
+
 QString
 Analyser::reAnalyseSelection(Selection sel, FrequencyRange range)
 {
     QMutexLocker locker(&m_asyncMutex);
 
-    if (sel == m_reAnalysingSelection || sel.isEmpty()) return "";
+    if (!m_reAnalysingSelection.isEmpty()) {
+        if (sel == m_reAnalysingSelection && range == m_reAnalysingRange) {
+            cerr << "selection & range are same as current analysis, ignoring" << endl;
+            return "";
+        }
+    }
+
+    if (sel.isEmpty()) return "";
 
     if (m_currentAsyncHandle) {
         m_document->cancelAsyncLayerCreation(m_currentAsyncHandle);
@@ -444,6 +472,7 @@
     }
 
     m_reAnalysingSelection = sel;
+    m_reAnalysingRange = range;
 
     m_preAnalysis = Clipboard();
     Layer *myLayer = m_layers[PitchTrack];