From 5e8d722bf25ed82560ccb26f5018598313da3100 Mon Sep 17 00:00:00 2001 From: Rupesh Date: Fri, 27 Feb 2026 11:46:39 -0800 Subject: [PATCH] Use soxr for high-quality audio resampling instead of numpy linear interpolation --- src/pipecat/audio/turn/smart_turn/local_smart_turn_v3.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/pipecat/audio/turn/smart_turn/local_smart_turn_v3.py b/src/pipecat/audio/turn/smart_turn/local_smart_turn_v3.py index 01c3746c8..ffe714641 100644 --- a/src/pipecat/audio/turn/smart_turn/local_smart_turn_v3.py +++ b/src/pipecat/audio/turn/smart_turn/local_smart_turn_v3.py @@ -14,6 +14,7 @@ from typing import Any, Dict, Optional import numpy as np import onnxruntime as ort +import soxr from loguru import logger from transformers import WhisperFeatureExtractor @@ -143,12 +144,7 @@ class LocalSmartTurnAnalyzerV3(BaseSmartTurn): ) self._resample_warned = True - num_output_samples = int(len(audio_array) * _MODEL_SAMPLE_RATE / actual_rate) - return np.interp( - np.linspace(0, len(audio_array), num_output_samples, endpoint=False), - np.arange(len(audio_array)), - audio_array, - ) + return soxr.resample(audio_array, actual_rate, _MODEL_SAMPLE_RATE, quality="VHQ") def _predict_endpoint(self, audio_array: np.ndarray) -> Dict[str, Any]: """Predict end-of-turn using local ONNX model."""