@@ -52,46 +52,56 @@ class AzureSTT {
5252 const recognizer = new SpeechRecognizer ( speechConfig , audioConfig )
5353
5454 const events = new EventEmitter ( )
55+ let eventHistory = [ ]
5556
5657 const recognizedHandler = ( s , e ) => {
5758 if ( e . result . reason === ResultReason . RecognizedSpeech || e . result . reason === ResultReason . RecognizingSpeech ) {
5859 const event = {
60+ status : 'ok' ,
5961 text : e . result . text ,
6062 final : e . result . reason === ResultReason . RecognizedSpeech ,
6163 debug : e . result
6264 }
6365 event . start = _ . round ( e . result . offset / 10000000 , 3 )
6466 event . end = _ . round ( ( e . result . offset + e . result . duration ) / 10000000 , 3 )
6567 events . emit ( 'data' , event )
68+ eventHistory . push ( event )
6669 }
6770 }
6871 recognizer . recognizing = recognizedHandler
6972 recognizer . recognized = recognizedHandler
7073 recognizer . sessionStopped = ( s , e ) => {
7174 recognizer . stopContinuousRecognitionAsync ( )
72- events . emit ( 'close' )
75+ }
76+ recognizer . canceled = ( s , e ) => {
77+ const event = {
78+ status : 'error' ,
79+ err : `Azure STT failed: ${ getAzureErrorDetails ( e ) } `
80+ }
81+ events . emit ( 'data' , event )
82+ eventHistory . push ( event )
7383 }
7484 recognizer . startContinuousRecognitionAsync ( )
7585
7686 return new Promise ( ( resolve , reject ) => {
77- recognizer . canceled = ( s , e ) => {
78- recognizer . stopContinuousRecognitionAsync ( )
79- reject ( new Error ( `Azure STT failed: ${ getAzureErrorDetails ( e ) } ` ) )
80- }
81- recognizer . sessionStarted = ( s , e ) => {
82- resolve ( {
83- events ,
84- write : ( buffer ) => {
85- pushStream . write ( buffer )
86- } ,
87- end : ( ) => {
88- } ,
89- close : ( ) => {
90- recognizer . stopContinuousRecognitionAsync ( )
91- pushStream . close ( )
87+ resolve ( {
88+ events ,
89+ write : ( buffer ) => {
90+ pushStream . write ( buffer )
91+ } ,
92+ end : ( ) => {
93+ } ,
94+ close : ( ) => {
95+ recognizer . stopContinuousRecognitionAsync ( )
96+ pushStream . close ( )
97+ eventHistory = null
98+ } ,
99+ triggerHistoryEmit : ( ) => {
100+ for ( const eh of eventHistory ) {
101+ events . emit ( 'data' , eh )
92102 }
93- } )
94- }
103+ }
104+ } )
95105 } )
96106 }
97107
0 commit comments