Mercurial > hg > tony
diff src/MainWindow.cpp @ 404:51a51a174fe7
Try adding a combined simple level/pan widget
author | Chris Cannam |
---|---|
date | Tue, 24 Mar 2015 14:40:31 +0000 |
parents | cc33cdb114f6 |
children | 7d97da3c744e |
line wrap: on
line diff
--- 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) {