api_get_audio.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. # -*- coding: utf-8 -*-
  2. from fastapi import FastAPI, Form, HTTPException, Request,status,APIRouter,Query,Path
  3. from fastapi.responses import StreamingResponse
  4. from tools.loglog import logger
  5. from tools.audio import GetAudio
  6. from core.respone_format import *
  7. import traceback
  8. router = APIRouter()
  9. get_audio = GetAudio()
  10. """
  11. 生成音频tts接口,传递两个参数,word和resp_type; word和resp_type回复设计:0返回oss路径,1 二进制文件,2 url三种;
  12. """
  13. @router.get("/tts")
  14. def get_tts(word:str=Query(None, max_length=300)):
  15. try:
  16. f = get_audio.submit_task(word_or_phrase=word,resp_type=0)
  17. r = f.result()
  18. if r:
  19. return resp_200(data=r)
  20. return resp_500(message="生成失败")
  21. except Exception as e:
  22. logger.error(f"{type(e).__name__},{e}")
  23. return resp_500(message=f"{type(e).__name__},{e}")
  24. @router.post("/tts")
  25. def get_tts(json_data:dict,request:Request):
  26. word_or_phrase = json_data["text"]
  27. resp_type = json_data.get("type")
  28. if len(word_or_phrase) >= 300:
  29. logger.error(f"单词或短语过长")
  30. return resp_400(message="单词或短语过长")
  31. if resp_type not in [0,1,2]:
  32. logger.error(f"type参数不是012")
  33. return resp_400(message="type参数不是012")
  34. try:
  35. f = get_audio.submit_task(word_or_phrase=word_or_phrase,resp_type=resp_type)
  36. r = f.result()
  37. if r and resp_type in [0,2]:
  38. return resp_200(data=r)
  39. if r and resp_type == 1:
  40. return StreamingResponse(content=r, media_type='audio/mpeg')
  41. return resp_500(message="生成失败")
  42. except Exception as e:
  43. traceback_str = traceback.format_exc()
  44. logger.error(traceback_str)
  45. logger.error(f"{type(e).__name__},{e}")
  46. return resp_500(message=f"{type(e).__name__},{e}")