From 659c470eba542383987aad227b7f918100f131fa Mon Sep 17 00:00:00 2001
From: wangzhibo <wangzhibo@shsening.com>
Date: 星期五, 11 九月 2026 15:09:05 +0800
Subject: [PATCH] 小智终端 5种 场景模式 OK
---
xiaozhi-esp32-server/main/xiaozhi-server/core/utils/audioRateController.py | 24 ++++++++++++++++++++++++
1 files changed, 24 insertions(+), 0 deletions(-)
diff --git a/xiaozhi-esp32-server/main/xiaozhi-server/core/utils/audioRateController.py b/xiaozhi-esp32-server/main/xiaozhi-server/core/utils/audioRateController.py
index ef59870..769f983 100644
--- a/xiaozhi-esp32-server/main/xiaozhi-server/core/utils/audioRateController.py
+++ b/xiaozhi-esp32-server/main/xiaozhi-server/core/utils/audioRateController.py
@@ -6,6 +6,30 @@
TAG = __name__
logger = setup_logging()
+AUDIO_FRAME_DURATION = 60
+AUDIO_COMPLETION_TIMEOUT_MIN = 8.0
+AUDIO_COMPLETION_TIMEOUT_MAX = 180.0
+
+
+def audio_completion_timeout_sec(queue_len: int, frame_ms: int = AUDIO_FRAME_DURATION) -> float:
+ """Wait long enough for remaining opus frames, plus a small drain margin."""
+ try:
+ remaining = int(queue_len or 0)
+ except (TypeError, ValueError):
+ remaining = 0
+ if remaining < 0:
+ remaining = 0
+ try:
+ frame = int(frame_ms or AUDIO_FRAME_DURATION)
+ except (TypeError, ValueError):
+ frame = AUDIO_FRAME_DURATION
+ if frame <= 0:
+ frame = AUDIO_FRAME_DURATION
+ return min(
+ AUDIO_COMPLETION_TIMEOUT_MAX,
+ max(AUDIO_COMPLETION_TIMEOUT_MIN, remaining * frame / 1000.0 + AUDIO_COMPLETION_TIMEOUT_MIN),
+ )
+
class AudioRateController:
"""
--
Gitblit v1.9.1