kopia lustrzana https://github.com/markondej/fm_transmitter
Bug fix
rodzic
ac213e04ff
commit
6ea4391278
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Ładowanie…
Reference in New Issue