accurate sound position timestamps

This commit is contained in:
Glenn Maynard
2004-01-18 04:01:52 +00:00
parent ee4aaf5cda
commit 74e1b8e276
2 changed files with 15 additions and 2 deletions
+14 -1
View File
@@ -38,6 +38,7 @@
#include "RageLog.h" #include "RageLog.h"
#include "RageException.h" #include "RageException.h"
#include "PrefsManager.h" #include "PrefsManager.h"
#include "arch/ArchHooks/ArchHooks.h"
#include <math.h> #include <math.h>
@@ -654,9 +655,21 @@ int RageSound::GetPositionSecondsInternal( bool *approximate ) const
return SearchPosMap( pos_map, cur_sample, approximate ); return SearchPosMap( pos_map, cur_sample, approximate );
} }
float RageSound::GetPositionSeconds( bool *approximate ) const float RageSound::GetPositionSeconds( bool *approximate, RageTimer *Timestamp ) const
{ {
LockMut(SOUNDMAN->lock);
if( Timestamp )
{
HOOKS->EnterTimeCriticalSection();
Timestamp->Touch();
}
const float pos = GetPositionSecondsInternal( approximate ) / float(samplerate()); const float pos = GetPositionSecondsInternal( approximate ) / float(samplerate());
if( Timestamp )
HOOKS->ExitTimeCriticalSection();
const float fixed_pos = pos + Sample->GetOffsetFix(); const float fixed_pos = pos + Sample->GetOffsetFix();
return GetPlaybackRate() * fixed_pos; return GetPlaybackRate() * fixed_pos;
} }
+1 -1
View File
@@ -68,7 +68,7 @@ public:
void Stop(); void Stop();
float GetLengthSeconds(); float GetLengthSeconds();
float GetPositionSeconds( bool *approximate=NULL ) const; float GetPositionSeconds( bool *approximate=NULL, RageTimer *Timestamp=NULL ) const;
int GetSampleRate() const; int GetSampleRate() const;
bool SetPositionSeconds( float fSeconds = -1); bool SetPositionSeconds( float fSeconds = -1);
void SetAccurateSync(bool yes=true) { AccurateSync = yes; } void SetAccurateSync(bool yes=true) { AccurateSync = yes; }