comparison src/MainWindow.cpp @ 192:431a95c9d14d

Calculate frequency constraint for region outlining (does not actually do the analysis correctly yet)
author Chris Cannam
date Wed, 05 Mar 2014 09:36:13 +0000
parents add7468a7ca1
children 34797795a76c
comparison
equal deleted inserted replaced
191:800e65412473 192:431a95c9d14d
32 #include "view/ViewManager.h" 32 #include "view/ViewManager.h"
33 #include "base/Preferences.h" 33 #include "base/Preferences.h"
34 #include "layer/WaveformLayer.h" 34 #include "layer/WaveformLayer.h"
35 #include "layer/TimeInstantLayer.h" 35 #include "layer/TimeInstantLayer.h"
36 #include "layer/TimeValueLayer.h" 36 #include "layer/TimeValueLayer.h"
37 #include "layer/SpectrogramLayer.h"
37 #include "widgets/Fader.h" 38 #include "widgets/Fader.h"
38 #include "view/Overview.h" 39 #include "view/Overview.h"
39 #include "widgets/AudioDial.h" 40 #include "widgets/AudioDial.h"
40 #include "widgets/IconLoader.h" 41 #include "widgets/IconLoader.h"
41 #include "widgets/KeyReference.h" 42 #include "widgets/KeyReference.h"
148 m_viewManager->setIlluminateLocalFeatures(true); 149 m_viewManager->setIlluminateLocalFeatures(true);
149 m_viewManager->setShowWorkTitle(true); 150 m_viewManager->setShowWorkTitle(true);
150 m_viewManager->setShowCentreLine(false); 151 m_viewManager->setShowCentreLine(false);
151 m_viewManager->setOverlayMode(ViewManager::MinimalOverlays); 152 m_viewManager->setOverlayMode(ViewManager::MinimalOverlays);
152 153
153 connect(m_viewManager, SIGNAL(selectionChanged()), 154 connect(m_viewManager, SIGNAL(selectionChangedByUser()),
154 this, SLOT(selectionChanged())); 155 this, SLOT(selectionChangedByUser()));
155 156
156 QFrame *frame = new QFrame; 157 QFrame *frame = new QFrame;
157 setCentralWidget(frame); 158 setCentralWidget(frame);
158 159
159 QGridLayout *layout = new QGridLayout; 160 QGridLayout *layout = new QGridLayout;
1781 1782
1782 CommandHistory::getInstance()->endCompoundOperation(); 1783 CommandHistory::getInstance()->endCompoundOperation();
1783 } 1784 }
1784 1785
1785 void 1786 void
1786 MainWindow::selectionChanged() 1787 MainWindow::selectionChangedByUser()
1787 { 1788 {
1788 MultiSelection::SelectionList selections = m_viewManager->getSelections(); 1789 MultiSelection::SelectionList selections = m_viewManager->getSelections();
1789 1790
1790 cerr << "MainWindow::selectionChanged" << endl; 1791 cerr << "MainWindow::selectionChangedByUser" << endl;
1791 1792
1792 m_analyser->showPitchCandidates(false); 1793 m_analyser->showPitchCandidates(m_pendingConstraint.isConstrained());
1793 1794
1794 if (!selections.empty()) { 1795 if (!selections.empty()) {
1795 Selection sel = *selections.begin(); 1796 Selection sel = *selections.begin();
1796 cerr << "MainWindow::selectionChanged: have selection" << endl; 1797 cerr << "MainWindow::selectionChangedByUser: have selection" << endl;
1797 QString error = m_analyser->reAnalyseSelection(sel); 1798 QString error = m_analyser->reAnalyseSelection
1799 (sel, m_pendingConstraint);
1798 if (error != "") { 1800 if (error != "") {
1799 QMessageBox::critical 1801 QMessageBox::critical
1800 (this, tr("Failed to analyse selection"), 1802 (this, tr("Failed to analyse selection"),
1801 tr("<b>Analysis failed</b><p>%2</p>").arg(error)); 1803 tr("<b>Analysis failed</b><p>%2</p>").arg(error));
1802 } 1804 }
1803 } 1805 }
1806
1807 m_pendingConstraint = Analyser::FrequencyRange();
1808 }
1809
1810 void
1811 MainWindow::regionOutlined(QRect r)
1812 {
1813 cerr << "MainWindow::regionOutlined(" << r.x() << "," << r.y() << "," << r.width() << "," << r.height() << ")" << endl;
1814
1815 Pane *pane = qobject_cast<Pane *>(sender());
1816 if (!pane) {
1817 cerr << "MainWindow::regionOutlined: not sent by pane, ignoring" << endl;
1818 return;
1819 }
1820
1821 if (!m_analyser) {
1822 cerr << "MainWindow::regionOutlined: no analyser, ignoring" << endl;
1823 return;
1824 }
1825
1826 SpectrogramLayer *spectrogram = qobject_cast<SpectrogramLayer *>
1827 (m_analyser->getLayer(Analyser::Spectrogram));
1828 if (!spectrogram) {
1829 cerr << "MainWindow::regionOutlined: no spectrogram layer, ignoring" << endl;
1830 return;
1831 }
1832
1833 int f0 = pane->getFrameForX(r.x());
1834 int f1 = pane->getFrameForX(r.x() + r.width());
1835
1836 float v0 = spectrogram->getFrequencyForY(pane, r.y() + r.height());
1837 float v1 = spectrogram->getFrequencyForY(pane, r.y());
1838
1839 cerr << "MainWindow::regionOutlined: frame " << f0 << " -> " << f1
1840 << ", frequency " << v0 << " -> " << v1 << endl;
1841
1842 m_pendingConstraint = Analyser::FrequencyRange(v0, v1);
1843
1844 Selection sel(f0, f1);
1845 m_viewManager->setSelection(sel);
1804 } 1846 }
1805 1847
1806 void 1848 void
1807 MainWindow::clearPitches() 1849 MainWindow::clearPitches()
1808 { 1850 {
2353 } else { 2395 } else {
2354 pane = m_paneStack->getPane(0); 2396 pane = m_paneStack->getPane(0);
2355 } 2397 }
2356 2398
2357 if (pane) { 2399 if (pane) {
2400
2401 disconnect(pane, SIGNAL(regionOutlined(QRect)),
2402 pane, SLOT(zoomToRegion(QRect)));
2403 connect(pane, SIGNAL(regionOutlined(QRect)),
2404 this, SLOT(regionOutlined(QRect)));
2405
2358 QString error = m_analyser->newFileLoaded 2406 QString error = m_analyser->newFileLoaded
2359 (m_document, getMainModel(), m_paneStack, pane); 2407 (m_document, getMainModel(), m_paneStack, pane);
2360 if (error != "") { 2408 if (error != "") {
2361 QMessageBox::warning 2409 QMessageBox::warning
2362 (this, 2410 (this,