diff -Naur stretchplayer-0.503/src/Engine.cpp stretchplayer-0.503.patched/src/Engine.cpp --- stretchplayer-0.503/src/Engine.cpp 2010-07-18 00:44:20.000000000 -0400 +++ stretchplayer-0.503.patched/src/Engine.cpp 2014-02-28 17:43:36.000000000 -0500 @@ -46,6 +46,7 @@ _sample_rate(48000.0), _stretch(1.0), _pitch(0), + _fine(0), _gain(1.0) { QString err; @@ -153,7 +154,7 @@ uint32_t srate = _audio_system->sample_rate(); _stretcher->setTimeRatio( srate / _sample_rate / _stretch ); - _stretcher->setPitchScale( ::pow(2.0, double(_pitch)/12.0) * _sample_rate / srate ); + _stretcher->setPitchScale( ::pow(2.0, double(_pitch)/12.0 + double(_fine)/1200.0) * _sample_rate / srate ); uint32_t frame; uint32_t reqd, gend, zeros, feed; diff -Naur stretchplayer-0.503/src/Engine.hpp stretchplayer-0.503.patched/src/Engine.hpp --- stretchplayer-0.503/src/Engine.hpp 2010-07-18 00:44:20.000000000 -0400 +++ stretchplayer-0.503.patched/src/Engine.hpp 2014-03-01 11:26:57.000000000 -0500 @@ -81,6 +81,21 @@ //_state_changed = true; } + int get_fine() { + return _fine; + } + void set_fine(int fin) { + if(fin < -99) { + _fine = fin % 100; + set_pitch(get_pitch() - 1); + } else if (fin > 99) { + _fine = fin % 100; + set_pitch(get_pitch() + 1); + } else { + _fine = fin; + } + } + /** * Clipped to [0.0, 10.0] */ @@ -146,6 +161,7 @@ float _sample_rate; float _stretch; int _pitch; + int _fine; float _gain; std::auto_ptr _stretcher; std::auto_ptr _audio_system; diff -Naur stretchplayer-0.503/src/PlayerWidget.cpp stretchplayer-0.503.patched/src/PlayerWidget.cpp --- stretchplayer-0.503/src/PlayerWidget.cpp 2010-07-18 00:44:20.000000000 -0400 +++ stretchplayer-0.503.patched/src/PlayerWidget.cpp 2014-03-01 10:04:02.000000000 -0500 @@ -35,6 +35,7 @@ #include #include #include +#include #include #include @@ -152,11 +153,21 @@ void PlayerWidget::pitch_inc() { + if(QApplication::keyboardModifiers() == Qt::ShiftModifier) + _engine->set_fine( _engine->get_fine() + 10); + else if(QApplication::keyboardModifiers() == Qt::ControlModifier) + _engine->set_fine( _engine->get_fine() + 1); + else _engine->set_pitch( _engine->get_pitch() + 1 ); } void PlayerWidget::pitch_dec() { + if(QApplication::keyboardModifiers() == Qt::ShiftModifier) + _engine->set_fine( _engine->get_fine() - 10); + else if(QApplication::keyboardModifiers() == Qt::ControlModifier) + _engine->set_fine( _engine->get_fine() - 1); + else _engine->set_pitch( _engine->get_pitch() - 1); } @@ -262,8 +273,9 @@ float sch = _engine->get_stretch(); _status->speed(sch); + int fin = _engine->get_fine(); int pit = _engine->get_pitch(); - _status->pitch(pit); + _status->pitch(pit, fin); float cpu = _engine->get_cpu_load(); _status->cpu(cpu); @@ -471,8 +483,9 @@ QList inc_shortcuts; inc_shortcuts << Qt::Key_Plus; inc_shortcuts << Qt::Key_Equal; + inc_shortcuts << QKeySequence("Ctrl+="); _act.pitch_inc = new QAction("+", this); - _act.pitch_inc->setToolTip("Pitch Increase [+]"); + _act.pitch_inc->setToolTip("Pitch Increase [+ or =] (Ctl/Shift=Fine)"); _act.pitch_inc->setShortcuts(inc_shortcuts); _act.pitch_inc->setShortcutContext(Qt::ApplicationShortcut); _act.pitch_inc->setIcon( _ico.plus ); @@ -480,9 +493,13 @@ connect(_act.pitch_inc, SIGNAL(triggered()), this, SLOT(pitch_inc())); + QList dec_shortcuts; + dec_shortcuts << Qt::Key_Minus; + dec_shortcuts << Qt::Key_Underscore; + dec_shortcuts << QKeySequence("Ctrl+-"); _act.pitch_dec = new QAction("-", this); - _act.pitch_dec->setToolTip("Pitch Decrease [-]"); - _act.pitch_dec->setShortcut(Qt::Key_Minus); + _act.pitch_dec->setToolTip("Pitch Decrease [-] (Ctl/Shift=Fine)"); + _act.pitch_dec->setShortcuts(dec_shortcuts); _act.pitch_dec->setShortcutContext(Qt::ApplicationShortcut); _act.pitch_dec->setIcon( _ico.minus ); addAction(_act.pitch_dec); diff -Naur stretchplayer-0.503/src/StatusWidget.cpp stretchplayer-0.503.patched/src/StatusWidget.cpp --- stretchplayer-0.503/src/StatusWidget.cpp 2010-07-18 00:44:20.000000000 -0400 +++ stretchplayer-0.503.patched/src/StatusWidget.cpp 2014-03-01 11:16:47.000000000 -0500 @@ -85,10 +85,13 @@ .arg(val, 3, 'f', 0); } - void StatusWidget::pitch(int p) + void StatusWidget::pitch(int p, int f) { - _pitch = QString("PITCH: %1") - .arg(int(p)); + _pitch = QString("PITCH: %1").arg(int(p)); + if(f > 0) + _pitch += QString("+%1").arg(int(f)); + else if(f < 0) + _pitch += QString("%1").arg(int(f)); } void StatusWidget::volume(float g) diff -Naur stretchplayer-0.503/src/StatusWidget.hpp stretchplayer-0.503.patched/src/StatusWidget.hpp --- stretchplayer-0.503/src/StatusWidget.hpp 2010-07-18 00:44:20.000000000 -0400 +++ stretchplayer-0.503.patched/src/StatusWidget.hpp 2014-02-28 19:20:49.000000000 -0500 @@ -54,7 +54,7 @@ void position(float); void time(float); void speed(float); - void pitch(int); + void pitch(int, int); void volume(float); void cpu(float); void message(QString);