From 4b2c9c2f3bf5b7eebf5ac2cfd67dda1d46306543 Mon Sep 17 00:00:00 2001 From: fdp <1286779656@qq.com> Date: Tue, 6 Jan 2026 14:55:07 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=89=E4=B8=AA=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../agent_service/AgentService.kt | 58 ++++++++++--------- 1 file changed, 30 insertions(+), 28 deletions(-) diff --git a/local_plugins/agent_service/android/src/main/kotlin/com/yunqiinnovation/agent_service/AgentService.kt b/local_plugins/agent_service/android/src/main/kotlin/com/yunqiinnovation/agent_service/AgentService.kt index dc68c6d7b..9b4921350 100644 --- a/local_plugins/agent_service/android/src/main/kotlin/com/yunqiinnovation/agent_service/AgentService.kt +++ b/local_plugins/agent_service/android/src/main/kotlin/com/yunqiinnovation/agent_service/AgentService.kt @@ -155,6 +155,7 @@ object AgentService : CoroutineScope { //是否保留最终结果 private var isKeepResult = true; // 识别结果 + private var currentRecognitionResult = "" private var recognitionResult = "" private var pendingProcessJob: Job? = null @@ -633,26 +634,7 @@ object AgentService : CoroutineScope { return false } Log.d("TAG", "开始语音识别startRecognition?") - stopRecognition() - - - // if (isRecognitionActive&&audioSourceType==AzureAsrHelper.AudioSourceType.MICROPHONE){ - // Log.d(TAG, "开始语音识别stopRecognition") - // // BleService.closeCodec() - // stopRecognition() - - // } - // if((isExternalActive&&audioSourceType==AzureAsrHelper.AudioSourceType.MICROPHONE)||!isRecognitionActive) - // { - // Log.d(TAG, "开始语音识别BleService.openEncoder") - // BleService.openEncoder() - - // } - // if(isRecognitionActive) - // { - // Log.d(TAG, "开始语音识别azureAsrHelper?.startContinuousRecognition(audioSourceType)") - // return true - // } + // 检查录音权限 if (!isExternalActive && !checkRecordAudioPermission()) { Log.e(TAG, "需要录音权限") @@ -712,7 +694,9 @@ object AgentService : CoroutineScope { if(currsessionAsrId.isEmpty()) { currsessionAsrId = sessionid } + var text = recognitionResult + recognizing + currentRecognitionResult = text sendEvent( "recognizing", mapOf( "sessionid" to currsessionAsrId, @@ -755,11 +739,19 @@ object AgentService : CoroutineScope { if (currsessionAsrId.isEmpty()) { currsessionAsrId = sessionid } + var text = result - if(recognitionResult.isEmpty()) { + if(text.isNotEmpty()) + { text = text.replace(Regex("^[,。?、!, . ? !]+"), "") + recognitionResult += text + } + else{ + recognitionResult= currentRecognitionResult + currentRecognitionResult= "" } - recognitionResult += text + if (recognitionResult.isNotEmpty()) + { if (currentRecognitionMode == "push_to_talk") { //按住说话 sendEvent( "recognizing", mapOf( @@ -779,21 +771,26 @@ object AgentService : CoroutineScope { ) pendingProcessJob = launch { delay(1500) - if (recognitionResult.isNotEmpty()) { - sendEvent( + sendEvent( "recognition_result", mapOf( "sessionid" to currsessionAsrId, "text" to recognitionResult, "language" to detectedLanguage ) ) - processWithChatApi(currsessionAsrId, recognitionResult) - recognitionResult = "" + recognitionResult = "" currsessionAsrId = "" - } + + processWithChatApi(currsessionAsrId, recognitionResult) + } } } + else + { + Log.d(TAG, "liwei-------- onResult: $sessionid $result $currentRecognitionMode 空字符串") + } + // } _hasSpeechDetected.set(false) restartIdleCheck() @@ -805,6 +802,7 @@ object AgentService : CoroutineScope { sendEvent("recognition_started", mapOf("sessionid" to sessionid, "status" to "started")) // 使用模式感知的空闲检测启动方法 recognitionResult = "" + currentRecognitionResult = "" currsessionAsrId = "" pendingProcessJob?.cancel() audioPlayer?.playAudio(R.raw.start) @@ -815,6 +813,7 @@ object AgentService : CoroutineScope { override fun onSessionStopped(sessionid:String) { Log.d(TAG, "liwei-------- onSessionStopped: $sessionid $currsessionAsrId $recognitionResult $currentRecognitionMode") if (currentRecognitionMode == "push_to_talk") { //按住说话 + if (recognitionResult.isNotEmpty()){ sendEvent( "recognition_result", mapOf( @@ -824,6 +823,9 @@ object AgentService : CoroutineScope { ) processWithChatApi(currsessionAsrId, recognitionResult) } + else{ + Log.d(TAG, "liwei-------- onSessionStopped: $sessionid $currsessionAsrId $recognitionResult $currentRecognitionMode 空字符串") + } sendEvent("recognition_stopped", mapOf("sessionid" to currsessionAsrId, "status" to "stopped")) }else{ sendEvent("recognition_stopped", mapOf("sessionid" to sessionid, "status" to "stopped")) @@ -908,7 +910,7 @@ object AgentService : CoroutineScope { fun interruptCurrentResponse() { if (isAiStreaming || isTtsSpeaking) { val startTime = System.currentTimeMillis() - + stopRecognition() // 并行执行停止操作,加快响应速度 stopTts() stopAiStream()