From 70085588d68c8445df900a33b50b50e01c6acf32 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Mon, 10 Aug 2020 17:12:39 +1000 Subject: [PATCH] audiomonitor: fixed bug where audio was shown at normal speed even if playing faster --- app/widget/audiomonitor/audiomonitor.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) 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