diff --git a/lib/src/yx_asr_service.dart b/lib/src/yx_asr_service.dart index 02e232d..5c7b560 100644 --- a/lib/src/yx_asr_service.dart +++ b/lib/src/yx_asr_service.dart @@ -221,6 +221,7 @@ class YxAsrService implements SpeechRecognitionService { bool _isStartingRecording = false; // 防抖保护:防止重复启动录音 bool _isInitialized = false; String _currentModelPath = ''; + String _lastRecognizedText = ''; // 记录上次识别的文本,避免重复发送 // 识别速度配置 RecognitionSpeed _recognitionSpeed = RecognitionSpeed.fast; @@ -513,6 +514,7 @@ class YxAsrService implements SpeechRecognitionService { await _startAudioRecording(_sampleRate.hz); _isListening = true; + _lastRecognizedText = ''; // 重置上次识别的文本 _statusController.add(true); // 开始识别循环处理 @@ -740,13 +742,20 @@ class YxAsrService implements SpeechRecognitionService { final result = _recognizer!.getResult(_stream!); debugPrint('🔍 [YxAsr] 获取识别结果: "${result.text}"'); - if (result.text.isNotEmpty && partialResults) { + // 只有当识别结果不为空、启用了部分结果、且与上次结果不同时才发送 + if (result.text.isNotEmpty && + partialResults && + result.text != _lastRecognizedText) { debugPrint('🎤 [YxAsr] 发送实时识别结果: ${result.text}'); + _lastRecognizedText = result.text; // 更新最后识别的文本 _sendResult( recognizedWords: result.text, confidence: 0.8, alternatives: [], ); + } else if (result.text.isNotEmpty && + result.text == _lastRecognizedText) { + debugPrint('🔄 [YxAsr] 跳过重复识别结果: "${result.text}"'); } // 端点检测已禁用,由用户手动控制录音结束