Spaces:
Runtime error
Runtime error
"""This module contains utility functions for the Chattr app.""" | |
from logging import getLogger | |
from pathlib import Path | |
from typing import Optional | |
from m3u8 import M3U8, load | |
from pydantic import HttpUrl, ValidationError | |
from pydub import AudioSegment | |
from requests import Session | |
logger = getLogger(__name__) | |
def is_url(value: Optional[str]) -> bool: | |
""" | |
Check if a string is a valid URL. | |
Args: | |
value: The string to check. Can be None. | |
Returns: | |
bool: True if the string is a valid URL, False otherwise. | |
""" | |
if value is None: | |
return False | |
try: | |
HttpUrl(value) | |
return True | |
except ValidationError: | |
return False | |
def download_file(url: HttpUrl, path: Path) -> None: | |
""" | |
Download a file from a URL and save it to a local path. | |
Args: | |
url: The URL to download the file from. | |
path: The local file path where the downloaded file will be saved. | |
Returns: | |
None | |
Raises: | |
requests.RequestException: If the HTTP request fails. | |
IOError: If file writing fails. | |
""" | |
if str(url).endswith(".m3u8"): | |
_playlist: M3U8 = load(url) | |
url: str = str(url).replace("playlist.m3u8", _playlist.segments[0].uri) | |
print(url) | |
session = Session() | |
response = session.get(url, stream=True, timeout=30) | |
response.raise_for_status() | |
with open(path, "wb") as f: | |
for chunk in response.iter_content(chunk_size=8192): | |
if chunk: | |
f.write(chunk) | |
def convert_audio_to_wav(input_path: Path, output_path: Path) -> None: | |
""" | |
Convert an audio file from aac to WAV format. | |
Args: | |
input_path: The path to the input aac file. | |
output_path: The path to the output WAV file. | |
Returns: | |
None | |
""" | |
logger.info(f"Converting {input_path} to WAV format") | |
audio = AudioSegment.from_file(input_path, "aac") | |
audio.export(output_path, "wav") | |
logger.info(f"Converted {input_path} to {output_path}") | |