Mercurial > hg > tony
changeset 164:62ceae757fe0
Re-analyse frames when selection changes (this only pulls up a set of new candidates for now, can't do anything with them and the old ones are never removed)
author | Chris Cannam |
---|---|
date | Thu, 30 Jan 2014 17:33:55 +0000 |
parents | ec196bd2f068 |
children | ebcfb8dce020 |
files | .hgsubstate src/Analyser.cpp src/Analyser.h src/MainWindow.cpp src/MainWindow.h |
diffstat | 5 files changed, 57 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgsubstate Wed Jan 29 17:34:28 2014 +0000 +++ b/.hgsubstate Thu Jan 30 17:33:55 2014 +0000 @@ -2,4 +2,4 @@ 27d4e7152c954bf3c4387319db088fb3cd02436b sv-dependency-builds f72d58d1ccb0736f4ab40853986d5952e0dd8321 svapp a2689db084f49daf0dcac1bea13d33c51f600266 svcore -5f9c0147d1d6302edac372e4d5747ae615d57638 svgui +15b5c679b90924f4bdfc0afac2c97355d841bfbe svgui
--- a/src/Analyser.cpp Wed Jan 29 17:34:28 2014 +0000 +++ b/src/Analyser.cpp Thu Jan 30 17:33:55 2014 +0000 @@ -88,9 +88,6 @@ error = addAnalyses(); if (error != "") return error; - error = addTestCandidates(); - if (error != "") return error; - loadState(Audio); loadState(PitchTrack); loadState(Notes); @@ -102,6 +99,12 @@ } QString +Analyser::reAnalyseSelection(Selection sel) +{ + return addTestCandidates(sel); +} + +QString Analyser::addVisualisations() { TransformFactory *tf = TransformFactory::getInstance(); @@ -244,7 +247,7 @@ } QString -Analyser::addTestCandidates() +Analyser::addTestCandidates(Selection sel) { TransformFactory *tf = TransformFactory::getInstance(); @@ -264,8 +267,20 @@ t.setStepSize(256); t.setBlockSize(2048); - t.setStartTime(RealTime::fromSeconds(10.785)); - t.setDuration(RealTime::fromSeconds(1.2)); + RealTime start = RealTime::frame2RealTime + (sel.getStartFrame(), m_fileModel->getSampleRate()); + + RealTime end = RealTime::frame2RealTime + (sel.getEndFrame(), m_fileModel->getSampleRate()); + + RealTime duration; + + if (sel.getEndFrame() > sel.getStartFrame()) { + duration = end - start; + } + + t.setStartTime(start); + t.setDuration(duration); transforms.push_back(t);
--- a/src/Analyser.h Wed Jan 29 17:34:28 2014 +0000 +++ b/src/Analyser.h Thu Jan 30 17:33:55 2014 +0000 @@ -22,6 +22,7 @@ #include <vector> #include "framework/Document.h" +#include "base/Selection.h" class WaveFileModel; class Pane; @@ -82,6 +83,13 @@ void getEnclosingSelectionScope(size_t f, size_t &f0, size_t &f1); + /** + * Analyse the selection and add candidates layers for the region + * it contains. Returns "" on success or a user-readable error + * string on failure. + */ + QString reAnalyseSelection(Selection sel); + signals: void layersChanged(); @@ -96,7 +104,7 @@ QString addWaveform(); QString addAnalyses(); - QString addTestCandidates(); + QString addTestCandidates(Selection sel); // Document::LayerCreationHandler method void layersCreated(std::vector<Layer *>, std::vector<Layer *>);
--- a/src/MainWindow.cpp Wed Jan 29 17:34:28 2014 +0000 +++ b/src/MainWindow.cpp Thu Jan 30 17:33:55 2014 +0000 @@ -147,6 +147,9 @@ m_viewManager->setShowCentreLine(false); m_viewManager->setOverlayMode(ViewManager::MinimalOverlays); + connect(m_viewManager, SIGNAL(selectionChanged()), + this, SLOT(selectionChanged())); + QFrame *frame = new QFrame; setCentralWidget(frame); @@ -1623,7 +1626,27 @@ cerr << "MainWindow::doubleClickSelectInvoked(" << frame << "): [" << f0 << "," << f1 << "]" << endl; - m_viewManager->setSelection(Selection(f0, f1)); + Selection sel(f0, f1); + m_viewManager->setSelection(sel); +} + +void +MainWindow::selectionChanged() +{ + MultiSelection::SelectionList selections = m_viewManager->getSelections(); + + cerr << "MainWindow::selectionChanged" << endl; + + if (!selections.empty()) { + Selection sel = *selections.begin(); + cerr << "MainWindow::selectionChanged: have selection" << endl; + QString error = m_analyser->reAnalyseSelection(sel); + if (error != "") { + QMessageBox::critical + (this, tr("Failed to analyse selection"), + tr("<b>Analysis failed</b><p>%2</p>").arg(error)); + } + } } void