diff --git a/chunk.h b/chunk.h index ed41009a..6266c365 100644 --- a/chunk.h +++ b/chunk.h @@ -1,7 +1,7 @@ #ifndef CHUNK_H #define CHUNK_H -#define MS (20) +#define MS (50) //44100 / 20 = 2205 #define SAMPLE_RATE (44100) #define SIZE (SAMPLE_RATE*4*MS/1000) diff --git a/client.cpp b/client.cpp index 36daf490..b1ada289 100644 --- a/client.cpp +++ b/client.cpp @@ -163,7 +163,7 @@ static int patestCallback( const void *inputBuffer, void *outputBuffer, PaStreamCallbackFlags statusFlags, void *userData ) { - std::cerr << "outputBufferDacTime: " << timeInfo->outputBufferDacTime*1000 << "\n"; +// std::cerr << "outputBufferDacTime: " << timeInfo->outputBufferDacTime*1000 << "\n"; std::deque* chunks = (std::deque*)userData; short* out = (short*)outputBuffer; unsigned long i; @@ -181,23 +181,30 @@ static int patestCallback( const void *inputBuffer, void *outputBuffer, cv.wait(lck); mutex.lock(); chunk = chunks->front(); - std::cerr << "Chunks: " << chunks->size() << "\n"; - chunks->pop_front(); +// std::cerr << "Chunks: " << chunks->size() << "\n"; mutex.unlock(); age = getAge(*chunk) + timeInfo->outputBufferDacTime*1000; - std::cerr << "age: " << getAge(*chunk) << "\t" << age << "\n"; - if (age > bufferMs + 150) + std::cerr << "age: " << getAge(*chunk) << "\t" << age << "\t" << timeInfo->outputBufferDacTime*1000 << "\n"; + if (age > bufferMs + 2*MS) { + chunks->pop_front(); delete chunk; + std::cerr << "packe too old, dropping\n"; usleep(100); } - else if (age < bufferMs) + else if (age < bufferMs - 2*MS) { - usleep(((bufferMs - age) + 100) * 1000); + chunk = new Chunk(); + memset(&(chunk->payload[0]), 0, SIZE); + std::cerr << "age < bufferMs (" << age << " < " << bufferMs << "), playing silence\n"; + usleep(10 * 1000); break; } - else + else + { + chunks->pop_front(); break; + } } for( i=0; i