|
|
@ -87,6 +87,7 @@ class TranslationController extends GetxController with WidgetsBindingObserver { |
|
|
RxInt activeSpeaker = 0.obs; // 0=无激活, 1=按钮1, 2=按钮2 |
|
|
RxInt activeSpeaker = 0.obs; // 0=无激活, 1=按钮1, 2=按钮2 |
|
|
RxInt lastActiveSpeaker = 0.obs; // 上一次状态 |
|
|
RxInt lastActiveSpeaker = 0.obs; // 上一次状态 |
|
|
final isRecognizing = false.obs; |
|
|
final isRecognizing = false.obs; |
|
|
|
|
|
final isPreparing = false.obs; |
|
|
final isTranslating = false.obs; |
|
|
final isTranslating = false.obs; |
|
|
final isTtsEnabled = true.obs; |
|
|
final isTtsEnabled = true.obs; |
|
|
final isRecording = false.obs; |
|
|
final isRecording = false.obs; |
|
|
@ -844,10 +845,16 @@ class TranslationController extends GetxController with WidgetsBindingObserver { |
|
|
await _initializeSession(); |
|
|
await _initializeSession(); |
|
|
await _configureAudioMode(); |
|
|
await _configureAudioMode(); |
|
|
if (currentMode.value != 'faceToFace') { |
|
|
if (currentMode.value != 'faceToFace') { |
|
|
|
|
|
if ((currentMode.value == 'audioVideo' || |
|
|
|
|
|
currentMode.value == 'call') && |
|
|
|
|
|
!bleManager.isCodecActive) { |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
await _startAsrService(); |
|
|
await _startAsrService(); |
|
|
await _finalizeRecognitionStart(); |
|
|
await _finalizeRecognitionStart(); |
|
|
} |
|
|
} |
|
|
} catch (e) { |
|
|
} catch (e) { |
|
|
|
|
|
isPreparing.value = false; |
|
|
isRecognizing.value = false; |
|
|
isRecognizing.value = false; |
|
|
Logger.error('启动语音识别失败: ${e.toString()}'); |
|
|
Logger.error('启动语音识别失败: ${e.toString()}'); |
|
|
} |
|
|
} |
|
|
@ -893,7 +900,18 @@ class TranslationController extends GetxController with WidgetsBindingObserver { |
|
|
|
|
|
|
|
|
/// 配置音视频模式 |
|
|
/// 配置音视频模式 |
|
|
Future<void> _configureAudioVideoMode() async { |
|
|
Future<void> _configureAudioVideoMode() async { |
|
|
bleManager.openDecoder(); |
|
|
isPreparing.value = true; |
|
|
|
|
|
await bleManager.openDecoder(); |
|
|
|
|
|
int attempts = 0; |
|
|
|
|
|
while (!bleManager.isCodecActive && attempts < 10) { |
|
|
|
|
|
await Future.delayed(const Duration(milliseconds: 150)); |
|
|
|
|
|
attempts++; |
|
|
|
|
|
} |
|
|
|
|
|
isPreparing.value = false; |
|
|
|
|
|
if (!bleManager.isCodecActive) { |
|
|
|
|
|
Get.snackbar('tip'.tr, 'operationFailedPleaseRetry'.tr); |
|
|
|
|
|
throw Exception('lxm--BLE编解码打开失败'); |
|
|
|
|
|
} |
|
|
_audioSourceType = true; |
|
|
_audioSourceType = true; |
|
|
isTtsEnabled.value = false; |
|
|
isTtsEnabled.value = false; |
|
|
Logger.info('发送ble音乐或者通话远端声音'); |
|
|
Logger.info('发送ble音乐或者通话远端声音'); |
|
|
@ -907,7 +925,18 @@ class TranslationController extends GetxController with WidgetsBindingObserver { |
|
|
]; |
|
|
]; |
|
|
Logger.info('1初始化AST服务,支持语言: $callModeLanguages'); //ast=asr+translate |
|
|
Logger.info('1初始化AST服务,支持语言: $callModeLanguages'); //ast=asr+translate |
|
|
await _astService.initialize(supportedLanguages: callModeLanguages); |
|
|
await _astService.initialize(supportedLanguages: callModeLanguages); |
|
|
bleManager.openA2DPDecoder(); |
|
|
isPreparing.value = true; |
|
|
|
|
|
await bleManager.openA2DPDecoder(); |
|
|
|
|
|
int attempts = 0; |
|
|
|
|
|
while (!bleManager.isCodecActive && attempts < 10) { |
|
|
|
|
|
await Future.delayed(const Duration(milliseconds: 150)); |
|
|
|
|
|
attempts++; |
|
|
|
|
|
} |
|
|
|
|
|
isPreparing.value = false; |
|
|
|
|
|
if (!bleManager.isCodecActive) { |
|
|
|
|
|
Get.snackbar('tip'.tr, 'operationFailedPleaseRetry'.tr); |
|
|
|
|
|
throw Exception('lxm--BLE编解码打开失败'); |
|
|
|
|
|
} |
|
|
_audioSourceType = true; |
|
|
_audioSourceType = true; |
|
|
isTtsEnabled.value = false; |
|
|
isTtsEnabled.value = false; |
|
|
Logger.info('发送ble系统mic和dac(音乐或者通话远端)声音'); |
|
|
Logger.info('发送ble系统mic和dac(音乐或者通话远端)声音'); |
|
|
@ -1379,6 +1408,7 @@ class TranslationController extends GetxController with WidgetsBindingObserver { |
|
|
/// 停止所有操作 |
|
|
/// 停止所有操作 |
|
|
Future<void> stopAll() async { |
|
|
Future<void> stopAll() async { |
|
|
try { |
|
|
try { |
|
|
|
|
|
isPreparing.value = false; |
|
|
if (currentMode.value == "audioVideo" || currentMode.value == "call") { |
|
|
if (currentMode.value == "audioVideo" || currentMode.value == "call") { |
|
|
bleManager.closeCodec(); |
|
|
bleManager.closeCodec(); |
|
|
Logger.info('关闭ble编解码器'); |
|
|
Logger.info('关闭ble编解码器'); |
|
|
|