auralis-api / audio /validators.py
Khubaib01's picture
auralis model & files
36e0dea verified
import soundfile as sf
from core.config import MAX_DURATION_SEC, MIN_DURATION_SEC, ALLOWED_EXTENSIONS
from utils.logger import logger
class AudioValidationError(ValueError):
pass
def validate_audio_duration(filepath: str, max_duration: float = MAX_DURATION_SEC):
try:
info = sf.info(filepath)
except RuntimeError:
raise AudioValidationError("Invalid or corrupted audio file.")
duration = info.frames / float(info.samplerate)
if duration > max_duration or duration < MIN_DURATION_SEC:
logger.warning(f"Unsupported file length received: {original_filename}")
raise AudioValidationError(
f"Audio duration {duration:.2f}s invalid. "
f"Allowed range: {MIN_DURATION_SEC:.2f}s – {max_duration:.2f}s."
)
return duration
def validate_audio_file(file_path: str, original_filename: str):
ext = original_filename.lower().rsplit(".", 1)[-1]
ext = "." + ext
if ext not in ALLOWED_EXTENSIONS:
logger.warning(f"Unsupported file format received: {original_filename}")
raise AudioValidationError(
f"Unsupported file type {ext}. Allowed formats are: " + ", ".join(ALLOWED_EXTENSIONS)
)
validate_audio_duration(file_path)