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