From 08b3847e6061c1037b9b35ed99d8cb002100c250 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CDaisyWu=E2=80=9D?= <“18682150237@163.com”> Date: Thu, 20 Feb 2025 09:05:30 +0800 Subject: [PATCH] =?UTF-8?q?feat:=201=EF=BC=8C=E6=B3=A8=E9=87=8A=E5=AF=B9?= =?UTF-8?q?=E8=AE=B2=E8=B0=83=E8=AF=95=E4=BB=A3=E7=A0=812=EF=BC=8CiOS?= =?UTF-8?q?=E7=AB=AFAPP=E5=88=B0=E9=94=81=E7=9A=84=E5=A3=B0=E9=9F=B3?= =?UTF-8?q?=E8=B0=83=E4=BC=98(=E5=A4=B1=E7=9C=9F=E5=8F=98=E5=A5=BD)3?= =?UTF-8?q?=EF=BC=8C=E6=96=B0=E5=A2=9E=E9=99=8D=E5=99=AA=E7=AE=97=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/main.dart | 10 +-- lib/talk/starChart/star_chart_manage.dart | 44 ++++++------- .../views/talkView/talk_view_logic.dart | 65 ++++++++++++++----- 3 files changed, 77 insertions(+), 42 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index acdb013d..b1785d2e 100755 --- a/lib/main.dart +++ b/lib/main.dart @@ -55,11 +55,11 @@ FutureOr main() async { } }); - //ToDo: 增加对讲调试、正式可删除 - runApp(MultiProvider(providers: [ - ChangeNotifierProvider(create: (_) => DebugInfoModel()), - ], child: MyApp(isLogin: isLogin))); - // runApp(MyApp(isLogin: isLogin)); + // //ToDo: 增加对讲调试、正式可删除 + // runApp(MultiProvider(providers: [ + // ChangeNotifierProvider(create: (_) => DebugInfoModel()), + // ], child: MyApp(isLogin: isLogin))); + runApp(MyApp(isLogin: isLogin)); }, onException: (FlutterErrorDetails details) async { debugPrint("FlutterErrorDetails $details"); }); diff --git a/lib/talk/starChart/star_chart_manage.dart b/lib/talk/starChart/star_chart_manage.dart index a658cedd..1a3d2a85 100644 --- a/lib/talk/starChart/star_chart_manage.dart +++ b/lib/talk/starChart/star_chart_manage.dart @@ -225,19 +225,19 @@ class StartChartManage { /// 设置数据接收回调 _onReceiveData(_udpSocket!, Get.context!); - //ToDo: 增加对讲调试、正式可删除 - // 每秒重置数据速率 - Timer.periodic(Duration(seconds: 1), (Timer t) { - UdpTalkDataHandler().resetDataRates(); - // 更新调试信息 - Provider.of(Get.context!, listen: false) - .updateDebugInfo( - UdpTalkDataHandler().getLastRecvDataRate() ~/ 1024, // 转换为KB - UdpTalkDataHandler().getLastRecvPacketCount(), - UdpTalkDataHandler().getLastSendDataRate() ~/ 1024, // 转换为KB - UdpTalkDataHandler().getLastSendPacketCount(), - ); - }); + // //ToDo: 增加对讲调试、正式可删除 + // // 每秒重置数据速率 + // Timer.periodic(Duration(seconds: 1), (Timer t) { + // UdpTalkDataHandler().resetDataRates(); + // // 更新调试信息 + // Provider.of(Get.context!, listen: false) + // .updateDebugInfo( + // UdpTalkDataHandler().getLastRecvDataRate() ~/ 1024, // 转换为KB + // UdpTalkDataHandler().getLastRecvPacketCount(), + // UdpTalkDataHandler().getLastSendDataRate() ~/ 1024, // 转换为KB + // UdpTalkDataHandler().getLastSendPacketCount(), + // ); + // }); }).catchError((error) { _log(text: 'Failed to bind UDP socket: $error'); }); @@ -983,16 +983,16 @@ class StartChartManage { if (dg?.data != null) { final deserialize = ScpMessage.deserialize(dg!.data); - //ToDo: 增加对讲调试、正式可删除 - UdpTalkDataHandler().updateRecvDataRate(dg.data.length); + // //ToDo: 增加对讲调试、正式可删除 + // UdpTalkDataHandler().updateRecvDataRate(dg.data.length); - // 更新调试信息 - Provider.of(context, listen: false).updateDebugInfo( - UdpTalkDataHandler().getLastRecvDataRate() ~/ 1024, // 转换为KB - UdpTalkDataHandler().getLastRecvPacketCount(), - UdpTalkDataHandler().getLastSendDataRate() ~/ 1024, // 转换为KB - UdpTalkDataHandler().getLastSendPacketCount(), - ); + // // 更新调试信息 + // Provider.of(context, listen: false).updateDebugInfo( + // UdpTalkDataHandler().getLastRecvDataRate() ~/ 1024, // 转换为KB + // UdpTalkDataHandler().getLastRecvPacketCount(), + // UdpTalkDataHandler().getLastSendDataRate() ~/ 1024, // 转换为KB + // UdpTalkDataHandler().getLastSendPacketCount(), + // ); if (deserialize != null) { // 处理返回数据 diff --git a/lib/talk/starChart/views/talkView/talk_view_logic.dart b/lib/talk/starChart/views/talkView/talk_view_logic.dart index 1e64c803..46dd4e1a 100644 --- a/lib/talk/starChart/views/talkView/talk_view_logic.dart +++ b/lib/talk/starChart/views/talkView/talk_view_logic.dart @@ -1,46 +1,33 @@ import 'dart:async'; -import 'dart:ffi'; import 'dart:io'; -import 'dart:math'; -import 'dart:typed_data'; import 'dart:ui' as ui; +import 'dart:math'; // Import the math package to use sqrt import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart'; -import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_pcm_sound/flutter_pcm_sound.dart'; import 'package:flutter_screen_recording/flutter_screen_recording.dart'; import 'package:flutter_voice_processor/flutter_voice_processor.dart'; import 'package:gallery_saver/gallery_saver.dart'; import 'package:get/get.dart'; -import 'package:get_storage/get_storage.dart'; import 'package:image_gallery_saver/image_gallery_saver.dart'; import 'package:path_provider/path_provider.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:star_lock/app_settings/app_settings.dart'; -import 'package:star_lock/blue/blue_manage.dart'; -import 'package:star_lock/blue/io_protocol/io_openLock.dart'; -import 'package:star_lock/blue/io_tool/io_tool.dart'; import 'package:star_lock/login/login/entity/LoginEntity.dart'; import 'package:star_lock/main/lockDetail/lockDetail/lockDetail_logic.dart'; import 'package:star_lock/main/lockDetail/lockDetail/lockDetail_state.dart'; import 'package:star_lock/main/lockDetail/lockDetail/lockNetToken_entity.dart'; import 'package:star_lock/main/lockDetail/lockSet/lockSet/lockSetInfo_entity.dart'; -import 'package:star_lock/main/lockDetail/lockSet/lockSet/lockSet_logic.dart'; -import 'package:star_lock/main/lockDetail/lockSet/lockSet/lockSet_state.dart'; import 'package:star_lock/main/lockMian/entity/lockListInfo_entity.dart'; -import 'package:star_lock/main/lockMian/lockList/lockList_logic.dart'; import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/talk/call/g711.dart'; import 'package:star_lock/talk/starChart/constant/talk_status.dart'; import 'package:star_lock/talk/starChart/proto/talk_data.pb.dart'; -import 'package:star_lock/talk/starChart/proto/talk_data.pbenum.dart'; import 'package:star_lock/talk/starChart/proto/talk_expect.pb.dart'; import 'package:star_lock/talk/starChart/star_chart_manage.dart'; import 'package:star_lock/talk/starChart/views/talkView/talk_view_state.dart'; import 'package:star_lock/tools/bugly/bugly_tool.dart'; -import 'package:star_lock/tools/commonDataManage.dart'; -import 'package:star_lock/tools/storage.dart'; import '../../../../tools/baseGetXController.dart'; @@ -68,7 +55,7 @@ class TalkViewLogic extends BaseGetXController { if (Platform.isAndroid) { FlutterPcmSound.setFeedThreshold(1024); // Android 平台的特殊处理 } else { - FlutterPcmSound.setFeedThreshold(sampleRate ~/ 32); // 非 Android 平台的处理 + FlutterPcmSound.setFeedThreshold(2000); // 非 Android 平台的处理 } } @@ -622,6 +609,54 @@ class TalkViewLogic extends BaseGetXController { } return processedList; } + //test测试降噪算法 + // List preprocessAudio(List pcmList) { + // final List processedList = []; + // final int windowSize = 5; + // final int thresholdFactor = 2; // 动态阈值的倍数 + + // for (int i = 0; i < pcmList.length; i++) { + // int pcmVal = pcmList[i]; + + // // 计算当前窗口内的标准差 + // int sum = 0; + // int count = 0; + // for (int j = i; j < i + windowSize && j < pcmList.length; j++) { + // sum += pcmList[j]; + // count++; + // } + // int mean = sum ~/ count; + + // // 计算标准差 + // int varianceSum = 0; + // for (int j = i; j < i + windowSize && j < pcmList.length; j++) { + // varianceSum += (pcmList[j] - mean) * (pcmList[j] - mean); + // } + // double standardDeviation = + // sqrt(varianceSum / count); // Use sqrt from dart:math + + // // 动态阈值 + // int dynamicThreshold = (standardDeviation * thresholdFactor).toInt(); + + // // 动态降噪:如果信号小于动态阈值,则设为0 + // if (pcmVal.abs() < dynamicThreshold) { + // pcmVal = 0; + // } + + // // 移动平均滤波器 + // int sumFilter = 0; + // int countFilter = 0; + // for (int j = i; j < i + windowSize && j < pcmList.length; j++) { + // sumFilter += pcmList[j]; + // countFilter++; + // } + // int average = sumFilter ~/ countFilter; + + // processedList.add(average); + // } + + // return processedList; + // } List listLinearToALaw(List pcmList) { final List aLawList = [];