changeset 160:106fdf38c6c9

added pan knobs for Audio, Pitch and Notes
author Justin Salamon <justin.salamon@nyu.edu>
date Thu, 23 Jan 2014 17:18:53 -0500
parents 180e6af1806c
children afaa4af03b22
files src/Analyser.cpp src/MainWindow.cpp src/MainWindow.h
diffstat 3 files changed, 194 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/Analyser.cpp	Thu Jan 23 15:57:51 2014 -0500
+++ b/src/Analyser.cpp	Thu Jan 23 17:18:53 2014 -0500
@@ -100,7 +100,7 @@
     waveform->setBaseColour
         (ColourDatabase::getInstance()->getColourIndex(tr("Grey")));
     PlayParameters *params = waveform->getPlayParameters();
-    if (params) params->setPlayPan(1);
+    if (params) params->setPlayPan(-1);
     
     m_document->addLayerToView(m_pane, waveform);
 
@@ -164,7 +164,7 @@
         if (pitchLayer) {
             pitchLayer->setBaseColour(cdb->getColourIndex(tr("Black")));
             PlayParameters *params = pitchLayer->getPlayParameters();
-            if (params) params->setPlayPan(-1);
+            if (params) params->setPlayPan(1);
         }
 
         FlexiNoteLayer *flexiNoteLayer = 
@@ -172,7 +172,7 @@
         if (flexiNoteLayer) {
             flexiNoteLayer->setBaseColour(cdb->getColourIndex(tr("Bright Blue")));
             PlayParameters *params = flexiNoteLayer->getPlayParameters();
-            if (params) params->setPlayPan(0);
+            if (params) params->setPlayPan(1);
         }
     }
 
--- a/src/MainWindow.cpp	Thu Jan 23 15:57:51 2014 -0500
+++ b/src/MainWindow.cpp	Thu Jan 23 17:18:53 2014 -0500
@@ -265,6 +265,59 @@
     connect(m_gainNotes, SIGNAL(mouseLeft()), this, SLOT(mouseLeftWidget()));
     // End of Gain controls
 
+    // Pan controls
+    m_panAudio = new AudioDial(frame);
+    m_panAudio->setMinimum(-100);
+    m_panAudio->setMaximum(100);
+    m_panAudio->setValue(-100);
+    m_panAudio->setDefaultValue(-100);
+    m_panAudio->setFixedWidth(24);
+    m_panAudio->setFixedHeight(24);
+    m_panAudio->setNotchesVisible(true);
+    m_panAudio->setPageStep(10);
+    m_panAudio->setObjectName(tr("Audio Track Pan"));
+    m_panAudio->setRangeMapper(new LinearRangeMapper(-100, 100, -100, 100, tr("")));
+    m_panAudio->setShowToolTip(true);
+    connect(m_panAudio, SIGNAL(valueChanged(int)),
+            this, SLOT(audioPanChanged(int)));
+    connect(m_panAudio, SIGNAL(mouseEntered()), this, SLOT(mouseEnteredWidget()));
+    connect(m_panAudio, SIGNAL(mouseLeft()), this, SLOT(mouseLeftWidget()));
+
+    m_panPitch = new AudioDial(frame);
+    m_panPitch->setMinimum(-100);
+    m_panPitch->setMaximum(100);
+    m_panPitch->setValue(100);
+    m_panPitch->setDefaultValue(100);
+    m_panPitch->setFixedWidth(24);
+    m_panPitch->setFixedHeight(24);
+    m_panPitch->setNotchesVisible(true);
+    m_panPitch->setPageStep(10);
+    m_panPitch->setObjectName(tr("Pitch Track Pan"));
+    m_panPitch->setRangeMapper(new LinearRangeMapper(-100, 100, -100, 100, tr("")));
+    m_panPitch->setShowToolTip(true);
+    connect(m_panPitch, SIGNAL(valueChanged(int)),
+            this, SLOT(pitchPanChanged(int)));
+    connect(m_panPitch, SIGNAL(mouseEntered()), this, SLOT(mouseEnteredWidget()));
+    connect(m_panPitch, SIGNAL(mouseLeft()), this, SLOT(mouseLeftWidget()));
+
+    m_panNotes = new AudioDial(frame);
+    m_panNotes->setMinimum(-100);
+    m_panNotes->setMaximum(100);
+    m_panNotes->setValue(100);
+    m_panNotes->setDefaultValue(100);
+    m_panNotes->setFixedWidth(24);
+    m_panNotes->setFixedHeight(24);
+    m_panNotes->setNotchesVisible(true);
+    m_panNotes->setPageStep(10);
+    m_panNotes->setObjectName(tr("Notes Track Pan"));
+    m_panNotes->setRangeMapper(new LinearRangeMapper(-100, 100, -100, 100, tr("")));
+    m_panNotes->setShowToolTip(true);
+    connect(m_panNotes, SIGNAL(valueChanged(int)),
+            this, SLOT(notesPanChanged(int)));
+    connect(m_panNotes, SIGNAL(mouseEntered()), this, SLOT(mouseEnteredWidget()));
+    connect(m_panNotes, SIGNAL(mouseLeft()), this, SLOT(mouseLeftWidget()));
+    // End of Pan controls
+
     layout->setSpacing(4);
     layout->addWidget(m_overview, 0, 1);
     layout->addWidget(scroll, 1, 1);
@@ -825,6 +878,7 @@
     connect(this, SIGNAL(canPlay(bool)), m_playAudio, SLOT(setEnabled(bool)));
 
     toolbar->addWidget(m_gainAudio);
+    toolbar->addWidget(m_panAudio);
 
     // Pitch (f0)
     QLabel *icon_pitch = new QLabel;
