liumaolin commited on
Commit
15891ec
·
1 Parent(s): 5ecb408

Refactor SpeechMonitor to use active audio frame duration instead of count

Browse files

- Replace `active_audio_frame_count` with `active_audio_frame_duration` for more precise threshold control.
- Adjust `ACTIVE_FRAME_THRESHOLD` and associated calculations to use duration-based logic.

src/voice_dialogue/services/speech/monitor.py CHANGED
@@ -26,10 +26,10 @@ from voice_dialogue.utils.logger import logger
26
  class SpeechMonitorConfig:
27
  """语音监控配置类"""
28
  MIN_AUDIO_AMPLITUDE = 0.01 # 最小音频振幅阈值
29
- ACTIVE_FRAME_THRESHOLD = 10 # 连续活跃帧数阈值
30
  QUEUE_TIMEOUT = 0.1 # 队列获取超时时间(秒)
31
 
32
  # 时间阈值(毫秒)
 
33
  USER_SILENCE_THRESHOLD = 1 * 1000 # 用户静音阈值
34
  SILENCE_THRESHOLD = 0.3 * 1000 # 静音检测阈值
35
  AUDIO_FRAMES_THRESHOLD = 5 * 1000 # 音频帧时长阈值
@@ -80,7 +80,7 @@ class SpeechStateMonitor(BaseThread):
80
  def _reset_monitoring_state(self):
81
  """重置监控状态"""
82
  self.silence_audio_frame_count = 0
83
- self.active_audio_frame_count = 0
84
  self.user_silence_duration = 0
85
  self.task_id = None
86
 
@@ -148,10 +148,11 @@ class SpeechStateMonitor(BaseThread):
148
 
149
  # 重置静音计时
150
  self.user_silence_duration = 0
151
- self.active_audio_frame_count += 1
 
152
 
153
  # 检查是否需要中断当前任务
154
- if self.active_audio_frame_count > self.config.ACTIVE_FRAME_THRESHOLD:
155
  voice_state_manager.interrupt_task_id = self.task_id
156
 
157
  return True
@@ -169,7 +170,7 @@ class SpeechStateMonitor(BaseThread):
169
  Returns:
170
  tuple: (更新后的音频帧缓存, 是否需要继续处理)
171
  """
172
- self.active_audio_frame_count = 0
173
  duration = self._calculate_frame_duration_ms(audio_frame)
174
 
175
  if is_audio_frames_empty:
 
26
  class SpeechMonitorConfig:
27
  """语音监控配置类"""
28
  MIN_AUDIO_AMPLITUDE = 0.01 # 最小音频振幅阈值
 
29
  QUEUE_TIMEOUT = 0.1 # 队列获取超时时间(秒)
30
 
31
  # 时间阈值(毫秒)
32
+ ACTIVE_FRAME_THRESHOLD = 0.32 * 1000 # 连续活跃帧数阈值
33
  USER_SILENCE_THRESHOLD = 1 * 1000 # 用户静音阈值
34
  SILENCE_THRESHOLD = 0.3 * 1000 # 静音检测阈值
35
  AUDIO_FRAMES_THRESHOLD = 5 * 1000 # 音频帧时长阈值
 
80
  def _reset_monitoring_state(self):
81
  """重置监控状态"""
82
  self.silence_audio_frame_count = 0
83
+ self.active_audio_frame_duration = 0
84
  self.user_silence_duration = 0
85
  self.task_id = None
86
 
 
148
 
149
  # 重置静音计时
150
  self.user_silence_duration = 0
151
+ duration = self._calculate_frame_duration_ms(audio_frame)
152
+ self.active_audio_frame_duration += duration
153
 
154
  # 检查是否需要中断当前任务
155
+ if self.active_audio_frame_duration > self.config.ACTIVE_FRAME_THRESHOLD:
156
  voice_state_manager.interrupt_task_id = self.task_id
157
 
158
  return True
 
170
  Returns:
171
  tuple: (更新后的音频帧缓存, 是否需要继续处理)
172
  """
173
+ self.active_audio_frame_duration = 0
174
  duration = self._calculate_frame_duration_ms(audio_frame)
175
 
176
  if is_audio_frames_empty: