Spaces:
Running
Running
File size: 1,466 Bytes
edb5886 eb6fb40 edb5886 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# 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 |