diff --git a/app/widget/audiomonitor/audiomonitor.cpp b/app/widget/audiomonitor/audiomonitor.cpp index 86b53a8df..a4cbd853d 100644 --- a/app/widget/audiomonitor/audiomonitor.cpp +++ b/app/widget/audiomonitor/audiomonitor.cpp @@ -275,23 +275,33 @@ void AudioMonitor::UpdateValuesFromFile(QVector& v) // Determines how many milliseconds have passed since last update qint64 current_time = QDateTime::currentMSecsSinceEpoch(); qint64 time_passed = current_time - last_time_; + int abs_speed = qAbs(playback_speed_); + + // Multiply by speed if the speed is not 1 + if (abs_speed != 1) { + time_passed *= abs_speed; + } // Convert ms to float seconds and determine how many bytes that is qint64 bytes_to_read = params_.time_to_bytes(static_cast(time_passed) * 0.001); if (playback_speed_ < 0) { + // If reversing, jump back by the amount of bytes we're going to read bytes_to_read = qMin(bytes_to_read, file_.pos()); file_.seek(file_.pos() - bytes_to_read); } + // Read bytes in from file QByteArray b = file_.read(bytes_to_read); if (playback_speed_ < 0) { + // If reversing, head back to where we were before the read so that the next read starts + // from where we left off file_.seek(file_.pos() - bytes_to_read); } - int abs_speed = qAbs(playback_speed_); + // If speed is not 1, transform it here if (abs_speed != 1) { int sample_sz = params_.samples_to_bytes(1); int in_nb_samples = params_.bytes_to_samples(b.size()); @@ -299,8 +309,8 @@ void AudioMonitor::UpdateValuesFromFile(QVector& v) QByteArray speed_adjusted(out_nb_samples * sample_sz, Qt::Uninitialized); for (int i=0;i