Spaces:
Running
Running
import requests | |
import os | |
import ffmpeg | |
import numpy as np | |
import random | |
import shutil | |
import torchaudio | |
from pydub import AudioSegment | |
import tempfile | |
class Audio: | |
audio_path = "./audios" | |
def __init__(self, name, url): | |
self._name = name | |
self._url = url | |
if not os.path.exists(Audio.audio_path): | |
os.mkdir(Audio.audio_path) | |
def name(self): | |
return self._name | |
def name(self, name): | |
self._name = name | |
def url(self): | |
return self._url | |
def url(self, url): | |
self._url = url | |
def __str__(self): | |
return f'Audio: {self._name} {self._url}' | |
def load_audio(cls, file, sr): | |
try: | |
file = file.strip(' "\n') # Eliminar espacios y comillas del nombre del archivo | |
# Convertir a formato WAV si no lo está | |
if not file.endswith(".wav"): | |
file_formanted = f"{file}.wav" | |
if not os.path.isfile(file_formanted): | |
( | |
ffmpeg.input(file) | |
.output(file_formanted, format="wav") | |
.run(cmd=["ffmpeg", "-nostdin"], capture_stdout=True, capture_stderr=True) | |
) | |
else: | |
file_formanted = file | |
# Cargar el archivo formateado y devolverlo como NumPy array | |
out, _ = ( | |
ffmpeg.input(file_formanted) | |
.output("-", format="f32le", acodec="pcm_f32le", ac=1, ar=sr) | |
.run(cmd=["ffmpeg", "-nostdin"], capture_stdout=True, capture_stderr=True) | |
) | |
# Eliminar el archivo formateado | |
os.remove(file_formanted) | |
except Exception as e: | |
raise RuntimeError(f"Failed to load audio: {e}") | |
return np.frombuffer(out, np.float32).flatten() | |
def dowload_from_url(self, url = None, output = "./audios/file.wav"): | |
""" | |
Descarga un aduio desde una url | |
Args: | |
path: Folder where the audio will be downloaded | |
Returns: | |
return: the path of the downloaded audio | |
""" | |
request = requests.get(url, allow_redirects=True) | |
open(output, 'wb').write(request.content) | |
return output | |
def delete_files(paths): | |
for path in paths: | |
if os.path.exists(path): | |
if os.path.isdir(path): | |
shutil.rmtree(path, ignore_errors=True) | |
if os.path.isfile(path): | |
os.remove(path) |