From 4bbbac11a354cbf1f4f0690348255b59600bd886 Mon Sep 17 00:00:00 2001 From: liyi Date: Tue, 26 Aug 2025 11:14:19 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E8=B0=83=E6=95=B4=E9=9F=B3=E9=A2=91?= =?UTF-8?q?=E5=A2=9E=E7=9B=8A=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../native/talk_view_native_decode_logic.dart | 42 +++++++------------ 1 file changed, 14 insertions(+), 28 deletions(-) diff --git a/lib/talk/starChart/views/native/talk_view_native_decode_logic.dart b/lib/talk/starChart/views/native/talk_view_native_decode_logic.dart index 657ce2a6..931317ba 100644 --- a/lib/talk/starChart/views/native/talk_view_native_decode_logic.dart +++ b/lib/talk/starChart/views/native/talk_view_native_decode_logic.dart @@ -104,10 +104,10 @@ class TalkViewNativeDecodeLogic extends BaseGetXController { codecType: 'h264', ); // 初始化解码器并获取textureId - AppLog.log('StartChartManage().videoWidth:${StartChartManage() - .videoWidth}'); - AppLog.log('StartChartManage().videoHeight:${StartChartManage() - .videoHeight}'); + AppLog.log( + 'StartChartManage().videoWidth:${StartChartManage().videoWidth}'); + AppLog.log( + 'StartChartManage().videoHeight:${StartChartManage().videoHeight}'); final textureId = await VideoDecodePlugin.initDecoder(config); if (textureId != null) { Future.microtask(() => state.textureId.value = textureId); @@ -746,7 +746,6 @@ class TalkViewNativeDecodeLogic extends BaseGetXController { //开始录音 Future startProcessingAudio() async { - try { if (await state.voiceProcessor?.hasRecordAudioPermission() ?? false) { await state.voiceProcessor?.start(state.frameLength, state.sampleRate); @@ -793,27 +792,13 @@ class TalkViewNativeDecodeLogic extends BaseGetXController { // 添加音频增益处理方法 List _applyGain(List pcmData, double gainFactor) { - List result = List.filled(pcmData.length, 0); - - for (int i = 0; i < pcmData.length; i++) { - // PCM数据通常是有符号的16位整数 - int sample = pcmData[i]; - - // 应用增益 - double amplified = sample * gainFactor; - - // 限制在有效范围内,防止溢出 - if (amplified > 32767) { - amplified = 32767; - } else if (amplified < -32768) { - amplified = -32768; - } - - result[i] = amplified.toInt(); - } - - return result; + return pcmData.map((sample) { + // 增益并裁剪 + int amplified = (sample * gainFactor).round(); + return amplified.clamp(-32768, 32767); + }).toList(); } + static const int chunkSize = 320; // 每次发送320字节(10ms G.711) static const int intervalMs = 35; // 每40ms发送一次(4个chunk) void _sendAudioChunk(Timer timer) async { @@ -849,10 +834,11 @@ class TalkViewNativeDecodeLogic extends BaseGetXController { List encodedData = G711Tool.encode(applyGain, 0); // 0表示A-law _bufferedAudioFrames.addAll(encodedData); - // 启动定时发送器(仅启动一次) - if (_startProcessingAudioTimer == null && _bufferedAudioFrames.length > chunkSize) { - _startProcessingAudioTimer = Timer.periodic(Duration(milliseconds: intervalMs), _sendAudioChunk); + if (_startProcessingAudioTimer == null && + _bufferedAudioFrames.length > chunkSize) { + _startProcessingAudioTimer = + Timer.periodic(Duration(milliseconds: intervalMs), _sendAudioChunk); } }