Fixing to respect the stop_secs.

This commit is contained in:
Filipi Fuchter
2025-04-17 10:07:08 -03:00
parent 230d2f80fa
commit 266537c3f4
2 changed files with 7 additions and 17 deletions

View File

@@ -40,12 +40,11 @@ class BaseSmartTurn(ABC):
self._params = params
# Configuration
self._sample_rate = 0
self._chunk_size_ms = 0
self._stop_ms = self._params.stop_secs * 1000 # silence threshold in ms
# Inference state
self._audio_buffer = []
self._speech_triggered = False
self._silence_frames = 0
self._silence_ms = 0
self._speech_start_time = None
@property
@@ -55,13 +54,6 @@ class BaseSmartTurn(ABC):
def set_sample_rate(self, sample_rate: int):
self._sample_rate = sample_rate
@property
def chunk_size_ms(self) -> int:
return self._chunk_size_ms
def set_chunk_size_ms(self, chunk_size_ms: int):
self._chunk_size_ms = chunk_size_ms
def append_audio(self, buffer: bytes, is_speech: bool) -> EndOfTurnState:
# Convert raw audio to float32 format and append to the buffer
audio_int16 = np.frombuffer(buffer, dtype=np.int16)
@@ -72,18 +64,19 @@ class BaseSmartTurn(ABC):
if is_speech:
# Reset silence tracking on speech
self._silence_frames = 0
self._silence_ms = 0
self._speech_triggered = True
if self._speech_start_time is None:
self._speech_start_time = time.time()
logger.debug(f"Speech started at {self._speech_start_time}")
else:
if self._speech_triggered:
self._silence_frames += 1
chunk_duration_ms = len(audio_int16) / (self._sample_rate / 1000)
self._silence_ms += chunk_duration_ms
# If silence exceeds threshold, mark end of turn
if self._silence_frames * self._chunk_size_ms >= self._stop_ms:
if self._silence_ms >= self._stop_ms:
logger.debug(
f"End of Turn complete due to stop_secs. Silence: {self._silence_frames}, chunk_size_ms: {self._chunk_size_ms}"
f"End of Turn complete due to stop_secs. Silence in ms: {self._silence_ms}"
)
state = EndOfTurnState.COMPLETE
self._clear()
@@ -115,7 +108,7 @@ class BaseSmartTurn(ABC):
self._speech_triggered = False
self._audio_buffer = []
self._speech_start_time = None
self._silence_frames = 0
self._silence_ms = 0
def _process_speech_segment(self, audio_buffer) -> EndOfTurnState:
state = EndOfTurnState.INCOMPLETE

View File

@@ -79,9 +79,6 @@ class BaseInputTransport(FrameProcessor):
# Configure End of turn analyzer.
if self._params.end_of_turn_analyzer:
self._params.end_of_turn_analyzer.set_sample_rate(self._sample_rate)
self._params.end_of_turn_analyzer.set_chunk_size_ms(
self._params.audio_out_10ms_chunks * 10
)
# Start audio filter.
if self._params.audio_in_filter:
await self._params.audio_in_filter.start(self._sample_rate)