This commit is contained in:
2025-09-05 22:27:58 +08:00
parent 65652639ca
commit 9bf1128f4a
3 changed files with 41 additions and 14 deletions

View File

@@ -1,11 +1,10 @@
import logging import logging
import os import os
import uuid import uuid
import time import tempfile
import asyncio import shutil
from fastapi import APIRouter, HTTPException, UploadFile, File import sys
from pydantic import BaseModel from fastapi import APIRouter, UploadFile, File
from typing import Optional
# 配置日志 # 配置日志
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -15,24 +14,52 @@ router = APIRouter(prefix="/api/xunFei", tags=["讯飞"])
UPLOAD_DIR = os.path.join(os.path.dirname(__file__), "..", "static", "audio") UPLOAD_DIR = os.path.join(os.path.dirname(__file__), "..", "static", "audio")
os.makedirs(UPLOAD_DIR, exist_ok=True) os.makedirs(UPLOAD_DIR, exist_ok=True)
# 讯飞配置
sys.path.append(os.path.join(os.path.dirname(__file__), ".."))
from Config.Config import XF_APPID, XF_APIKEY, XF_APISECRET
@router.post("/save-audio") @router.post("/save-audio")
async def save_audio(audio: UploadFile = File(...)): async def save_audio(audio: UploadFile = File(...)):
"""保存音频文件""" """保存音频文件并评分"""
temp_file = None
try: try:
# 生成文件 # 1. 保存音频到临时文件
temp_dir = tempfile.mkdtemp()
temp_file = os.path.join(temp_dir, f"temp_{uuid.uuid4().hex}.wav")
content = await audio.read()
with open(temp_file, "wb") as f:
f.write(content)
# 2. 讯飞评分
from KeDaXunFei.XunFeiAudioEvaluator import XunFeiAudioEvaluator
evaluator = XunFeiAudioEvaluator(
appid=XF_APPID,
api_key=XF_APIKEY,
api_secret=XF_APISECRET,
audio_file=temp_file,
language="english"
)
results, eval_time = evaluator.run_evaluation()
# 3. 保存到正式目录
file_name = f"audio_{uuid.uuid4().hex}.wav" file_name = f"audio_{uuid.uuid4().hex}.wav"
file_path = os.path.join(UPLOAD_DIR, file_name) file_path = os.path.join(UPLOAD_DIR, file_name)
shutil.copy2(temp_file, file_path)
# 保存文件
content = await audio.read()
with open(file_path, "wb") as f:
f.write(content)
print(file_path)
return { return {
"success": True, "success": True,
"file_name": file_name, "file_name": file_name,
"file_path": f"/static/audio/{file_name}" "file_path": f"/static/audio/{file_name}",
"evaluation": results,
"evaluation_time": str(eval_time)
} }
except Exception as e: except Exception as e:
logger.error(f"处理失败: {str(e)}")
return {"success": False, "error": str(e)} return {"success": False, "error": str(e)}
finally:
# 4. 清理临时文件
if temp_file and os.path.exists(temp_file):
shutil.rmtree(os.path.dirname(temp_file), ignore_errors=True)