1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- # -*- coding: utf-8 -*-
- from fastapi import FastAPI, Form, HTTPException, Request, status, APIRouter, Query, Path
- from fastapi.responses import StreamingResponse
- from tools.loglog import logger
- from tools.audio import GetAudio
- from core.respone_format import *
- import traceback
- router = APIRouter()
- get_audio = GetAudio()
- """
- 生成音频tts接口,传递两个参数,word和resp_type; word和resp_type回复设计:0返回oss路径,1 二进制文件,2 url三种;
- """
- @router.get("/tts")
- def get_tts(word: str = Query(None, max_length=300)):
- try:
- f = get_audio.submit_task(word_or_phrase=word, resp_type=0)
- r = f.result()
- if r:
- return resp_200(data=r)
- return resp_500(message="生成失败")
- except Exception as e:
- logger.error(f"{type(e).__name__},{e}")
- return resp_500(message=f"{type(e).__name__},{e}")
- @router.post("/tts")
- def get_tts(json_data: dict, request: Request):
- word_or_phrase = json_data["text"]
- resp_type = json_data.get("type")
- if len(word_or_phrase) >= 300:
- logger.error(f"单词或短语过长")
- return resp_400(message="单词或短语过长")
- if resp_type not in [0, 1, 2]:
- logger.error(f"type参数不是012")
- return resp_400(message="type参数不是012")
- try:
- f = get_audio.submit_task(word_or_phrase=word_or_phrase, resp_type=resp_type)
- r = f.result()
- if r and resp_type in [0, 2]:
- return resp_200(data=r)
- if r and resp_type == 1:
- return StreamingResponse(content=r, media_type='audio/mpeg')
- return resp_500(message="生成失败")
- except Exception as e:
- traceback_str = traceback.format_exc()
- logger.error(traceback_str)
- logger.error(f"{type(e).__name__},{e}")
- return resp_500(message=f"{type(e).__name__},{e}")
|