import 'dart:async'; import 'package:flutter/services.dart'; import 'package:get/get.dart'; import '../../core/utils/logger.dart'; /// 音频处理服务 /// /// 提供回音消除、降噪和语音活动检测等功能 class AudioProcessingService extends GetxService { static const MethodChannel _channel = MethodChannel('com.deep_voice.audio_processing'); // 状态变量 final _isEchoCancellationEnabled = false.obs; final _isNoiseSuppressionEnabled = false.obs; final _isVoiceActivityDetectionEnabled = false.obs; // 获取可观察状态 RxBool get isEchoCancellationEnabled => _isEchoCancellationEnabled; RxBool get isNoiseSuppressionEnabled => _isNoiseSuppressionEnabled; RxBool get isVoiceActivityDetectionEnabled => _isVoiceActivityDetectionEnabled; AudioProcessingService() { _initPlatformState(); } /// 初始化平台状态 Future _initPlatformState() async { try { final bool isEchoCancellationAvailable = await _channel.invokeMethod('isEchoCancellationAvailable') ?? false; final bool isNoiseSuppressionAvailable = await _channel.invokeMethod('isNoiseSuppressionAvailable') ?? false; Logger.info('回音消除可用: $isEchoCancellationAvailable'); Logger.info('噪声抑制可用: $isNoiseSuppressionAvailable'); } catch (e) { Logger.error('初始化音频处理服务失败: $e'); } } /// 为指定的音频会话ID启用回音消除 Future enableEchoCancellation(int audioSessionId) async { try { final bool result = await _channel.invokeMethod('enableEchoCancellation', { 'audioSessionId': audioSessionId, }) ?? false; _isEchoCancellationEnabled.value = result; Logger.info('启用回音消除${result ? "成功" : "失败"}'); return result; } catch (e) { Logger.error('启用回音消除失败: $e'); return false; } } /// 禁用回音消除 Future disableEchoCancellation() async { try { final bool result = await _channel.invokeMethod('disableEchoCancellation') ?? false; _isEchoCancellationEnabled.value = !result; Logger.info('禁用回音消除${result ? "成功" : "失败"}'); return result; } catch (e) { Logger.error('禁用回音消除失败: $e'); return false; } } /// 为指定的音频会话ID启用噪声抑制 Future enableNoiseSuppression(int audioSessionId) async { try { final bool result = await _channel.invokeMethod('enableNoiseSuppression', { 'audioSessionId': audioSessionId, }) ?? false; _isNoiseSuppressionEnabled.value = result; Logger.info('启用噪声抑制${result ? "成功" : "失败"}'); return result; } catch (e) { Logger.error('启用噪声抑制失败: $e'); return false; } } /// 禁用噪声抑制 Future disableNoiseSuppression() async { try { final bool result = await _channel.invokeMethod('disableNoiseSuppression') ?? false; _isNoiseSuppressionEnabled.value = !result; Logger.info('禁用噪声抑制${result ? "成功" : "失败"}'); return result; } catch (e) { Logger.error('禁用噪声抑制失败: $e'); return false; } } /// 获取当前录音的音频会话ID Future getAudioSessionId() async { try { final int? sessionId = await _channel.invokeMethod('getAudioSessionId'); Logger.info('获取音频会话ID: $sessionId'); return sessionId; } catch (e) { Logger.error('获取音频会话ID失败: $e'); return null; } } }