API: add response with json
This commit is contained in:
@@ -1,10 +1,13 @@
|
||||
import json
|
||||
from io import BytesIO
|
||||
from pathlib import Path
|
||||
|
||||
from fastapi import APIRouter, Response, UploadFile, responses
|
||||
from fastapi import APIRouter, Response, UploadFile, Body, responses, Form, Query
|
||||
from fastapi.responses import JSONResponse
|
||||
|
||||
from pydantic import BaseModel
|
||||
from scipy.io import wavfile
|
||||
|
||||
from base64 import b64encode
|
||||
from rvc.modules.vc.modules import VC
|
||||
|
||||
router = APIRouter()
|
||||
@@ -12,11 +15,12 @@ router = APIRouter()
|
||||
|
||||
@router.post("/inference")
|
||||
def inference(
|
||||
modelpath: str | UploadFile,
|
||||
input: Path | UploadFile,
|
||||
modelpath: Path | UploadFile,
|
||||
input_audio: Path | UploadFile,
|
||||
res_type: str = Query("blob", enum=["blob", "json"]),
|
||||
sid: int = 0,
|
||||
f0_up_key: int = 0,
|
||||
f0_method: str = "rmvpe",
|
||||
f0_method: str = Query("rmvpe", enum=["pm", "harvest", "dio", "rmvpe", "rmvpe_gpu"]),
|
||||
f0_file: Path | None = None,
|
||||
index_file: Path | None = None,
|
||||
index_rate: float = 0.75,
|
||||
@@ -25,11 +29,12 @@ def inference(
|
||||
rms_mix_rate: float = 0.25,
|
||||
protect: float = 0.33,
|
||||
):
|
||||
print(res_type)
|
||||
vc = VC()
|
||||
vc.get_vc(modelpath)
|
||||
tgt_sr, audio_opt, times, _ = vc.vc_inference(
|
||||
sid,
|
||||
input,
|
||||
input_audio,
|
||||
f0_up_key,
|
||||
f0_method,
|
||||
f0_file,
|
||||
@@ -42,8 +47,12 @@ def inference(
|
||||
)
|
||||
wavfile.write(wv := BytesIO(), tgt_sr, audio_opt)
|
||||
print(times)
|
||||
return responses.StreamingResponse(
|
||||
wv,
|
||||
media_type="audio/wav",
|
||||
headers={"Content-Disposition": "attachment; filename=inference.wav"},
|
||||
)
|
||||
if res_type == "blob":
|
||||
return responses.StreamingResponse(
|
||||
wv,
|
||||
media_type="audio/wav",
|
||||
headers={"Content-Disposition": "attachment; filename=inference.wav"},
|
||||
)
|
||||
else:
|
||||
return JSONResponse({"time": json.loads(json.dumps(times)), "audio": b64encode(wv.read()).decode('utf-8')})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user