mirror of
https://github.com/badaix/snapcast.git
synced 2025-05-12 16:46:42 +02:00
x
git-svn-id: svn://elaine/murooma/trunk@171 d8a302eb-03bc-478d-80e4-98257eca68ef
This commit is contained in:
parent
ef4a6d6942
commit
08fa827fb8
3 changed files with 21 additions and 11 deletions
17
client.cpp
17
client.cpp
|
@ -101,11 +101,11 @@ static int paStreamCallback( const void *inputBuffer, void *outputBuffer,
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int initAudio()
|
PaStream* initAudio(PaError& err)
|
||||||
{
|
{
|
||||||
PaStreamParameters outputParameters;
|
PaStreamParameters outputParameters;
|
||||||
PaStream *paStream;
|
PaStream *paStream = NULL;
|
||||||
PaError err;
|
// PaError err;
|
||||||
|
|
||||||
printf("PortAudio Test: output sine wave. SR = %d, BufSize = %d\n", SAMPLE_RATE, FRAMES_PER_BUFFER);
|
printf("PortAudio Test: output sine wave. SR = %d, BufSize = %d\n", SAMPLE_RATE, FRAMES_PER_BUFFER);
|
||||||
|
|
||||||
|
@ -163,14 +163,14 @@ int initAudio()
|
||||||
|
|
||||||
// Pa_Terminate();
|
// Pa_Terminate();
|
||||||
// printf("Test finished.\n");
|
// printf("Test finished.\n");
|
||||||
|
|
||||||
return err;
|
return paStream;
|
||||||
error:
|
error:
|
||||||
Pa_Terminate();
|
Pa_Terminate();
|
||||||
fprintf( stderr, "An error occured while using the portaudio stream\n" );
|
fprintf( stderr, "An error occured while using the portaudio stream\n" );
|
||||||
fprintf( stderr, "Error number: %d\n", err );
|
fprintf( stderr, "Error number: %d\n", err );
|
||||||
fprintf( stderr, "Error message: %s\n", Pa_GetErrorText( err ) );
|
fprintf( stderr, "Error message: %s\n", Pa_GetErrorText( err ) );
|
||||||
return err;
|
return paStream;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -187,7 +187,10 @@ int main (int argc, char *argv[])
|
||||||
|
|
||||||
stream = new Stream();
|
stream = new Stream();
|
||||||
stream->setBufferLen(bufferMs);
|
stream->setBufferLen(bufferMs);
|
||||||
initAudio();
|
PaError paError;
|
||||||
|
PaStream* paStream = initAudio(paError);
|
||||||
|
stream->setLatency(1000*Pa_GetStreamInfo(paStream)->outputLatency);
|
||||||
|
|
||||||
std::thread playerThread(player);
|
std::thread playerThread(player);
|
||||||
|
|
||||||
std::string cmd;
|
std::string cmd;
|
||||||
|
|
13
stream.cpp
13
stream.cpp
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
Stream::Stream() : sleep(0), median(0), shortMedian(0), lastUpdate(0)
|
Stream::Stream() : sleep(0), median(0), shortMedian(0), lastUpdate(0), latencyMs(0)
|
||||||
{
|
{
|
||||||
pBuffer = new DoubleBuffer<int>(1000);
|
pBuffer = new DoubleBuffer<int>(1000);
|
||||||
pShortBuffer = new DoubleBuffer<int>(200);
|
pShortBuffer = new DoubleBuffer<int>(200);
|
||||||
|
@ -36,6 +36,11 @@ void Stream::getSilentPlayerChunk(short* outputBuffer, unsigned long framesPerBu
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Stream::setLatency(size_t latency)
|
||||||
|
{
|
||||||
|
latencyMs = latency;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
time_point_ms Stream::getNextPlayerChunk(short* outputBuffer, unsigned long framesPerBuffer, int correction)
|
time_point_ms Stream::getNextPlayerChunk(short* outputBuffer, unsigned long framesPerBuffer, int correction)
|
||||||
{
|
{
|
||||||
|
@ -134,7 +139,7 @@ void Stream::getPlayerChunk(short* outputBuffer, double outputBufferDacTime, uns
|
||||||
// std::cerr << "Chunk " << i << ": " << chunks[i]->getAge() - bufferMs << "\n";
|
// std::cerr << "Chunk " << i << ": " << chunks[i]->getAge() - bufferMs << "\n";
|
||||||
while (true)// (int i=0; i<(int)(round((float)sleep / (float)PLAYER_CHUNK_MS)) + 1; ++i)
|
while (true)// (int i=0; i<(int)(round((float)sleep / (float)PLAYER_CHUNK_MS)) + 1; ++i)
|
||||||
{
|
{
|
||||||
int age = Chunk::getAge(getNextPlayerChunk(outputBuffer, framesPerBuffer)) - bufferMs;
|
int age = Chunk::getAge(getNextPlayerChunk(outputBuffer, framesPerBuffer)) - bufferMs + latencyMs;
|
||||||
age += 4*cardBuffer;
|
age += 4*cardBuffer;
|
||||||
if (age < msBuffer / 2)
|
if (age < msBuffer / 2)
|
||||||
break;
|
break;
|
||||||
|
@ -156,7 +161,7 @@ void Stream::getPlayerChunk(short* outputBuffer, double outputBufferDacTime, uns
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int age = Chunk::getAge(getNextPlayerChunk(outputBuffer, framesPerBuffer, correction)) - bufferMs;// + outputBufferDacTime*1000;
|
int age = Chunk::getAge(getNextPlayerChunk(outputBuffer, framesPerBuffer, correction)) - bufferMs - latencyMs;// + outputBufferDacTime*1000;
|
||||||
|
|
||||||
|
|
||||||
if (outputBufferDacTime < 1)
|
if (outputBufferDacTime < 1)
|
||||||
|
@ -165,7 +170,7 @@ void Stream::getPlayerChunk(short* outputBuffer, double outputBufferDacTime, uns
|
||||||
// if (pCardBuffer->full())
|
// if (pCardBuffer->full())
|
||||||
// age += 4*cardBuffer;
|
// age += 4*cardBuffer;
|
||||||
|
|
||||||
cout << age << "\t" << framesPerBuffer << "\t" << msBuffer << "\t" << ticks << "\t" << cardBuffer << "\t" << outputBufferDacTime*1000 << "\n";
|
// cout << age << "\t" << framesPerBuffer << "\t" << msBuffer << "\t" << ticks << "\t" << cardBuffer << "\t" << outputBufferDacTime*1000 << "\n";
|
||||||
|
|
||||||
|
|
||||||
if (sleep == 0)
|
if (sleep == 0)
|
||||||
|
|
2
stream.h
2
stream.h
|
@ -20,6 +20,7 @@ public:
|
||||||
void addChunk(Chunk* chunk);
|
void addChunk(Chunk* chunk);
|
||||||
void getPlayerChunk(short* outputBuffer, double outputBufferDacTime, unsigned long framesPerBuffer);
|
void getPlayerChunk(short* outputBuffer, double outputBufferDacTime, unsigned long framesPerBuffer);
|
||||||
void setBufferLen(size_t bufferLenMs);
|
void setBufferLen(size_t bufferLenMs);
|
||||||
|
void setLatency(size_t latency);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
time_point_ms getNextPlayerChunk(short* outputBuffer, unsigned long framesPerBuffer, int correction = 0);
|
time_point_ms getNextPlayerChunk(short* outputBuffer, unsigned long framesPerBuffer, int correction = 0);
|
||||||
|
@ -42,6 +43,7 @@ private:
|
||||||
int shortMedian;
|
int shortMedian;
|
||||||
time_t lastUpdate;
|
time_t lastUpdate;
|
||||||
int bufferMs;
|
int bufferMs;
|
||||||
|
int latencyMs;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue