Use soxr for high-quality audio resampling instead of numpy linear interpolation

This commit is contained in:
Rupesh
2026-02-27 11:46:39 -08:00
committed by Marcus
parent a7f6db8436
commit 5e8d722bf2

View File

@@ -14,6 +14,7 @@ from typing import Any, Dict, Optional
import numpy as np import numpy as np
import onnxruntime as ort import onnxruntime as ort
import soxr
from loguru import logger from loguru import logger
from transformers import WhisperFeatureExtractor from transformers import WhisperFeatureExtractor
@@ -143,12 +144,7 @@ class LocalSmartTurnAnalyzerV3(BaseSmartTurn):
) )
self._resample_warned = True self._resample_warned = True
num_output_samples = int(len(audio_array) * _MODEL_SAMPLE_RATE / actual_rate) return soxr.resample(audio_array, actual_rate, _MODEL_SAMPLE_RATE, quality="VHQ")
return np.interp(
np.linspace(0, len(audio_array), num_output_samples, endpoint=False),
np.arange(len(audio_array)),
audio_array,
)
def _predict_endpoint(self, audio_array: np.ndarray) -> Dict[str, Any]: def _predict_endpoint(self, audio_array: np.ndarray) -> Dict[str, Any]:
"""Predict end-of-turn using local ONNX model.""" """Predict end-of-turn using local ONNX model."""