@@ -60,6 +60,9 @@ class ExpoSpeechService(
60
60
private var delayedFileStreamer: DelayedFileStreamer ? = null
61
61
private var soundState = SoundState .INACTIVE
62
62
63
+ private var lastDetectedLanguage: String? = null
64
+ private var lastLanguageConfidence: Float? = null
65
+
63
66
var recognitionState = RecognitionState .INACTIVE
64
67
65
68
companion object {
@@ -121,6 +124,8 @@ class ExpoSpeechService(
121
124
audioRecorder = null
122
125
delayedFileStreamer?.close()
123
126
delayedFileStreamer = null
127
+ lastDetectedLanguage = null
128
+ lastLanguageConfidence = null
124
129
recognitionState = RecognitionState .STARTING
125
130
soundState = SoundState .INACTIVE
126
131
lastVolumeChangeEventTime = 0L
@@ -435,7 +440,7 @@ class ExpoSpeechService(
435
440
when {
436
441
// File URI
437
442
sourceUri.startsWith(" file://" ) -> File (URI (sourceUri))
438
-
443
+
439
444
// Local file path without URI scheme
440
445
! sourceUri.startsWith(" https://" ) -> File (sourceUri)
441
446
@@ -624,11 +629,23 @@ class ExpoSpeechService(
624
629
}
625
630
626
631
override fun onLanguageDetection (results : Bundle ) {
627
- sendEvent(" languagedetection" , mapOf (
628
- " detectedLanguage" to results.getString(SpeechRecognizer .DETECTED_LANGUAGE ),
629
- " confidence" to languageDetectionConfidenceLevelToFloat(results.getInt(SpeechRecognizer .LANGUAGE_DETECTION_CONFIDENCE_LEVEL )),
630
- " topLocaleAlternatives" to results.getStringArrayList(SpeechRecognizer .TOP_LOCALE_ALTERNATIVES )
631
- ))
632
+ val detectedLanguage = results.getString(SpeechRecognizer .DETECTED_LANGUAGE )
633
+ val confidence = languageDetectionConfidenceLevelToFloat(results.getInt(SpeechRecognizer .LANGUAGE_DETECTION_CONFIDENCE_LEVEL ))
634
+
635
+ // Only send event if language or confidence has changed
636
+ if (detectedLanguage != lastDetectedLanguage || confidence != lastLanguageConfidence) {
637
+ lastDetectedLanguage = detectedLanguage
638
+ lastLanguageConfidence = confidence
639
+
640
+ sendEvent(
641
+ " languagedetection" ,
642
+ mapOf (
643
+ " detectedLanguage" to detectedLanguage,
644
+ " confidence" to confidence,
645
+ " topLocaleAlternatives" to results.getStringArrayList(SpeechRecognizer .TOP_LOCALE_ALTERNATIVES ),
646
+ ),
647
+ )
648
+ }
632
649
}
633
650
634
651
/* *
0 commit comments