Mercurial > hg > tony
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, |