From 2723c0b058a03479efd958fb4a4b2e93cda6af15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AD=8F=E5=B0=91=E9=98=B3?= <786612630@qq.com> Date: Fri, 29 Dec 2023 18:40:02 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=AF=B9=E8=AE=B2=E6=8E=A5?= =?UTF-8?q?=E6=94=B6=E9=9F=B3=E9=A2=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../monitoring/lockMonitoring_logic.dart | 2 +- star_lock/lib/talk/call/callTalk.dart | 35 +++++++++++++++++-- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_logic.dart b/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_logic.dart index dcbe7fbe..09c52a9f 100644 --- a/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_logic.dart +++ b/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_logic.dart @@ -47,7 +47,7 @@ class LockMonitoringLogic extends BaseGetXController { // 接听成功了,然后刷新界面的时间 60秒以后自动挂断 state.oneMinuteTimeTimer = Timer.periodic(const Duration(seconds:1), (Timer t) async { state.oneMinuteTime.value++; - Get.log('state.oneMinuteTime.value:${state.oneMinuteTime.value}'); + // Get.log('state.oneMinuteTime.value:${state.oneMinuteTime.value}'); if(state.oneMinuteTime.value >= 60){ // 超过60秒了 state.oneMinuteTimeTimer.cancel(); diff --git a/star_lock/lib/talk/call/callTalk.dart b/star_lock/lib/talk/call/callTalk.dart index cd6ae460..33b12d26 100644 --- a/star_lock/lib/talk/call/callTalk.dart +++ b/star_lock/lib/talk/call/callTalk.dart @@ -1,6 +1,7 @@ import 'dart:convert'; import 'dart:typed_data'; import 'package:flutter/foundation.dart'; +import 'package:get/get.dart'; import 'package:star_lock/talk/call/g711.dart'; import 'package:star_lock/talk/call/iFrameInfo.dart'; import '../../tools/eventBusEventManage.dart'; @@ -22,6 +23,7 @@ class CallTalk { IframeInfo? iframe; // 假设有这个成员变量 var growableList; bool getFirstFrame = false; //是否得到了第一帧 + List allDataBytes = []; //音频数据 CallTalk._init() { iframe = IframeInfo(); @@ -47,6 +49,14 @@ class CallTalk { try { // 将 ALaw 转为 Linear pcmBytes = G711().convertList(g711Data); + allDataBytes.addAll(pcmBytes); + + // String filePath = 'assets/s10-g711.bin'; + // + // List audioData = await G711().readAssetFile(filePath); + // pcmBytes = G711().convertList(audioData); + // allDataBytes = pcmBytes.sublist(0, 640); + _initializeAudioPlayer(pcmBytes); } catch (e) { print('Error decoding G.711 to PCM: $e'); @@ -118,9 +128,28 @@ class CallTalk { //音频相关处理 Future _initializeAudioPlayer(List audioData) async { - PcmArrayInt16 fromList = PcmArrayInt16.fromList(audioData); - await FlutterPcmSound.feed(fromList); + Get.log('_initializeAudioPlayer audioData:$audioData'); + PcmArrayInt16 fromList = PcmArrayInt16.fromList(audioData); + // FlutterPcmSound.setFeedCallback(onFeed); + await FlutterPcmSound.feed(fromList); FlutterPcmSound.play(); } -} + + void onFeed(int remainingFrames) async { + int framesToFeed = 320; + + if (allDataBytes.length >= framesToFeed) { + List frames = allDataBytes.sublist(0, framesToFeed); + allDataBytes.removeRange(0, framesToFeed); + + // 将数据传递给 FlutterPcmSound + PcmArrayInt16 fromList = PcmArrayInt16.fromList(frames); + await FlutterPcmSound.feed(fromList); + FlutterPcmSound.play(); + } else { + // 处理长度不足的情况,可以等待更多数据或者采取其他措施 + print("Not enough data in allPcmData."); + } + } + }