|
|
|
@ -153,46 +153,7 @@ class AgentController extends GetxController { |
|
|
|
_setupMediaSessionCallbacks(); //设置媒体会话回调 |
|
|
|
_setupTextInputListener(); //设置文本输入监听器 |
|
|
|
|
|
|
|
try { |
|
|
|
// 1. 使用 GetX 获取 APP 当前语言环境 (Locale),而不是设备语言 |
|
|
|
final appLocale = Get.locale; |
|
|
|
List<String> languagesToSupport = []; |
|
|
|
|
|
|
|
if (appLocale != null) { |
|
|
|
final lang = appLocale.languageCode; // e.g., 'en' |
|
|
|
final country = appLocale.countryCode; // e.g., 'US' |
|
|
|
|
|
|
|
// 2. 构造 Azure SDK 需要的格式 (e.g., 'en-US') |
|
|
|
if (country != null && country.isNotEmpty) { |
|
|
|
languagesToSupport.add('$lang-$country'); |
|
|
|
} else { |
|
|
|
languagesToSupport.add(lang); // fallback only language code |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 3. 添加 en-US 作为备选 |
|
|
|
if (!languagesToSupport.contains('en-US')) { |
|
|
|
languagesToSupport.add('en-US'); |
|
|
|
} |
|
|
|
|
|
|
|
// 4. 最终兜底 |
|
|
|
if (languagesToSupport.isEmpty) { |
|
|
|
languagesToSupport.add('en-US'); |
|
|
|
} |
|
|
|
|
|
|
|
// 5. 调用原生设置 |
|
|
|
Logger.i(TAG, '支持的语言: ${languagesToSupport.join(', ')}'); |
|
|
|
AgentService.setSupportedLanguages(languagesToSupport).then((success) { |
|
|
|
if (success) { |
|
|
|
Logger.i(TAG, '支持的语言已根据 APP 设置语言: ${languagesToSupport.join(', ')}'); |
|
|
|
} else { |
|
|
|
Logger.w(TAG, '根据 APP 设置语言失败'); |
|
|
|
} |
|
|
|
}); |
|
|
|
} catch (e) { |
|
|
|
Logger.e(TAG, "获取 APP 语言并设置失败: $e"); |
|
|
|
AgentService.setSupportedLanguages(['zh-CN', 'en-US']); |
|
|
|
} |
|
|
|
_configureSpeechRecognitionLanguages(); //配置语音识别语言 |
|
|
|
|
|
|
|
startVoiceInput(); //开启语音输入 |
|
|
|
} |
|
|
|
@ -507,7 +468,7 @@ class AgentController extends GetxController { |
|
|
|
case AgentServiceEventType.recognitionStarted: |
|
|
|
isListening.value = true; |
|
|
|
isTextInputMode.value = false; |
|
|
|
print("订阅代理服务事件识别开始"); |
|
|
|
Logger.i(TAG, '订阅代理服务事件识别开始'); |
|
|
|
// isTextInputMode.refresh(); |
|
|
|
// 只标记识别开始,不添加消息 |
|
|
|
Logger.i(TAG, '识别开始'); |
|
|
|
@ -1052,10 +1013,54 @@ class AgentController extends GetxController { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//根据APP语言配置语音识别语言 |
|
|
|
Future<void> _configureSpeechRecognitionLanguages() async { |
|
|
|
try { |
|
|
|
// 1. 使用 GetX 获取 APP 当前语言环境 (Locale) |
|
|
|
final appLocale = Get.locale; |
|
|
|
List<String> languagesToSupport = []; |
|
|
|
|
|
|
|
if (appLocale != null) { |
|
|
|
final lang = appLocale.languageCode; // e.g., 'en' |
|
|
|
final country = appLocale.countryCode; // e.g., 'US' |
|
|
|
|
|
|
|
// 2. 构造 Azure SDK 需要的格式 (e.g., 'en-US') |
|
|
|
if (country != null && country.isNotEmpty) { |
|
|
|
languagesToSupport.add('$lang-$country'); |
|
|
|
} else { |
|
|
|
languagesToSupport.add(lang); // fallback only language code |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 3. 添加 en-US 作为备选 |
|
|
|
if (!languagesToSupport.contains('en-US')) { |
|
|
|
languagesToSupport.add('en-US'); |
|
|
|
} |
|
|
|
|
|
|
|
// 4. 最终兜底 |
|
|
|
if (languagesToSupport.isEmpty) { |
|
|
|
languagesToSupport.add('en-US'); |
|
|
|
} |
|
|
|
|
|
|
|
// 5. 调用原生设置 |
|
|
|
Logger.i(TAG, '支持的语言: ${languagesToSupport.join(', ')}'); |
|
|
|
AgentService.setSupportedLanguages(languagesToSupport).then((success) { |
|
|
|
if (success) { |
|
|
|
Logger.i(TAG, 'asr的语言已根据 APP 设置语言: ${languagesToSupport.join(', ')}'); |
|
|
|
} else { |
|
|
|
Logger.w(TAG, '根据 APP 设置asr语言失败'); |
|
|
|
} |
|
|
|
}); |
|
|
|
} catch (e) { |
|
|
|
Logger.e(TAG, "获取 APP 语言并设置失败: $e"); |
|
|
|
AgentService.setSupportedLanguages(['zh-CN', 'en-US']); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 开始语音输入 |
|
|
|
Future<void> startVoiceInput() async { |
|
|
|
if (isListening.value) return; |
|
|
|
print('开始语音输入'); // 开始语音输入 |
|
|
|
Logger.i(TAG, '开始语音输入'); // 开始语音输入 |
|
|
|
final hasPermission = await PermissionUtil.instance.requestPermission( |
|
|
|
// context: Get.context!, |
|
|
|
permissionType: Permission.microphone, |
|
|
|
@ -1351,7 +1356,7 @@ class AgentController extends GetxController { |
|
|
|
// 打电话模式不使用按住说话模式,而是持续语音输入 |
|
|
|
//isPushToTalkMode.value = false; |
|
|
|
// 开始语音识别 |
|
|
|
print("开始打电话模式,开始语音输入"); |
|
|
|
Logger.i(TAG, '开始打电话模式,开始语音输入'); |
|
|
|
await AgentService.startConversation(); |
|
|
|
//} |
|
|
|
} |
|
|
|
@ -1488,11 +1493,12 @@ class AgentController extends GetxController { |
|
|
|
var status = await _musiceManager.getStatus(); |
|
|
|
isPlaying.value = status['isPlaying'] ?? false; |
|
|
|
currentId.value = status['id'] as int; |
|
|
|
Logger.d('AgentController', |
|
|
|
'音乐状态更新: playing=${isPlaying.value}, url=${currentId.value}'); |
|
|
|
print("音乐状态更新: playing=${isPlaying.value}, url=${currentId.value}"); |
|
|
|
Logger.d( |
|
|
|
TAG, '音乐状态更新: playing=${isPlaying.value}, url=${currentId.value}'); |
|
|
|
Logger.d( |
|
|
|
TAG, '音乐状态更新: playing=${isPlaying.value}, url=${currentId.value}'); |
|
|
|
} catch (e) { |
|
|
|
Logger.e('AgentController', '获取音乐状态失败: $e'); |
|
|
|
Logger.e(TAG, '获取音乐状态失败: $e'); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -1529,7 +1535,8 @@ class AgentController extends GetxController { |
|
|
|
var response = await Api.getMusicUrl({ |
|
|
|
"ids": [id] |
|
|
|
}); |
|
|
|
print('getMusicUrl 响应数据: ${response.toString()}'); // 调试输出原始数据 |
|
|
|
Logger.d( |
|
|
|
TAG, 'getMusicUrl 响应数据: ${response.toString()}'); // 调试输出原始数据 |
|
|
|
final urldata = response['urls'][0] as Map<String, dynamic>; |
|
|
|
song["url"] = urldata['url'] ?? ''; |
|
|
|
// 修复:确保currentId接收int类型 |
|
|
|
|