changeset 145:cdc9d5f7978c

Optional spectrogram (off by default)
author Chris Cannam
date Fri, 10 Jan 2014 16:06:07 +0000
parents c21b87a62ce6
children 5dc0bb043154 8822db9d7022
files src/Analyser.cpp src/Analyser.h src/MainWindow.cpp src/MainWindow.h
diffstat 4 files changed, 35 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/Analyser.cpp	Fri Jan 10 15:46:39 2014 +0000
+++ b/src/Analyser.cpp	Fri Jan 10 16:06:07 2014 +0000
@@ -28,7 +28,9 @@
 #include "layer/FlexiNoteLayer.h"
 #include "layer/WaveformLayer.h"
 #include "layer/ColourDatabase.h"
+#include "layer/ColourMapper.h"
 #include "layer/LayerFactory.h"
+#include "layer/SpectrogramLayer.h"
 
 #include <QSettings>
 
@@ -44,7 +46,7 @@
         ("timevalues",
          QString("<layer verticalScale=\"%1\" plotStyle=\"%2\" "
                  "scaleMinimum=\"%3\" scaleMaximum=\"%4\"/>")
-         .arg(int(TimeValueLayer::LogScale))
+         .arg(int(TimeValueLayer::AutoAlignScale))
          .arg(int(TimeValueLayer::PlotDiscreteCurves))
          .arg(27.5f).arg(880.f)); // temporary values: better get the real extents of the data from the model
     settings.setValue
@@ -76,6 +78,17 @@
     // what have you). It could be hidden if we don't want to see it
     // but it must exist.
 
+    // A spectrogram, off by default. Must go at the back because it's
+    // opaque
+
+    SpectrogramLayer *spectrogram = qobject_cast<SpectrogramLayer *>
+        (m_document->createMainModelLayer(LayerFactory::MelodicRangeSpectrogram));
+    spectrogram->setColourMap((int)ColourMapper::BlackOnWhite);
+    m_document->addLayerToView(m_pane, spectrogram);
+    spectrogram->setLayerDormant(m_pane, true);
+
+    m_layers[Spectrogram] = spectrogram;
+
     // Our waveform layer is just a shadow, light grey and taking up
     // little space at the bottom
 
@@ -166,6 +179,7 @@
     loadState(Audio);
     loadState(PitchTrack);
     loadState(Notes);
+    loadState(Spectrogram);
 
     emit layersChanged();
 
@@ -200,8 +214,8 @@
     bool a = isAudible(c);
     QSettings settings;
     settings.beginGroup("Analyser");
-    settings.setValue(QString("Visibility %1").arg(int(c)), v);
-    settings.setValue(QString("Audibility %1").arg(int(c)), a);
+    settings.setValue(QString("visible-%1").arg(int(c)), v);
+    settings.setValue(QString("audible-%1").arg(int(c)), a);
     settings.endGroup();
 }
 
@@ -210,8 +224,9 @@
 {
     QSettings settings;
     settings.beginGroup("Analyser");
-    bool v = settings.value(QString("Visibility %1").arg(int(c)), true).toBool();
-    bool a = settings.value(QString("Audibility %1").arg(int(c)), true).toBool();
+    bool deflt = (c == Spectrogram ? false : true);
+    bool v = settings.value(QString("visible-%1").arg(int(c)), deflt).toBool();
+    bool a = settings.value(QString("audible-%1").arg(int(c)), true).toBool();
     settings.endGroup();
     setVisible(c, v);
     setAudible(c, a);
--- a/src/Analyser.h	Fri Jan 10 15:46:39 2014 +0000
+++ b/src/Analyser.h	Fri Jan 10 16:06:07 2014 +0000
@@ -46,6 +46,7 @@
         Audio,
         PitchTrack,
         Notes,
+        Spectrogram,
     };
 
     bool isVisible(Component c) const;
--- a/src/MainWindow.cpp	Fri Jan 10 15:46:39 2014 +0000
+++ b/src/MainWindow.cpp	Fri Jan 10 16:06:07 2014 +0000
@@ -716,6 +716,11 @@
     connect(m_showAudio, SIGNAL(triggered()), this, SLOT(showAudioToggled()));
     connect(this, SIGNAL(canPlay(bool)), m_showAudio, SLOT(setEnabled(bool)));
 
+    m_showSpect = toolbar->addAction(il.load("spectrogram"), tr("Show Spectrogram"));
+    m_showSpect->setCheckable(true);
+    connect(m_showSpect, SIGNAL(triggered()), this, SLOT(showSpectToggled()));
+    connect(this, SIGNAL(canPlay(bool)), m_showSpect, SLOT(setEnabled(bool)));
+
     m_showPitch = toolbar->addAction(il.load("values"), tr("Show Pitch Track"));
     m_showPitch->setCheckable(true);
     connect(m_showPitch, SIGNAL(triggered()), this, SLOT(showPitchToggled()));
@@ -840,6 +845,12 @@
 }
 
 void
+MainWindow::showSpectToggled()
+{
+    m_analyser->toggleVisible(Analyser::Spectrogram);
+}
+
+void
 MainWindow::showNotesToggled()
 {
     m_analyser->toggleVisible(Analyser::Notes);
@@ -867,6 +878,7 @@
 MainWindow::updateLayerStatuses()
 {
     m_showAudio->setChecked(m_analyser->isVisible(Analyser::Audio));
+    m_showSpect->setChecked(m_analyser->isVisible(Analyser::Spectrogram));
     m_showPitch->setChecked(m_analyser->isVisible(Analyser::PitchTrack));
     m_showNotes->setChecked(m_analyser->isVisible(Analyser::Notes));
     m_playAudio->setChecked(m_analyser->isAudible(Analyser::Audio));
--- a/src/MainWindow.h	Fri Jan 10 15:46:39 2014 +0000
+++ b/src/MainWindow.h	Fri Jan 10 16:06:07 2014 +0000
@@ -54,6 +54,7 @@
     virtual void octaveShiftDown();
 
     virtual void showAudioToggled();
+    virtual void showSpectToggled();
     virtual void showPitchToggled();
     virtual void showNotesToggled();
 
@@ -142,6 +143,7 @@
     bool           m_intelligentActionOn; // GF: !!! temporary
 
     QAction       *m_showAudio;
+    QAction       *m_showSpect;
     QAction       *m_showPitch;
     QAction       *m_showNotes;
     QAction       *m_playAudio;