changeset 227:ae0bf8dc5833

Crude ability to adjust displayed frequency range
author Chris Cannam
date Tue, 11 Mar 2014 09:26:04 +0000
parents 9bdff8d10a86
children fc04fd860d7f
files src/Analyser.cpp src/Analyser.h src/MainWindow.cpp src/MainWindow.h
diffstat 4 files changed, 63 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- 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.<br><br>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);
--- 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,
--- 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
--- 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();