soiz1's picture
Upload 109 files
9aaf513 verified
from io import BytesIO
import numpy as np
import httpx
import faster_whisper
from pydantic import BaseModel
from fastapi import (
HTTPException,
UploadFile,
)
from typing import Annotated, Any, BinaryIO, Literal, Generator, Union, Optional, List, Tuple
class AudioInfo(BaseModel):
duration: float
async def read_audio(
file: Optional[UploadFile] = None,
file_url: Optional[str] = None
):
"""Read audio from "UploadFile". This resamples sampling rates to 16000."""
if (file and file_url) or (not file and not file_url):
raise HTTPException(status_code=400, detail="Provide only one of file or file_url")
if file:
file_content = await file.read()
elif file_url:
async with httpx.AsyncClient() as client:
file_response = await client.get(file_url)
if file_response.status_code != 200:
raise HTTPException(status_code=422, detail="Could not download the file")
file_content = file_response.content
file_bytes = BytesIO(file_content)
audio = faster_whisper.audio.decode_audio(file_bytes)
duration = len(audio) / 16000
return audio, AudioInfo(duration=duration)