diff src/MainWindow.cpp @ 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 62ceae757fe0
line wrap: on
line diff
--- 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) {