API: add response with json

This commit is contained in:
Ftps
2024-03-26 23:24:35 +09:00
parent bf8a669c79
commit efed797200
3 changed files with 23 additions and 14 deletions

View File

@@ -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')})