import numpy as np import librosa from config import SAMPLE_RATE, CHUNK_SIZE def load_audio_as_int16(audio_path: str) -> np.ndarray: """Load file âm thanh, resample về 16kHz, trả về int16.""" y, _ = librosa.load(audio_path, sr=SAMPLE_RATE) return (y * 32767).astype(np.int16) def iter_chunks(audio_int16: np.ndarray, chunk_size: int = CHUNK_SIZE): """Yield từng chunk, tự pad chunk cuối nếu thiếu.""" for i in range(0, len(audio_int16), chunk_size): chunk = audio_int16[i : i + chunk_size] if len(chunk) < chunk_size: chunk = np.pad(chunk, (0, chunk_size - len(chunk))) yield chunk def make_silence(chunk_size: int = CHUNK_SIZE) -> np.ndarray: """Trả về 1 chunk toàn silence (dùng để flush model).""" return np.zeros(chunk_size, dtype=np.int16)