# HG changeset patch # User Chris Cannam # Date 1427208031 0 # Node ID 51a51a174fe70c2844c735fd170b44c02282364b # Parent cc33cdb114f67ce5602ca8a88c1103b119b1ab2d Try adding a combined simple level/pan widget diff -r cc33cdb114f6 -r 51a51a174fe7 .hgsubstate --- a/.hgsubstate Mon Mar 23 11:26:28 2015 +0000 +++ b/.hgsubstate Tue Mar 24 14:40:31 2015 +0000 @@ -1,7 +1,7 @@ e32a354434aa5fa7440efa17b716aacd761049fa chp d16f0fd6db6104d87882bc43788a3bb1b0f8c528 dataquay -4cbbd87a8c7f95ccac8e7900eef4f08bbdbb032f pyin +992e31b263779fc85282f2433c57e231fb61ec93 pyin 553a5f65ef64811747a6613f759622d655db63c1 sv-dependency-builds aa6fb3516e281bae6f9f57f368427374b9138b05 svapp 5c5d4863b42849fdc0e2062858a0c4acc725047b svcore -26da827e8fb52d5fa599b05c01e9360481fdccb9 svgui +2a9f1eb6e0edb56f2df64355656e7819c2330c6a svgui diff -r cc33cdb114f6 -r 51a51a174fe7 src/MainWindow.cpp --- a/src/MainWindow.cpp Mon Mar 23 11:26:28 2015 +0000 +++ b/src/MainWindow.cpp Tue Mar 24 14:40:31 2015 +0000 @@ -31,6 +31,7 @@ #include "data/model/NoteModel.h" #include "view/ViewManager.h" #include "base/Preferences.h" +#include "base/AudioLevel.h" #include "layer/WaveformLayer.h" #include "layer/TimeInstantLayer.h" #include "layer/TimeValueLayer.h" @@ -40,6 +41,7 @@ #include "widgets/AudioDial.h" #include "widgets/IconLoader.h" #include "widgets/KeyReference.h" +#include "widgets/LevelPanWidget.h" #include "audioio/AudioCallbackPlaySource.h" #include "audioio/AudioCallbackPlayTarget.h" #include "audioio/PlaySpeedRangeMapper.h" @@ -238,128 +240,26 @@ connect(m_playSpeed, SIGNAL(mouseEntered()), this, SLOT(mouseEnteredWidget())); connect(m_playSpeed, SIGNAL(mouseLeft()), this, SLOT(mouseLeftWidget())); - // Gain controls - m_gainAudio = new AudioDial(frame); - m_gainAudio->setMeterColor(Qt::darkRed); - m_gainAudio->setMinimum(-50); - m_gainAudio->setMaximum(50); - m_gainAudio->setValue(0); - m_gainAudio->setDefaultValue(0); - //m_gainAudio->setFixedWidth(40); - m_gainAudio->setFixedWidth(24); - m_gainAudio->setFixedHeight(24); - m_gainAudio->setNotchesVisible(true); - m_gainAudio->setPageStep(10); - m_gainAudio->setObjectName(tr("Audio Track Gain")); - m_gainAudio->setRangeMapper(new LinearRangeMapper(-50, 50, -25, 25, tr("dB"))); - m_gainAudio->setShowToolTip(true); - connect(m_gainAudio, SIGNAL(valueChanged(int)), - this, SLOT(audioGainChanged(int))); - connect(m_gainAudio, SIGNAL(mouseEntered()), this, SLOT(mouseEnteredWidget())); - connect(m_gainAudio, SIGNAL(mouseLeft()), this, SLOT(mouseLeftWidget())); - - if (m_withSonification) - { - m_gainPitch = new AudioDial(frame); - m_gainPitch->setMeterColor(Qt::darkRed); - m_gainPitch->setMinimum(-50); - m_gainPitch->setMaximum(50); - m_gainPitch->setValue(0); - m_gainPitch->setDefaultValue(0); - m_gainPitch->setFixedWidth(24); - m_gainPitch->setFixedHeight(24); - m_gainPitch->setNotchesVisible(true); - m_gainPitch->setPageStep(10); - m_gainPitch->setObjectName(tr("Pitch Track Gain")); - m_gainPitch->setRangeMapper(new LinearRangeMapper(-50, 50, -25, 25, tr("dB"))); - m_gainPitch->setShowToolTip(true); - connect(m_gainPitch, SIGNAL(valueChanged(int)), - this, SLOT(pitchGainChanged(int))); - connect(m_gainPitch, SIGNAL(mouseEntered()), this, SLOT(mouseEnteredWidget())); - connect(m_gainPitch, SIGNAL(mouseLeft()), this, SLOT(mouseLeftWidget())); - - m_gainNotes = new AudioDial(frame); - m_gainNotes->setMeterColor(Qt::darkRed); - m_gainNotes->setMinimum(-50); - m_gainNotes->setMaximum(50); - m_gainNotes->setValue(0); - m_gainNotes->setDefaultValue(0); - m_gainNotes->setFixedWidth(24); - m_gainNotes->setFixedHeight(24); - m_gainNotes->setNotchesVisible(true); - m_gainNotes->setPageStep(10); - m_gainNotes->setObjectName(tr("Note Gain")); - m_gainNotes->setRangeMapper(new LinearRangeMapper(-50, 50, -25, 25, tr("dB"))); - m_gainNotes->setShowToolTip(true); - connect(m_gainNotes, SIGNAL(valueChanged(int)), - this, SLOT(notesGainChanged(int))); - connect(m_gainNotes, SIGNAL(mouseEntered()), this, SLOT(mouseEnteredWidget())); - connect(m_gainNotes, SIGNAL(mouseLeft()), this, SLOT(mouseLeftWidget())); + m_audioLPW = new LevelPanWidget(frame); + m_audioLPW->setObjectName(tr("Audio Track Level and Pan")); + m_audioLPW->setPan(-1); + connect(m_audioLPW, SIGNAL(levelChanged(float)), this, SLOT(audioGainChanged(float))); + connect(m_audioLPW, SIGNAL(panChanged(float)), this, SLOT(audioPanChanged(float))); + + if (m_withSonification) { + + m_pitchLPW = new LevelPanWidget(frame); + m_pitchLPW->setObjectName(tr("Pitch Track Level and Pan")); + m_pitchLPW->setPan(1); + connect(m_pitchLPW, SIGNAL(levelChanged(float)), this, SLOT(pitchGainChanged(float))); + connect(m_pitchLPW, SIGNAL(panChanged(float)), this, SLOT(pitchPanChanged(float))); + + m_notesLPW = new LevelPanWidget(frame); + m_notesLPW->setObjectName(tr("Note Track Level and Pan")); + m_notesLPW->setPan(1); + connect(m_notesLPW, SIGNAL(levelChanged(float)), this, SLOT(notesGainChanged(float))); + connect(m_notesLPW, SIGNAL(panChanged(float)), this, SLOT(notesPanChanged(float))); } - // End of Gain controls - - // Pan controls - m_panAudio = new AudioDial(frame); - m_panAudio->setMeterColor(Qt::darkGreen); - m_panAudio->setMinimum(-100); - m_panAudio->setMaximum(100); - m_panAudio->setValue(-100); - m_panAudio->setDefaultValue(-100); - m_panAudio->setFixedWidth(24); - //m_panAudio->setFixedWidth(40); - 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())); - - - - if (m_withSonification) - { - m_panPitch = new AudioDial(frame); - m_panPitch->setMeterColor(Qt::darkGreen); - 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->setMeterColor(Qt::darkGreen); - 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("Note 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); @@ -1182,9 +1082,10 @@ connect(m_playAudio, SIGNAL(triggered()), this, SLOT(playAudioToggled())); connect(this, SIGNAL(canPlayWaveform(bool)), m_playAudio, SLOT(setEnabled(bool))); - toolbar->addWidget(m_gainAudio); - toolbar->addWidget(m_panAudio); - + m_audioLPW->setFixedWidth(60); + m_audioLPW->setFixedHeight(60); + toolbar->addWidget(m_audioLPW); + // Pitch (f0) QLabel *spacer = new QLabel; // blank spacer->setFixedWidth(40); @@ -1195,14 +1096,15 @@ connect(m_showPitch, SIGNAL(triggered()), this, SLOT(showPitchToggled())); connect(this, SIGNAL(canPlay(bool)), m_showPitch, SLOT(setEnabled(bool))); - if (!m_withSonification) - { + if (!m_withSonification) { m_playPitch = new QAction(tr("Play Pitch Track"), this); } else { m_playPitch = toolbar->addAction(il.load("speaker"), tr("Play Pitch Track")); - toolbar->addWidget(m_gainPitch); - toolbar->addWidget(m_panPitch); + m_pitchLPW->setFixedWidth(60); + m_pitchLPW->setFixedHeight(60); + toolbar->addWidget(m_pitchLPW); } + m_playPitch->setCheckable(true); connect(m_playPitch, SIGNAL(triggered()), this, SLOT(playPitchToggled())); connect(this, SIGNAL(canPlayPitch(bool)), m_playPitch, SLOT(setEnabled(bool))); @@ -1222,8 +1124,9 @@ m_playNotes = new QAction(tr("Play Notes"), this); } else { m_playNotes = toolbar->addAction(il.load("speaker"), tr("Play Notes")); - toolbar->addWidget(m_gainNotes); - toolbar->addWidget(m_panNotes); + m_notesLPW->setFixedWidth(60); + m_notesLPW->setFixedHeight(60); + toolbar->addWidget(m_notesLPW); } m_playNotes->setCheckable(true); connect(m_playNotes, SIGNAL(triggered()), this, SLOT(playNotesToggled())); @@ -2699,240 +2602,60 @@ } void -MainWindow::audioGainChanged(int position) +MainWindow::audioGainChanged(float gain) { - double level = m_gainAudio->mappedValue(); - double gain = pow(10, level / 20.0); - - cerr << "gain = " << gain << " (" << position << " dB)" << endl; - - contextHelpChanged(tr("Audio Gain: %1 dB").arg(position)); - - m_analyser->setGain(Analyser::Audio, float(gain)); - + double db = AudioLevel::multiplier_to_dB(gain); + cerr << "gain = " << gain << " (" << db << " dB)" << endl; + contextHelpChanged(tr("Audio Gain: %1 dB").arg(db)); + m_analyser->setGain(Analyser::Audio, gain); updateMenuStates(); } void -MainWindow::increaseAudioGain() +MainWindow::pitchGainChanged(float gain) { - int value = m_gainAudio->value(); - value = value + m_gainAudio->pageStep(); - if (value > m_gainAudio->maximum()) value = m_gainAudio->maximum(); - m_gainAudio->setValue(value); -} - -void -MainWindow::decreaseAudioGain() -{ - int value = m_gainAudio->value(); - value = value - m_gainAudio->pageStep(); - if (value < m_gainAudio->minimum()) value = m_gainAudio->minimum(); - m_gainAudio->setValue(value); -} - -void -MainWindow::restoreNormalAudioGain() -{ - m_gainAudio->setValue(m_gainAudio->defaultValue()); -} - -void -MainWindow::pitchGainChanged(int position) -{ - double level = m_gainPitch->mappedValue(); - double gain = pow(10, level / 20.0); - - cerr << "gain = " << gain << " (" << position << " dB)" << endl; - - contextHelpChanged(tr("Pitch Gain: %1 dB").arg(position)); - - m_analyser->setGain(Analyser::PitchTrack, float(gain)); - + double db = AudioLevel::multiplier_to_dB(gain); + cerr << "gain = " << gain << " (" << db << " dB)" << endl; + contextHelpChanged(tr("Pitch Gain: %1 dB").arg(db)); + m_analyser->setGain(Analyser::PitchTrack, gain); updateMenuStates(); } void -MainWindow::increasePitchGain() +MainWindow::notesGainChanged(float gain) { - int value = m_gainPitch->value(); - value = value + m_gainPitch->pageStep(); - if (value > m_gainPitch->maximum()) value = m_gainPitch->maximum(); - m_gainPitch->setValue(value); -} - -void -MainWindow::decreasePitchGain() -{ - int value = m_gainPitch->value(); - value = value - m_gainPitch->pageStep(); - if (value < m_gainPitch->minimum()) value = m_gainPitch->minimum(); - m_gainPitch->setValue(value); -} - -void -MainWindow::restoreNormalPitchGain() -{ - m_gainPitch->setValue(m_gainPitch->defaultValue()); -} - -void -MainWindow::notesGainChanged(int position) -{ - double level = m_gainNotes->mappedValue(); - double gain = pow(10, level / 20.0); - - cerr << "gain = " << gain << " (" << position << " dB)" << endl; - - contextHelpChanged(tr("Notes Gain: %1 dB").arg(position)); - - m_analyser->setGain(Analyser::Notes, float(gain)); - + double db = AudioLevel::multiplier_to_dB(gain); + cerr << "gain = " << gain << " (" << db << " dB)" << endl; + contextHelpChanged(tr("Notes Gain: %1 dB").arg(db)); + m_analyser->setGain(Analyser::Notes, gain); updateMenuStates(); } void -MainWindow::increaseNotesGain() +MainWindow::audioPanChanged(float pan) { - int value = m_gainNotes->value(); - value = value + m_gainNotes->pageStep(); - if (value > m_gainNotes->maximum()) value = m_gainNotes->maximum(); - m_gainNotes->setValue(value); -} - -void -MainWindow::decreaseNotesGain() -{ - int value = m_gainNotes->value(); - value = value - m_gainNotes->pageStep(); - if (value < m_gainNotes->minimum()) value = m_gainNotes->minimum(); - m_gainNotes->setValue(value); -} - -void -MainWindow::restoreNormalNotesGain() -{ - m_gainNotes->setValue(m_gainNotes->defaultValue()); -} - -void -MainWindow::audioPanChanged(int position) -{ - double level = m_panAudio->mappedValue(); - double pan = level/100.0; - - cerr << "pan = " << pan << " (" << position << ")" << endl; - - contextHelpChanged(tr("Audio Pan: %1").arg(position)); - - m_analyser->setPan(Analyser::Audio, float(pan)); - + contextHelpChanged(tr("Audio Pan: %1").arg(pan)); + m_analyser->setPan(Analyser::Audio, pan); updateMenuStates(); } void -MainWindow::increaseAudioPan() +MainWindow::pitchPanChanged(float pan) { - 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) -{ - double level = m_panPitch->mappedValue(); - double pan = level/100.0; - - cerr << "pan = " << pan << " (" << position << ")" << endl; - - contextHelpChanged(tr("Pitch Pan: %1").arg(position)); - - m_analyser->setPan(Analyser::PitchTrack, float(pan)); - + contextHelpChanged(tr("Pitch Pan: %1").arg(pan)); + m_analyser->setPan(Analyser::PitchTrack, pan); updateMenuStates(); } void -MainWindow::increasePitchPan() +MainWindow::notesPanChanged(float pan) { - 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) -{ - double level = m_panNotes->mappedValue(); - double pan = level/100.0; - - cerr << "pan = " << pan << " (" << position << ")" << endl; - - contextHelpChanged(tr("Notes Pan: %1").arg(position)); - - m_analyser->setPan(Analyser::Notes, float(pan)); - + contextHelpChanged(tr("Notes Pan: %1").arg(pan)); + 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) { diff -r cc33cdb114f6 -r 51a51a174fe7 src/MainWindow.h --- a/src/MainWindow.h Mon Mar 23 11:26:28 2015 +0000 +++ b/src/MainWindow.h Tue Mar 24 14:40:31 2015 +0000 @@ -21,6 +21,7 @@ class VersionTester; class ActivityLog; +class LevelPanWidget; class MainWindow : public MainWindowBase { @@ -103,35 +104,13 @@ virtual void slowDownPlayback(); virtual void restoreNormalPlayback(); - virtual void audioGainChanged(int); - virtual void increaseAudioGain(); - virtual void decreaseAudioGain(); - virtual void restoreNormalAudioGain(); + virtual void audioGainChanged(float); + virtual void pitchGainChanged(float); + virtual void notesGainChanged(float); - virtual void pitchGainChanged(int); - virtual void increasePitchGain(); - virtual void decreasePitchGain(); - virtual void restoreNormalPitchGain(); - - virtual void notesGainChanged(int); - virtual void increaseNotesGain(); - 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 audioPanChanged(float); + virtual void pitchPanChanged(float); + virtual void notesPanChanged(float); virtual void sampleRateMismatch(sv_samplerate_t, sv_samplerate_t, bool); virtual void audioOverloadPluginDisabled(); @@ -220,12 +199,9 @@ QAction *m_playAudio; QAction *m_playPitch; QAction *m_playNotes; - AudioDial *m_gainAudio; - AudioDial *m_gainPitch; - AudioDial *m_gainNotes; - AudioDial *m_panAudio; - AudioDial *m_panPitch; - AudioDial *m_panNotes; + LevelPanWidget *m_audioLPW; + LevelPanWidget *m_pitchLPW; + LevelPanWidget *m_notesLPW; ActivityLog *m_activityLog; KeyReference *m_keyReference;