From 6874f6e9133e8bdc976b52a5f8498ebeed81189c Mon Sep 17 00:00:00 2001 From: guest271314 Date: Sat, 24 Jul 2021 20:03:03 -0700 Subject: [PATCH] Use read().done to verify all bytes are written Substitute using existing defined done of ReadableStreamDefaultReader.read() for value.length < this.channelDataLength && (await this.inputReader.read()).done to verify all input stream bytes are written --- chromium_extension/AudioStream.js | 33 +++++++++++++------------------ 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/chromium_extension/AudioStream.js b/chromium_extension/AudioStream.js index 1001b660..416c5708 100644 --- a/chromium_extension/AudioStream.js +++ b/chromium_extension/AudioStream.js @@ -1,4 +1,3 @@ - class AudioStream { constructor({ stdin, recorder = false }) { if (!/^espeak-ng/.test(stdin)) { @@ -197,7 +196,21 @@ class AudioStream { write: async ({ timestamp }) => { const { value, done } = await this.inputReader.read(); if (done) { + await this.inputReader.closed; console.log({ done }); + try { + await this.disconnect(); + } catch (err) { + console.warn(err.message); + } + console.log( + `readOffset:${this.readOffset}, duration:${this.duration}, ac.currentTime:${this.ac.currentTime}`, + `generator.readyState:${this.generator.readyState}, audioWriter.desiredSize:${this.audioWriter.desiredSize}` + ); + return await Promise.all([ + new Promise((resolve) => (this.stream.oninactive = resolve)), + new Promise((resolve) => (this.ac.onstatechange = resolve)), + ]); } const uint16 = new Uint16Array(value.buffer); // https://stackoverflow.com/a/35248852 @@ -228,24 +241,6 @@ class AudioStream { this.recorder.start(); } await this.audioWriter.write(frame); - if ( - value.length < this.channelDataLength && - (await this.inputReader.read()).done - ) { - try { - await this.disconnect(); - } catch (err) { - console.warn(err.message); - } - console.log( - `readOffset:${this.readOffset}, duration:${this.duration}, ac.currentTime:${this.ac.currentTime}`, - `generator.readyState:${this.generator.readyState}, audioWriter.desiredSize:${this.audioWriter.desiredSize}` - ); - return await Promise.all([ - new Promise((resolve) => (this.stream.oninactive = resolve)), - new Promise((resolve) => (this.ac.onstatechange = resolve)), - ]); - } }, abort(e) { console.error(e.message);