# HG changeset patch # User Chris Cannam # Date 1394529964 0 # Node ID ae0bf8dc5833d9b187b0aa8f642450f8ed9ca1f6 # Parent 9bdff8d10a86f8d40b7f7b5664950a4c9b68350b Crude ability to adjust displayed frequency range diff -r 9bdff8d10a86 -r ae0bf8dc5833 src/Analyser.cpp --- a/src/Analyser.cpp Mon Mar 10 14:59:50 2014 +0000 +++ b/src/Analyser.cpp Tue Mar 11 09:26:04 2014 +0000 @@ -116,19 +116,35 @@ m_reAnalysingSelection = Selection(); } +bool +Analyser::getDisplayFrequencyExtents(float &min, float &max) +{ + if (!m_layers[Spectrogram]) return false; + return m_layers[Spectrogram]->getDisplayExtents(min, max); +} + +bool +Analyser::setDisplayFrequencyExtents(float min, float max) +{ + if (!m_layers[Spectrogram]) return false; + m_layers[Spectrogram]->setDisplayExtents(min, max); +} + QString Analyser::addVisualisations() { -/* + // A spectrogram, off by default. Must go at the back because it's + // opaque + +/* This is roughly what we'd do for a constant-Q spectrogram, but it + currently has issues with y-axis alignment + TransformFactory *tf = TransformFactory::getInstance(); QString name = "Constant-Q"; QString base = "vamp:cqvamp:cqvamp:"; QString out = "constantq"; - // A spectrogram, off by default. Must go at the back because it's - // opaque - QString notFound = tr("Transform \"%1\" not found, spectrogram will not be enabled.

Is the %2 Vamp plugin correctly installed?"); if (!tf->haveTransform(base + out)) { return notFound.arg(base + out).arg(name); @@ -149,9 +165,6 @@ spectrogram->setColourMap((int)ColourMapper::BlackOnWhite); spectrogram->setNormalizeHybrid(true); -// spectrogram->setSmooth(true); -// spectrogram->setGain(0.5); //!!! arbitrary at this point - spectrogram->setMinFrequency(15); spectrogram->setGain(100); m_document->addLayerToView(m_pane, spectrogram); spectrogram->setLayerDormant(m_pane, true); diff -r 9bdff8d10a86 -r ae0bf8dc5833 src/Analyser.h --- a/src/Analyser.h Mon Mar 10 14:59:50 2014 +0000 +++ b/src/Analyser.h Tue Mar 11 09:26:04 2014 +0000 @@ -51,6 +51,9 @@ void setIntelligentActions(bool); + bool getDisplayFrequencyExtents(float &min, float &max); + bool setDisplayFrequencyExtents(float min, float max); + enum Component { Audio, PitchTrack, diff -r 9bdff8d10a86 -r ae0bf8dc5833 src/MainWindow.cpp --- a/src/MainWindow.cpp Mon Mar 10 14:59:50 2014 +0000 +++ b/src/MainWindow.cpp Tue Mar 11 09:26:04 2014 +0000 @@ -55,6 +55,8 @@ #include "data/fileio/MIDIFileWriter.h" #include "rdf/RDFExporter.h" +#include "widgets/RangeInputDialog.h" + // For version information #include "vamp/vamp.h" #include "vamp-sdk/PluginBase.h" @@ -668,6 +670,13 @@ connect(this, SIGNAL(canZoom(bool)), action, SLOT(setEnabled(bool))); m_keyReference->registerShortcut(action); menu->addAction(action); + + menu->addSeparator(); + + action = new QAction(tr("Set Displayed Fre&quency Range..."), this); + action->setStatusTip(tr("Set the minimum and maximum frequencies in the visible display")); + connect(action, SIGNAL(triggered()), this, SLOT(editDisplayExtents())); + menu->addAction(action); } void @@ -1183,6 +1192,35 @@ } void +MainWindow::editDisplayExtents() +{ + float min, max; + float vmin = 0; + float vmax = getMainModel()->getSampleRate() /2; + + if (!m_analyser->getDisplayFrequencyExtents(min, max)) { + //!!! + return; + } + + RangeInputDialog dialog(tr("Set frequency range"), + tr("Enter new frequency range, from %1 to %2 Hz.\nThese values will be rounded to the nearest spectrogram bin.") + .arg(vmin).arg(vmax), + "Hz", vmin, vmax, this); + dialog.setRange(min, max); + + if (dialog.exec() == QDialog::Accepted) { + dialog.getRange(min, max); + if (min > max) { + float tmp = max; + max = min; + min = tmp; + } + m_analyser->setDisplayFrequencyExtents(min, max); + } +} + +void MainWindow::updateDescriptionLabel() { // Nothing, we don't have one diff -r 9bdff8d10a86 -r ae0bf8dc5833 src/MainWindow.h --- a/src/MainWindow.h Mon Mar 10 14:59:50 2014 +0000 +++ b/src/MainWindow.h Tue Mar 11 09:26:04 2014 +0000 @@ -67,6 +67,8 @@ virtual void playPitchToggled(); virtual void playNotesToggled(); + virtual void editDisplayExtents(); + virtual void doubleClickSelectInvoked(size_t); virtual void abandonSelection();