Skip to content

Commit aa182e1

Browse files
committed
make sure stt-worker ends after last byte
1 parent bba9ed7 commit aa182e1

File tree

1 file changed

+27
-10
lines changed

1 file changed

+27
-10
lines changed

src/modules/stt-socket-worker.js

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -128,11 +128,6 @@ function gateControl(open, gateOptions, triggeredOnError){
128128
msg.gate.isOpen = false;
129129
msg.gate.openedAt = _gateOpenTS;
130130
msg.gate.closedAt = _gateCloseTS;
131-
var closedDueToBufferLimit = (!continuous && recordedBuffers && recordBufferMaxN
132-
&& recordedBuffers.length && recordedBuffers.length >= recordBufferMaxN);
133-
if (closedDueToBufferLimit){
134-
msg.gate.bufferOrTimeLimit = true;
135-
}
136131
//---------- DRY-RUN TEST: fake final result ----------
137132
if (enableDryRun && recordedBuffers.length && recordedBuffers.length > recordBufferMaxN/3){
138133
setTimeout(function(){
@@ -145,12 +140,14 @@ function gateControl(open, gateOptions, triggeredOnError){
145140
}, 2000);
146141
//-------------------------------------------------------
147142
}else if (sttServer && sttServer.connectionIsOpen && sttServer.isReadyForStream){
148-
var byteLength = 0;
149-
recordedBuffers.forEach(function(ta){
150-
byteLength += ta.byteLength;
151-
});
152-
sttServer.sendAudioEnd(byteLength, closedDueToBufferLimit); //close input and request final result
143+
var closedDueToBufferLimit = checkIfBufferLimitWasReached();
144+
if (closedDueToBufferLimit){
145+
msg.gate.bufferOrTimeLimit = true;
146+
}
147+
//close input and request final result
148+
requestFinalResult(closedDueToBufferLimit);
153149
}
150+
//else we rely on '_gateCloseTS' to finish after last buffer is sent
154151

155152
//send WAV?
156153
if (!triggeredOnError && returnAudioFile && recordedBuffers.length){
@@ -419,11 +416,31 @@ function startOrContinueStream(){
419416
}else{
420417
//ignore
421418
}
419+
//no bytes left and stream ended?
420+
if (_gateCloseTS){
421+
var closedDueToBufferLimit = checkIfBufferLimitWasReached();
422+
requestFinalResult(closedDueToBufferLimit);
423+
}
422424
}
423425
function sendBytes(data){
424426
sttServer.sendBytes(data);
425427
}
426428

429+
function requestFinalResult(closedDueToBufferLimit){
430+
//close input and request final result
431+
var byteLength = 0;
432+
recordedBuffers.forEach(function(ta){
433+
byteLength += ta.byteLength;
434+
});
435+
sttServer.sendAudioEnd(byteLength, closedDueToBufferLimit);
436+
}
437+
438+
function checkIfBufferLimitWasReached(){
439+
var reachedBufferLimit = (!continuous && recordedBuffers && recordBufferMaxN
440+
&& recordedBuffers.length && recordedBuffers.length >= recordBufferMaxN);
441+
return reachedBufferLimit;
442+
}
443+
427444
function clearBuffer(){
428445
if (_lookbackRingBuffer && _lookbackRingBuffer.framesAvailable){
429446
_lookbackRingBuffer = new RingBuffer(_lookbackBufferSize, channelCount, isFloat32Input? "Float32" : "Int16");

0 commit comments

Comments
 (0)