From e9ba8d03db6708b3204233d640d97b1e64bd5572 Mon Sep 17 00:00:00 2001 From: Yang Jiahui Date: Mon, 18 Aug 2025 16:30:53 +0800 Subject: [PATCH] [bugfix] can not read the last sentence --- .../ai_chat_assistant/MainActivity.java | 29 +++++++++---------- lib/services/chat_sse_service.dart | 7 +++-- lib/utils/common_util.dart | 2 ++ lib/utils/tts_util.dart | 6 +++- 4 files changed, 26 insertions(+), 18 deletions(-) diff --git a/android/app/src/main/java/com/example/ai_chat_assistant/MainActivity.java b/android/app/src/main/java/com/example/ai_chat_assistant/MainActivity.java index 9011e2c..d096418 100644 --- a/android/app/src/main/java/com/example/ai_chat_assistant/MainActivity.java +++ b/android/app/src/main/java/com/example/ai_chat_assistant/MainActivity.java @@ -64,7 +64,6 @@ public class MainActivity extends FlutterActivity implements INativeNuiCallback @Override public void configureFlutterEngine(FlutterEngine flutterEngine) { super.configureFlutterEngine(flutterEngine); - System.out.println("??????????????????????????????????"); new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), TTS_CHANNEL) .setMethodCallHandler((call, result) -> { Map args = (Map) call.arguments; @@ -84,9 +83,11 @@ public class MainActivity extends FlutterActivity implements INativeNuiCallback } sendTts(textArg.toString()); break; + case "complete": + completeTts(); + break; case "stop": stopTts(); - result.success("已停止"); break; default: result.notImplemented(); @@ -129,6 +130,7 @@ public class MainActivity extends FlutterActivity implements INativeNuiCallback protected void onStop() { Log.i(TAG, "onStop"); super.onStop(); + asrInstance.release(); } @@ -189,6 +191,10 @@ public class MainActivity extends FlutterActivity implements INativeNuiCallback streamInputTtsInstance.sendStreamInputTts(text); } + private void completeTts() { + streamInputTtsInstance.stopStreamInputTts(); + } + private void stopTts() { streamInputTtsInstance.cancelStreamInputTts(); ttsAudioTrack.stop(); @@ -196,16 +202,6 @@ public class MainActivity extends FlutterActivity implements INativeNuiCallback private void startAsr() { asrText = ""; - if (asrAudioRecorder == null) { - asrAudioRecorder = new AudioRecord(MediaRecorder.AudioSource.DEFAULT, - ASR_SAMPLE_RATE, - AudioFormat.CHANNEL_IN_MONO, - AudioFormat.ENCODING_PCM_16BIT, - ASR_WAVE_FRAM_SIZE * 4); - Log.d(TAG, "AudioRecorder new ..."); - } else { - Log.w(TAG, "AudioRecord has been new ..."); - } asrHandler.post(() -> { String setParamsString = genAsrParams(); Log.i(TAG, "nui set params " + setParamsString); @@ -281,9 +277,12 @@ public class MainActivity extends FlutterActivity implements INativeNuiCallback Log.i(TAG, "onNuiAudioStateChanged"); if (state == Constants.AudioState.STATE_OPEN) { Log.i(TAG, "audio recorder start"); - if (asrAudioRecorder != null) { - asrAudioRecorder.startRecording(); - } + asrAudioRecorder = new AudioRecord(MediaRecorder.AudioSource.DEFAULT, + ASR_SAMPLE_RATE, + AudioFormat.CHANNEL_IN_MONO, + AudioFormat.ENCODING_PCM_16BIT, + ASR_WAVE_FRAM_SIZE * 4); + asrAudioRecorder.startRecording(); Log.i(TAG, "audio recorder start done"); } else if (state == Constants.AudioState.STATE_CLOSE) { Log.i(TAG, "audio recorder close"); diff --git a/lib/services/chat_sse_service.dart b/lib/services/chat_sse_service.dart index 313dabd..d39454a 100644 --- a/lib/services/chat_sse_service.dart +++ b/lib/services/chat_sse_service.dart @@ -62,6 +62,7 @@ class ChatSseService { if (line.startsWith('data:')) { final jsonStr = line.substring(5).trim(); if (jsonStr == '[DONE]' || jsonStr.contains('message_end')) { + TtsUtil.complete(); onStreamResponse(messageId, responseText, true); break; } @@ -89,8 +90,8 @@ class ChatSseService { await _startTtsFuture; _isFirstData = false; } - print("----------------------Send text: " + completeText); completeText += isChinese ? ',' : ','; + print("----------------------Send text: " + completeText); TtsUtil.send(completeText); } tempText = tempText.substring(endIndex).trim(); @@ -108,6 +109,7 @@ class ChatSseService { } catch (e) { // todo } finally { + print("------------------------------finally"); resetRequest(); } } @@ -123,7 +125,7 @@ class ChatSseService { Future abort() async { _isAborted = true; - TtsUtil.stopTts(); + TtsUtil.stop(); resetRequest(); } @@ -136,6 +138,7 @@ class ChatSseService { _currentResponse = null; _isFirstData = true; _isTtsStarted = false; + _startTtsFuture = null; } int _getCompleteTextEndIndex(String buffer) { diff --git a/lib/utils/common_util.dart b/lib/utils/common_util.dart index 201dfbd..f81e266 100644 --- a/lib/utils/common_util.dart +++ b/lib/utils/common_util.dart @@ -57,6 +57,8 @@ class CommonUtil { cleanedText = cleanedText.replaceAllMapped( RegExp(r'UNYX', caseSensitive: false), (m) => 'Unix'); } + cleanedText = cleanedText.replaceAllMapped( + RegExp(r'400-023-4567', caseSensitive: false), (m) => '4 0 0 - 0 2 3 - 4 5 6 7'); } return cleanedText; diff --git a/lib/utils/tts_util.dart b/lib/utils/tts_util.dart index ba4d842..e8862aa 100644 --- a/lib/utils/tts_util.dart +++ b/lib/utils/tts_util.dart @@ -17,7 +17,11 @@ class TtsUtil { await execute('send', {'text': text}); } - static Future stopTts() async { + static Future complete() async { + await execute('complete'); + } + + static Future stop() async { await execute('stop'); } }