# cloud_server_audio_loader.py import io import requests import numpy as np from pydub import AudioSegment class CloudServerAudioLoader: def __init__(self, base_url: str) -> None: if not base_url.endswith("/"): base_url += "/" self.base_url = base_url def _download_to_buf(self, filename: str) -> io.BytesIO: url = self.base_url + filename print("url:", url) # Debugging line to check the URL resp = requests.get(url, stream=True) if resp.status_code != 200: raise FileNotFoundError(f"'{filename}' not found. HTTP {resp.status_code}") buf = io.BytesIO(resp.content) buf.seek(0) return buf def load_audio(self, filename: str) -> tuple[int, np.ndarray]: buf = self._download_to_buf(filename) seg = AudioSegment.from_file(buf) samples = np.array(seg.get_array_of_samples()) if seg.channels > 1: samples = samples.reshape(-1, seg.channels) if np.issubdtype(samples.dtype, np.integer): max_int = np.iinfo(samples.dtype).max samples = samples.astype(np.float32) samples /= max_int else: max_val = np.abs(samples).max() if max_val > 1: samples = samples / max_val samples = samples.astype(np.float32) # -------------------------------------------------------- return seg.frame_rate, samples