From 343bbd0e5638bb6f4e8d741473a8fd1a92f2838d Mon Sep 17 00:00:00 2001 From: Matt McCutchen Date: Sat, 3 Oct 2015 22:21:21 -0400 Subject: [PATCH] Fix interaction between global offset and music rate. The global offset is a correction for audio latency, which is measured in wall-clock time, but TimingData elapsed time values represent offsets into the sound file. To get the offset in the sound file that corresponds to the wall-clock time of the global offset, we have to multiply by the music rate. --- src/TimingData.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/TimingData.cpp b/src/TimingData.cpp index c4f8fa7368..78f9fbe01d 100644 --- a/src/TimingData.cpp +++ b/src/TimingData.cpp @@ -1,6 +1,7 @@ #include "global.h" #include "TimingData.h" #include "PrefsManager.h" +#include "GameState.h" #include "RageUtil.h" #include "RageLog.h" #include "ThemeManager.h" @@ -704,7 +705,7 @@ bool TimingData::DoesLabelExist( const RString& sLabel ) const void TimingData::GetBeatAndBPSFromElapsedTime(GetBeatArgs& args) const { - args.elapsed_time += PREFSMAN->m_fGlobalOffsetSeconds; + args.elapsed_time += GAMESTATE->m_SongOptions.GetCurrent().m_fMusicRate * PREFSMAN->m_fGlobalOffsetSeconds; GetBeatAndBPSFromElapsedTimeNoOffset(args); } @@ -945,7 +946,8 @@ float TimingData::GetElapsedTimeInternal(GetBeatStarts& start, float beat, float TimingData::GetElapsedTimeFromBeat( float fBeat ) const { - return TimingData::GetElapsedTimeFromBeatNoOffset( fBeat ) - PREFSMAN->m_fGlobalOffsetSeconds; + return TimingData::GetElapsedTimeFromBeatNoOffset( fBeat ) + - GAMESTATE->m_SongOptions.GetCurrent().m_fMusicRate * PREFSMAN->m_fGlobalOffsetSeconds; } float TimingData::GetElapsedTimeFromBeatNoOffset( float fBeat ) const