Spaces:
				
			
			
	
			
			
		Running
		
			on 
			
			T4
	
	
	
			
			
	
	
	
	
		
		
		Running
		
			on 
			
			T4
	| from fastapi import APIRouter, UploadFile, File, Body, HTTPException, status | |
| from fastapi.responses import JSONResponse | |
| from typing import Annotated | |
| import time | |
| import os | |
| from app.transcriber import get_transcription | |
| from app.matcher import match | |
| from app.mfcc import mfcc_similarty_check | |
| from app.string_processor import clean_transcription | |
| from app.passing import calculate_passing | |
| import requests | |
| """ initialize the router """ | |
| router = APIRouter(prefix="/voice", tags=["Voice"]) | |
| async def transcribe_audio( | |
| original_url: Annotated[str, Body()], | |
| recorded: Annotated[UploadFile, File()], | |
| matcher_text: Annotated[str, Body()], | |
| ): | |
| try: | |
| # # Validate URL | |
| # if not original_url.endswith(".wav"): | |
| # raise HTTPException( | |
| # status_code=status.HTTP_400_BAD_REQUEST, | |
| # detail="Invalid URL. Please provide a URL pointing to a wav file.", | |
| # ) | |
| # # Download the audio file from the URL | |
| # response = requests.get(original_url) | |
| # if response.status_code != 200: | |
| # raise HTTPException( | |
| # status_code=status.HTTP_400_BAD_REQUEST, | |
| # detail="Unable to download the audio file from the URL.", | |
| # ) | |
| # filename_original = f"audio_{int(time.time())}_original.wav" | |
| # # Save the downloaded file temporarily | |
| # with open(filename_original, "wb") as buffer: | |
| # buffer.write(response.content) | |
| # Read file bytes | |
| recorded_bytes = await recorded.read() | |
| filename_recorded = f"audio_{int(time.time())}_recorded.wav" | |
| # Save the file temporarily | |
| with open(filename_recorded, "wb") as buffer: | |
| buffer.write(recorded_bytes) | |
| try: | |
| text = get_transcription(filename_recorded) | |
| text = clean_transcription(text) | |
| sequence, phonetic = match(matcher_text, text) | |
| weighted_score, is_passing = calculate_passing(sequence, phonetic) | |
| return JSONResponse( | |
| { | |
| "transcription": text, | |
| "score": round(weighted_score), | |
| "passing": str(is_passing) | |
| } | |
| ) | |
| finally: | |
| # Clean up the temporary file | |
| # os.remove(filename_original) | |
| os.remove(filename_recorded) | |
| except Exception as e: | |
| print(e) | |
| raise HTTPException( | |
| status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, | |
| detail="Unable to process the audio. Please try again later.", | |
| ) | |