@@ -844,6 +898,7 @@
     connect(this, SIGNAL(canPlay(bool)), m_playPitch, SLOT(setEnabled(bool)));
 
     toolbar->addWidget(m_gainPitch);
+    toolbar->addWidget(m_panPitch);
 
     // Notes
     QLabel *icon_notes = new QLabel;
@@ -863,6 +918,7 @@
     connect(this, SIGNAL(canPlay(bool)), m_playNotes, SLOT(setEnabled(bool)));
 
     toolbar->addWidget(m_gainNotes);
+    toolbar->addWidget(m_panNotes);
 
     // Spectrogram
     QLabel *icon_spectrogram = new QLabel;
@@ -1820,6 +1876,123 @@
 }
 
 void
+MainWindow::audioPanChanged(int position)
+{
+    float level = m_panAudio->mappedValue();
+    float pan = level/100.f;
+
+    cerr << "pan = " << pan << " (" << position << ")" << endl;
+
+    contextHelpChanged(tr("Audio Pan: %1").arg(position));
+
+    m_analyser->setPan(Analyser::Audio, pan);
+
+    updateMenuStates();
+} 
+
+void
+MainWindow::increaseAudioPan()
+{
+    int value = m_panAudio->value();
+    value = value + m_panAudio->pageStep();
+    if (value > m_panAudio->maximum()) value = m_panAudio->maximum();
+    m_panAudio->setValue(value);
+}
+
+void
+MainWindow::decreaseAudioPan()
+{
+    int value = m_panAudio->value();
+    value = value - m_panAudio->pageStep();
+    if (value < m_panAudio->minimum()) value = m_panAudio->minimum();
+    m_panAudio->setValue(value);
+}
+
+void
+MainWindow::restoreNormalAudioPan()
+{
+    m_panAudio->setValue(m_panAudio->defaultValue());
+}
+
+void
+MainWindow::pitchPanChanged(int position)
+{
+    float level = m_panPitch->mappedValue();
+    float pan = level/100.f;
+
+    cerr << "pan = " << pan << " (" << position << ")" << endl;
+
+    contextHelpChanged(tr("Pitch Pan: %1").arg(position));
+
+    m_analyser->setPan(Analyser::PitchTrack, pan);
+
+    updateMenuStates();
+} 
+
+void
+MainWindow::increasePitchPan()
+{
+    int value = m_panPitch->value();
+    value = value + m_panPitch->pageStep();
+    if (value > m_panPitch->maximum()) value = m_panPitch->maximum();
+    m_panPitch->setValue(value);
+}
+
+void
+MainWindow::decreasePitchPan()
+{
+    int value = m_panPitch->value();
+    value = value - m_panPitch->pageStep();
+    if (value < m_panPitch->minimum()) value = m_panPitch->minimum();
+    m_panPitch->setValue(value);
+}
+
+void
+MainWindow::restoreNormalPitchPan()
+{
+    m_panPitch->setValue(m_panPitch->defaultValue());
+}
+
+void
+MainWindow::notesPanChanged(int position)
+{
+    float level = m_panNotes->mappedValue();
+    float pan = level/100.f;
+
+    cerr << "pan = " << pan << " (" << position << ")" << endl;
+
+    contextHelpChanged(tr("Notes Pan: %1").arg(position));
+
+    m_analyser->setPan(Analyser::Notes, pan);
+
+    updateMenuStates();
+} 
+
+void
+MainWindow::increaseNotesPan()
+{
+    int value = m_panNotes->value();
+    value = value + m_panNotes->pageStep();
+    if (value > m_panNotes->maximum()) value = m_panNotes->maximum();
+    m_panNotes->setValue(value);
+}
+
+void
+MainWindow::decreaseNotesPan()
+{
+    int value = m_panNotes->value();
+    value = value - m_panNotes->pageStep();
+    if (value < m_panNotes->minimum()) value = m_panNotes->minimum();
+    m_panNotes->setValue(value);
+}
+
+void
+MainWindow::restoreNormalNotesPan()
+{
+    m_panNotes->setValue(m_panNotes->defaultValue());
+}
+
+void
 MainWindow::updateVisibleRangeDisplay(Pane *p) const
 {
     if (!getMainModel() || !p) {
--- a/src/MainWindow.h	Thu Jan 23 15:57:51 2014 -0500
+++ b/src/MainWindow.h	Thu Jan 23 17:18:53 2014 -0500
@@ -94,6 +94,21 @@
     virtual void decreaseNotesGain();
     virtual void restoreNormalNotesGain();
 
+    virtual void audioPanChanged(int);
+    virtual void increaseAudioPan();
+    virtual void decreaseAudioPan();
+    virtual void restoreNormalAudioPan();
+
+    virtual void pitchPanChanged(int);
+    virtual void increasePitchPan();
+    virtual void decreasePitchPan();
+    virtual void restoreNormalPitchPan();
+
+    virtual void notesPanChanged(int);
+    virtual void increaseNotesPan();
+    virtual void decreaseNotesPan();
+    virtual void restoreNormalNotesPan();
+
     virtual void sampleRateMismatch(size_t, size_t, bool);
     virtual void audioOverloadPluginDisabled();
     virtual void audioTimeStretchMultiChannelDisabled();
@@ -167,6 +182,9 @@
     AudioDial     *m_gainAudio;
     AudioDial     *m_gainPitch;
     AudioDial     *m_gainNotes;
+    AudioDial     *m_panAudio;
+    AudioDial     *m_panPitch;
+    AudioDial     *m_panNotes;
 
     QLabel        *m_waveformStatus;
     QLabel        *m_pitchStatus;