Files
ai_chat_assistant/lib/services/voice_recognition_service.dart

64 lines
2.0 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'package:ai_chat_core/ai_chat_core.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
import 'package:http_parser/http_parser.dart';
@Deprecated('VoiceRecognitionService is deprecated, please use the new implementation if available.')
class VoiceRecognitionService {
Future<String?> recognizeSpeech(List<int> audioBytes,
{String lang = 'cn'}) async {
try {
Logger.i('准备发送OPUS音频数据大小: ${audioBytes.length} 字节');
final uri = Uri.parse('http://143.64.185.20:18606/voice');
Logger.i('发送到: $uri');
final request = http.MultipartRequest('POST', uri);
request.files.add(
http.MultipartFile.fromBytes(
'audio',
audioBytes,
filename: 'record.wav',
contentType: MediaType('audio', 'wav'),
),
);
request.fields['lang'] = lang; // 根据参数设置语言
Logger.i('发送请求...');
final streamResponse = await request.send();
Logger.i('收到响应,状态码: ${streamResponse.statusCode}');
final response = await http.Response.fromStream(streamResponse);
if (response.statusCode == 200) {
Logger.i('响应内容: ${response.body}');
final text = _parseTextFromJson(response.body);
if (text != null) {
Logger.i('解析出文本: $text');
return text; // 返回识别的文本
} else {
Logger.i('解析文本失败');
}
} else {
Logger.i('请求失败,状态码: ${response.statusCode},响应: ${response.body}');
}
} catch (e) {
Logger.i('发送录音到服务器时出错: $e');
}
return null;
}
// 移到类内部作为私有方法
String? _parseTextFromJson(String body) {
try {
final decoded = jsonDecode(body);
if (decoded.containsKey('text')) {
return decoded['text'] as String?;
}
return null;
} catch (e) {
Logger.i('JSON解析错误: $e, 原始数据: $body');
return null;
}
}
}