@@ -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}
423425function 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+
427444function clearBuffer ( ) {
428445 if ( _lookbackRingBuffer && _lookbackRingBuffer . framesAvailable ) {
429446 _lookbackRingBuffer = new RingBuffer ( _lookbackBufferSize , channelCount , isFloat32Input ? "Float32" : "Int16" ) ;
0 commit comments