[update] support asr by aliyun android sdk

This commit is contained in:
2025-08-15 14:48:29 +08:00
parent ae3289dc29
commit 9715a18c65
3 changed files with 316 additions and 51 deletions

View File

@@ -4,12 +4,10 @@ import 'dart:io';
import 'dart:math';
import 'package:ai_chat_assistant/utils/tts_util.dart';
import 'package:flutter/services.dart';
import '../utils/common_util.dart';
class ChatSseService {
static const MethodChannel _channel = MethodChannel('com.example.ai_chat_assistant/tts');
// 缓存用户ID和会话ID
String? _cachedUserId;
String? _cachedConversationId;

View File

@@ -1,9 +1,8 @@
import 'dart:io';
import 'package:ai_chat_assistant/utils/common_util.dart';
import 'package:ai_chat_assistant/utils/tts_util.dart';
import 'package:basic_intl/intl.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:uuid/uuid.dart';
import '../enums/vehicle_command_type.dart';
@@ -14,22 +13,35 @@ import '../models/vehicle_cmd.dart';
import '../services/chat_sse_service.dart';
import '../services/classification_service.dart';
import '../services/control_recognition_service.dart';
import '../services/audio_recorder_service.dart';
import '../services/voice_recognition_service.dart';
// import '../services/audio_recorder_service.dart';
// import '../services/voice_recognition_service.dart';
import 'command_service.dart';
import 'package:fluttertoast/fluttertoast.dart';
class MessageService extends ChangeNotifier {
static const MethodChannel _channel = MethodChannel('com.example.ai_chat_assistant/asr');
static final MessageService _instance = MessageService._internal();
factory MessageService() => _instance;
MessageService._internal();
MessageService._internal() {
_channel.setMethodCallHandler((call) async {
switch (call.method) {
case "onAsrResult":
replaceMessage(id: _latestUserMessageId!, text: call.arguments);
break;
case "onAsrStop":
replaceMessage(
id: _latestUserMessageId!, status: MessageStatus.normal);
}
});
}
final ChatSseService _chatSseService = ChatSseService();
// final LocalTtsService _ttsService = LocalTtsService();
final AudioRecorderService _audioService = AudioRecorderService();
final VoiceRecognitionService _recognitionService = VoiceRecognitionService();
// final AudioRecorderService _audioService = AudioRecorderService();
// final VoiceRecognitionService _recognitionService = VoiceRecognitionService();
final TextClassificationService _classificationService =
TextClassificationService();
final VehicleCommandService _vehicleCommandService = VehicleCommandService();
@@ -78,9 +90,9 @@ class MessageService extends ChangeNotifier {
_latestAssistantMessageId = null;
_isReplyAborted = false;
changeState(MessageServiceState.recording);
await _audioService.startRecording();
addMessage("", true, MessageStatus.listening);
_latestUserMessageId = messages.last.id;
_channel.invokeMethod("start");
} catch (e) {
print('录音开始出错: $e');
}
@@ -108,25 +120,27 @@ class MessageService extends ChangeNotifier {
}
try {
changeState(MessageServiceState.recognizing);
final audioData = await _audioService.stopRecording();
replaceMessage(
id: _latestUserMessageId!,
text: "",
status: MessageStatus.recognizing);
if (audioData == null || audioData.isEmpty) {
removeMessageById(_latestUserMessageId!);
return;
}
final recognizedText =
await _recognitionService.recognizeSpeech(audioData);
if (recognizedText == null || recognizedText.isEmpty) {
removeMessageById(_latestUserMessageId!);
return;
}
replaceMessage(
id: _latestUserMessageId!,
text: recognizedText,
status: MessageStatus.normal);
_channel.invokeMethod("stop");
final recognizedText = messages.last.text;
// final audioData = await _audioService.stopRecording();
// replaceMessage(
// id: _latestUserMessageId!,
// text: "",
// status: MessageStatus.recognizing);
// if (audioData == null || audioData.isEmpty) {
// removeMessageById(_latestUserMessageId!);
// return;
// }
// final recognizedText =
// await _recognitionService.recognizeSpeech(audioData);
// if (recognizedText == null || recognizedText.isEmpty) {
// removeMessageById(_latestUserMessageId!);
// return;
// }
// replaceMessage(
// id: _latestUserMessageId!,
// text: recognizedText,
// status: MessageStatus.normal);
changeState(MessageServiceState.replying);
await reply(recognizedText);
} catch (e) {