| @@ -183,7 +183,7 @@ class AudioStream { | |||
| close: async () => { | |||
| console.log('Done writing input stream.'); | |||
| if (channelData.length) { | |||
| this.inputController.enqueue(new Uint8Array(channelData)); | |||
| this.inputController.enqueue(new Uint8Array(channelData.splice(0, channelData.length))); | |||
| } | |||
| this.inputController.close(); | |||
| this.source.postMessage('Done writing input stream.', '*'); | |||
| @@ -210,24 +210,14 @@ class AudioStream { | |||
| 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 | |||
| const floats = new Float32Array(this.channelDataLength / 2); | |||
| for (let i = 0; i < uint16.length; i++) { | |||
| const int = uint16[i]; | |||
| // If the high bit is on, then it is a negative number, and actually counts backwards. | |||
| const float = | |||
| int >= 0x8000 ? -(0x10000 - int) / 0x8000 : int / 0x7fff; | |||
| floats[i] = float; | |||
| } | |||
| } | |||
| const frame = new AudioData({ | |||
| format: 'FLTP', | |||
| format: 's16', | |||
| sampleRate: 22050, | |||
| numberOfChannels: 1, | |||
| numberOfFrames: 220, | |||
| numberOfFrames: value.length / 2, | |||
| timestamp, | |||
| data: floats, | |||
| data: value, | |||
| }); | |||
| this.duration += (frame.duration / 10**6); | |||
| if (this.recorder && this.recorder.state === 'inactive') { | |||