import 'package:get/get.dart'; import 'package:logger/logger.dart'; import '../data/services/azure_tts_service.dart'; class AzureTtsTestController extends GetxController { final AzureTtsService _ttsService = Get.find(); final Logger _logger = Logger(); // 状态变量 final RxBool isInitialized = false.obs; final RxBool isProcessing = false.obs; final RxString statusMessage = ''.obs; final RxString lastFilePath = ''.obs; @override void onInit() { super.onInit(); // 监听TTS状态 _ttsService.ttsStatus.listen((status) { final statusStr = status['status'] as String?; switch (statusStr) { case 'started': isProcessing.value = true; statusMessage.value = '正在合成语音...'; break; case 'completed': isProcessing.value = false; statusMessage.value = '语音合成完成'; if (status.containsKey('filePath')) { lastFilePath.value = status['filePath'] as String; } break; case 'error': isProcessing.value = false; statusMessage.value = '语音合成失败: ${status['message'] ?? '未知错误'}'; break; default: statusMessage.value = '未知状态: $statusStr'; break; } }); } /// 初始化Azure TTS服务 Future initialize({ required String subscriptionKey, required String region, }) async { try { isProcessing.value = true; statusMessage.value = '正在初始化Azure TTS...'; await _ttsService.initialize( subscriptionKey: subscriptionKey, region: region, ); isInitialized.value = _ttsService.isInitialized; if (isInitialized.value) { statusMessage.value = 'Azure TTS初始化成功'; } else { statusMessage.value = 'Azure TTS初始化失败'; } } catch (e) { isInitialized.value = false; statusMessage.value = '初始化异常: $e'; _logger.e('初始化异常: $e'); } finally { isProcessing.value = false; } } /// 设置语音 Future setVoice(String voiceName) async { if (!isInitialized.value) { statusMessage.value = 'Azure TTS未初始化,请先初始化'; return; } try { isProcessing.value = true; statusMessage.value = '正在设置语音...'; final success = await _ttsService.setVoice(voiceName); if (success) { statusMessage.value = '语音设置成功: $voiceName'; } else { statusMessage.value = '语音设置失败'; } } catch (e) { statusMessage.value = '设置语音异常: $e'; _logger.e('设置语音异常: $e'); } finally { isProcessing.value = false; } } /// 合成语音到扬声器 Future speakText(String text) async { if (!isInitialized.value) { statusMessage.value = 'Azure TTS未初始化,请先初始化'; return; } if (text.isEmpty) { statusMessage.value = '文本不能为空'; return; } try { isProcessing.value = true; statusMessage.value = '正在合成语音...'; final success = await _ttsService.synthesizeToSpeaker(text); if (!success) { statusMessage.value = '语音合成失败'; } } catch (e) { statusMessage.value = '语音合成异常: $e'; _logger.e('语音合成异常: $e'); isProcessing.value = false; } } /// 合成语音到文件 Future synthesizeToFile(String text, {String? fileName}) async { if (!isInitialized.value) { statusMessage.value = 'Azure TTS未初始化,请先初始化'; return; } if (text.isEmpty) { statusMessage.value = '文本不能为空'; return; } try { isProcessing.value = true; statusMessage.value = '正在合成语音到文件...'; final filePath = await _ttsService.synthesizeToFile(text, fileName: fileName); if (filePath != null) { lastFilePath.value = filePath; } else { statusMessage.value = '语音合成到文件失败'; isProcessing.value = false; } } catch (e) { statusMessage.value = '语音合成到文件异常: $e'; _logger.e('语音合成到文件异常: $e'); isProcessing.value = false; } } }