diff src/Analyser.cpp @ 572:3f0b44418a19 by-id

Toward using ModelById logic (incomplete)
author Chris Cannam
date Mon, 08 Jul 2019 14:12:08 +0100
parents c6c8c1645ab6
children 5c14493026da
line wrap: on
line diff
--- a/src/Analyser.cpp	Thu Jun 20 11:10:59 2019 +0100
+++ b/src/Analyser.cpp	Mon Jul 08 14:12:08 2019 +0100
@@ -41,7 +41,6 @@
 
 Analyser::Analyser() :
     m_document(0),
-    m_fileModel(0),
     m_paneStack(0),
     m_pane(0),
     m_currentCandidate(-1),
@@ -69,7 +68,7 @@
 }
 
 QString
-Analyser::newFileLoaded(Document *doc, WaveFileModel *model,
+Analyser::newFileLoaded(Document *doc, ModelId model,
 			PaneStack *paneStack, Pane *pane)
 {
     m_document = doc;
@@ -77,7 +76,9 @@
     m_paneStack = paneStack;
     m_pane = pane;
 
-    if (!m_fileModel) return "Internal error: Analyser::newFileLoaded() called with no model present";
+    if (!ModelById::isa<WaveFileModel>(m_fileModel)) {
+        return "Internal error: Analyser::newFileLoaded() called with no model, or a non-WaveFileModel";
+    }
     
     connect(doc, SIGNAL(layerAboutToBeDeleted(Layer *)),
             this, SLOT(layerAboutToBeDeleted(Layer *)));
@@ -97,7 +98,7 @@
 
     if (!m_pane) return "Internal error: Analyser::analyseExistingFile() called with no pane present";
 
-    if (!m_fileModel) return "Internal error: Analyser::analyseExistingFile() called with no model present";
+    if (m_fileModel.isNone()) return "Internal error: Analyser::analyseExistingFile() called with no model present";
     
     if (m_layers[PitchTrack]) {
         m_document->removeLayerFromView(m_pane, m_layers[PitchTrack]);
@@ -229,7 +230,7 @@
 QString
 Analyser::addVisualisations()
 {
-    if (!m_fileModel) return "Internal error: Analyser::addVisualisations() called with no model present";
+    if (m_fileModel.isNone()) return "Internal error: Analyser::addVisualisations() called with no model present";
 
     // A spectrogram, off by default. Must go at the back because it's
     // opaque
@@ -329,6 +330,11 @@
 QString
 Analyser::addAnalyses()
 {
+    auto waveFileModel = ModelById::getAs<WaveFileModel>(m_fileModel);
+    if (!waveFileModel) {
+        return "Internal error: Analyser::addAnalyses() called with no model present";
+    }
+    
     // As with the spectrogram above, if these layers exist we use
     // them
     TimeValueLayer *existingPitch = 0;
@@ -395,7 +401,7 @@
     settings.endGroup();
 
     Transform t = tf->getDefaultTransformFor
-        (base + f0out, m_fileModel->getSampleRate());
+        (base + f0out, waveFileModel->getSampleRate());
     t.setStepSize(256);
     t.setBlockSize(2048);
 
@@ -508,6 +514,11 @@
 {
     QMutexLocker locker(&m_asyncMutex);
 
+    auto waveFileModel = ModelById::getAs<WaveFileModel>(m_fileModel);
+    if (!waveFileModel) {
+        return "Internal error: Analyser::reAnalyseSelection() called with no model present";
+    }
+    
     if (!m_reAnalysingSelection.isEmpty()) {
         if (sel == m_reAnalysingSelection && range == m_reAnalysingRange) {
             cerr << "selection & range are same as current analysis, ignoring" << endl;
@@ -558,7 +569,7 @@
     }
 
     Transform t = tf->getDefaultTransformFor
-        (base + out, m_fileModel->getSampleRate());
+        (base + out, waveFileModel->getSampleRate());
     t.setStepSize(256);
     t.setBlockSize(2048);
 
@@ -580,8 +591,8 @@
     } else {
         endSample   -= 9*grid; // MM says: not sure what the CHP plugin does there
     }
-    RealTime start = RealTime::frame2RealTime(startSample, m_fileModel->getSampleRate()); 
-    RealTime end = RealTime::frame2RealTime(endSample, m_fileModel->getSampleRate());
+    RealTime start = RealTime::frame2RealTime(startSample, waveFileModel->getSampleRate()); 
+    RealTime end = RealTime::frame2RealTime(endSample, waveFileModel->getSampleRate());
 
     RealTime duration;
 
@@ -602,7 +613,7 @@
     transforms.push_back(t);
     
     m_currentAsyncHandle =
-        m_document->createDerivedLayersAsync(transforms, m_fileModel, this);
+        m_document->createDerivedLayersAsync(transforms, ModelId, this);
 
     return "";
 }