comparison main/MainWindow.cpp @ 1031:2d524c9eee33

Make the play-speed dial settings much easier to understand and use (fixes #1328)
author Chris Cannam
date Mon, 13 Jul 2015 14:39:41 +0100
parents 9ae8a300cf7f
children 28ccb621d1af 0f46daf55706
comparison
equal deleted inserted replaced
1029:14e312cf8e95 1031:2d524c9eee33
234 connect(m_fader, SIGNAL(mouseEntered()), this, SLOT(mouseEnteredWidget())); 234 connect(m_fader, SIGNAL(mouseEntered()), this, SLOT(mouseEnteredWidget()));
235 connect(m_fader, SIGNAL(mouseLeft()), this, SLOT(mouseLeftWidget())); 235 connect(m_fader, SIGNAL(mouseLeft()), this, SLOT(mouseLeftWidget()));
236 236
237 m_playSpeed = new AudioDial(frame); 237 m_playSpeed = new AudioDial(frame);
238 m_playSpeed->setMinimum(0); 238 m_playSpeed->setMinimum(0);
239 m_playSpeed->setMaximum(200); 239 m_playSpeed->setMaximum(120);
240 m_playSpeed->setValue(100); 240 m_playSpeed->setValue(60);
241 m_playSpeed->setFixedWidth(32); 241 m_playSpeed->setFixedWidth(32);
242 m_playSpeed->setFixedHeight(32); 242 m_playSpeed->setFixedHeight(32);
243 m_playSpeed->setNotchesVisible(true); 243 m_playSpeed->setNotchesVisible(true);
244 m_playSpeed->setPageStep(10); 244 m_playSpeed->setPageStep(10);
245 m_playSpeed->setObjectName(tr("Playback Speedup")); 245 m_playSpeed->setObjectName(tr("Playback Speed"));
246 m_playSpeed->setDefaultValue(100); 246 m_playSpeed->setRangeMapper(new PlaySpeedRangeMapper);
247 m_playSpeed->setRangeMapper(new PlaySpeedRangeMapper(0, 200)); 247 m_playSpeed->setDefaultValue(60);
248 m_playSpeed->setShowToolTip(true); 248 m_playSpeed->setShowToolTip(true);
249 connect(m_playSpeed, SIGNAL(valueChanged(int)), 249 connect(m_playSpeed, SIGNAL(valueChanged(int)),
250 this, SLOT(playSpeedChanged(int))); 250 this, SLOT(playSpeedChanged(int)));
251 connect(m_playSpeed, SIGNAL(mouseEntered()), this, SLOT(mouseEnteredWidget())); 251 connect(m_playSpeed, SIGNAL(mouseEntered()), this, SLOT(mouseEnteredWidget()));
252 connect(m_playSpeed, SIGNAL(mouseLeft()), this, SLOT(mouseLeftWidget())); 252 connect(m_playSpeed, SIGNAL(mouseLeft()), this, SLOT(mouseLeftWidget()));
3872 } 3872 }
3873 3873
3874 void 3874 void
3875 MainWindow::playSpeedChanged(int position) 3875 MainWindow::playSpeedChanged(int position)
3876 { 3876 {
3877 PlaySpeedRangeMapper mapper(0, 200); 3877 PlaySpeedRangeMapper mapper;
3878 3878
3879 double percent = m_playSpeed->mappedValue(); 3879 double percent = m_playSpeed->mappedValue();
3880 double factor = mapper.getFactorForValue(percent); 3880 double factor = mapper.getFactorForValue(percent);
3881 3881
3882 // cerr << "speed = " << position << " percent = " << percent << " factor = " << factor << endl; 3882 // cerr << "play speed position = " << position << " (range 0-120) percent = " << percent << " factor = " << factor << endl;
3883 3883
3884 bool something = (position != 100); 3884 int centre = m_playSpeed->defaultValue();
3885 3885
3886 int pc = int(lrint(percent)); 3886 // Percentage is shown to 0dp if >100, to 1dp if <100; factor is
3887 3887 // shown to 3sf
3888 if (!something) { 3888
3889 char pcbuf[30];
3890 char facbuf[30];
3891
3892 if (position == centre) {
3889 contextHelpChanged(tr("Playback speed: Normal")); 3893 contextHelpChanged(tr("Playback speed: Normal"));
3894 } else if (position < centre) {
3895 sprintf(pcbuf, "%.1f", percent);
3896 sprintf(facbuf, "%.3g", 1.0 / factor);
3897 contextHelpChanged(tr("Playback speed: %1% (%2x slower)")
3898 .arg(pcbuf)
3899 .arg(facbuf));
3890 } else { 3900 } else {
3891 contextHelpChanged(tr("Playback speed: %1%2%") 3901 sprintf(pcbuf, "%.0f", percent);
3892 .arg(position > 100 ? "+" : "") 3902 sprintf(facbuf, "%.3g", factor);
3893 .arg(pc)); 3903 contextHelpChanged(tr("Playback speed: %1% (%2x faster)")
3894 } 3904 .arg(pcbuf)
3895 3905 .arg(facbuf));
3896 m_playSource->setTimeStretch(factor); 3906 }
3907
3908 m_playSource->setTimeStretch(1.0 / factor); // factor is a speedup
3897 3909
3898 updateMenuStates(); 3910 updateMenuStates();
3899 } 3911 }
3900 3912
3901 void 3913 void