[update] support asr by aliyun android sdk
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user