pull/49/head
Marcin Kondej 2016-12-13 02:43:28 +01:00
rodzic ac213e04ff
commit 6ea4391278
2 zmienionych plików z 31 dodań i 19 usunięć

Wyświetl plik

@ -111,9 +111,9 @@ void Transmitter::play(string filename, double frequency, bool loop)
} }
transmitting = true; transmitting = true;
stop = false; forceStop = false;
WaveReader* reader = new WaveReader(filename != "-" ? filename : string(), doStop); WaveReader* reader = new WaveReader(filename != "-" ? filename : string(), forceStop);
AudioFormat* format = reader->getFormat(); AudioFormat* format = reader->getFormat();
if (filename == "-") { if (filename == "-") {
usleep(STDIN_READ_DELAY); usleep(STDIN_READ_DELAY);
@ -125,9 +125,15 @@ void Transmitter::play(string filename, double frequency, bool loop)
frameOffset = 0; frameOffset = 0;
restart = false; restart = false;
vector<float>* frames = reader->getFrames(bufferFrames, 0, doStop); vector<float>* frames = reader->getFrames(bufferFrames, 0, forceStop);
eof = frames->size() < bufferFrames; if (!forceStop) {
buffer = frames; eof = frames->size() < bufferFrames;
buffer = frames;
} else {
delete format;
delete reader;
return;
}
pthread_t thread; pthread_t thread;
void* params = (void*)&format->sampleRate; void* params = (void*)&format->sampleRate;
@ -143,24 +149,30 @@ void Transmitter::play(string filename, double frequency, bool loop)
usleep(BUFFER_TIME / 2); usleep(BUFFER_TIME / 2);
while (!stop) { while (!forceStop) {
while (!eof && !stop) { while (!eof && !forceStop) {
if (buffer == NULL) { if (buffer == NULL) {
frames = reader->getFrames(bufferFrames, frameOffset + bufferFrames, stop); frames = reader->getFrames(bufferFrames, frameOffset + bufferFrames, forceStop);
eof = frames->size() < bufferFrames; if (!forceStop) {
buffer = frames; eof = frames->size() < bufferFrames;
buffer = frames;
}
}
if (!forceStop) {
usleep(BUFFER_TIME / 2);
} }
usleep(BUFFER_TIME / 2);
} }
if (loop && !doStop) { if (loop && !forceStop) {
frameOffset = 0; frameOffset = 0;
restart = true; restart = true;
frames = reader->getFrames(bufferFrames, 0, stop); frames = reader->getFrames(bufferFrames, 0, forceStop);
eof = frames->size() < bufferFrames; if (!forceStop) {
buffer = frames; eof = frames->size() < bufferFrames;
usleep(BUFFER_TIME / 2); buffer = frames;
usleep(BUFFER_TIME / 2);
}
} else { } else {
stop = true; forceStop = true;
} }
} }
transmitting = false; transmitting = false;
@ -252,5 +264,5 @@ void* Transmitter::transmit(void* params)
void Transmitter::stop() void Transmitter::stop()
{ {
stop = true; forceStop = true;
} }

Wyświetl plik

@ -56,7 +56,7 @@ class Transmitter
private: private:
Transmitter(); Transmitter();
bool stop, eof; bool forceStop, eof;
static void* peripherals; static void* peripherals;
static vector<float>* buffer; static vector<float>* buffer;