The Emp^W realPlayPos strikes back. Respect audio latency.
Originally committed to SVN as r351.
This commit is contained in:
parent
66e988ff86
commit
cc8022f629
2 changed files with 8 additions and 2 deletions
|
@ -64,6 +64,7 @@ PortAudioPlayer::PortAudioPlayer() {
|
||||||
playing = false;
|
playing = false;
|
||||||
stopping = false;
|
stopping = false;
|
||||||
volume = 1.0f;
|
volume = 1.0f;
|
||||||
|
paStart = 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -120,6 +121,7 @@ int PortAudioPlayer::paCallback(void *inputBuffer, void *outputBuffer, unsigned
|
||||||
|
|
||||||
// Set play position (and real one)
|
// Set play position (and real one)
|
||||||
player->playPos += framesPerBuffer;
|
player->playPos += framesPerBuffer;
|
||||||
|
player->realPlayPos = (__int64)(Pa_StreamTime(player->stream) - player->paStart) + player->startPos;
|
||||||
|
|
||||||
// Cap to start if lower
|
// Cap to start if lower
|
||||||
return end;
|
return end;
|
||||||
|
@ -135,6 +137,7 @@ void PortAudioPlayer::Play(__int64 start,__int64 count) {
|
||||||
// Set values
|
// Set values
|
||||||
endPos = start + count;
|
endPos = start + count;
|
||||||
playPos = start;
|
playPos = start;
|
||||||
|
realPlayPos = start;
|
||||||
startPos = start;
|
startPos = start;
|
||||||
|
|
||||||
// Start playing
|
// Start playing
|
||||||
|
@ -145,6 +148,7 @@ void PortAudioPlayer::Play(__int64 start,__int64 count) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
playing = true;
|
playing = true;
|
||||||
|
paStart = Pa_StreamTime(stream);
|
||||||
|
|
||||||
// Update timer
|
// Update timer
|
||||||
if (displayTimer && !displayTimer->IsRunning()) displayTimer->Start(15);
|
if (displayTimer && !displayTimer->IsRunning()) displayTimer->Start(15);
|
||||||
|
|
|
@ -60,6 +60,8 @@ private:
|
||||||
volatile __int64 startPos;
|
volatile __int64 startPos;
|
||||||
volatile __int64 endPos;
|
volatile __int64 endPos;
|
||||||
void *stream;
|
void *stream;
|
||||||
|
PaTimestamp paStart;
|
||||||
|
volatile __int64 realPlayPos;
|
||||||
|
|
||||||
static int paCallback(void *inputBuffer, void *outputBuffer, unsigned long framesPerBuffer, PaTimestamp outTime, void *userData);
|
static int paCallback(void *inputBuffer, void *outputBuffer, unsigned long framesPerBuffer, PaTimestamp outTime, void *userData);
|
||||||
|
|
||||||
|
@ -76,9 +78,9 @@ public:
|
||||||
|
|
||||||
__int64 GetStartPosition() { return startPos; }
|
__int64 GetStartPosition() { return startPos; }
|
||||||
__int64 GetEndPosition() { return endPos; }
|
__int64 GetEndPosition() { return endPos; }
|
||||||
__int64 GetCurrentPosition() { return playPos; }
|
__int64 GetCurrentPosition() { return realPlayPos; }
|
||||||
void SetEndPosition(__int64 pos) { endPos = pos; }
|
void SetEndPosition(__int64 pos) { endPos = pos; }
|
||||||
void SetCurrentPosition(__int64 pos) { playPos = pos; }
|
void SetCurrentPosition(__int64 pos) { playPos = pos; realPlayPos = pos; }
|
||||||
|
|
||||||
void SetVolume(double vol) { volume = vol; }
|
void SetVolume(double vol) { volume = vol; }
|
||||||
double GetVolume() { return volume; }
|
double GetVolume() { return volume; }
|
||||||
|
|
Loading…
Reference in a new issue