# 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();