hopefully fixed internal buffering of audio streams
This commit is contained in:
parent
087698df8c
commit
80179e4bfa
1 changed files with 11 additions and 6 deletions
|
@ -47,7 +47,10 @@ class Player extends EventEmitter {
|
|||
if (this.isPlaying() === false) {
|
||||
return;
|
||||
}
|
||||
this.playFromBuffer();
|
||||
if (this.buffer.size < this.buffer.limit) {
|
||||
logger.debug('fell below buffer limit of ' + this.buffer.limit + ' bytes, resuming read stream...');
|
||||
this.stream.resume();
|
||||
}
|
||||
});
|
||||
this.buffer.limit = config?.buffer?.limit;
|
||||
if (isNaN(this.buffer.limit) || this.buffer.limit < this.buffer.threshold) {
|
||||
|
@ -58,7 +61,7 @@ class Player extends EventEmitter {
|
|||
|
||||
#fillBuffer() {
|
||||
this.stream.on('data', (data) => {
|
||||
this.buffer.size += data.length;
|
||||
this.buffer.size += data.length;
|
||||
this.buffer.elements.push(data);
|
||||
if (this.buffer.announced === undefined && this.buffer.size >= this.buffer.threshold) {
|
||||
this.buffer.announced = true;
|
||||
|
@ -68,6 +71,7 @@ class Player extends EventEmitter {
|
|||
if (this.buffer.size >= this.buffer.limit) {
|
||||
logger.debug('buffer limit of ' + this.buffer.limit + ' bytes reached, pausing read stream...');
|
||||
this.stream.pause();
|
||||
this.playFromBuffer();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -79,12 +83,13 @@ class Player extends EventEmitter {
|
|||
|
||||
playFromBuffer() {
|
||||
const tmp = this.buffer.elements[0];
|
||||
if (tmp === undefined) {
|
||||
return;
|
||||
}
|
||||
this.buffer.elements.shift();
|
||||
this.buffer.size -= tmp.length;
|
||||
this.speaker.write(tmp);
|
||||
if (this.buffer.size < this.buffer.limit) {
|
||||
logger.debug('fell below buffer limit of ' + this.buffer.limit + ' bytes, resuming read stream...');
|
||||
this.stream.resume();
|
||||
if (this.speaker.write(tmp) === false) {
|
||||
this.stream.pause();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue