accurate sound position timestamps
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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; }
|
||||||
|
|||||||
Reference in New Issue
Block a user