diff --git a/classes/Player.js b/classes/Player.js index fc1d405..bc129e4 100644 --- a/classes/Player.js +++ b/classes/Player.js @@ -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(); } }