2
2
from fastapi import FastAPI , HTTPException
3
3
from fastapi .middleware .cors import CORSMiddleware
4
4
from fastapi .responses import FileResponse
5
- from fastapi .responses import StreamingResponse
6
5
7
6
from pydantic import BaseModel
8
7
import uvicorn
24
23
XTTS = TTSWrapper (OUTPUT_FOLDER ,SPEAKER_FOLDER )
25
24
26
25
# Load model
27
- logger .info ("The model starts to load, wait about a minute " )
26
+ logger .info ("The model starts to load,wait until it loads " )
28
27
XTTS .load_model ()
29
28
30
29
# Add CORS middleware
@@ -81,6 +80,7 @@ def get_sample(file_name: str):
81
80
if os .path .isfile (file_path ):
82
81
return FileResponse (file_path , media_type = "audio/wav" )
83
82
else :
83
+ logger .error ("File not found" )
84
84
raise HTTPException (status_code = 404 , detail = "File not found" )
85
85
86
86
@app .post ("/set_output/" )
@@ -89,6 +89,7 @@ def set_output(output_req: OutputFolderRequest):
89
89
XTTS .set_out_folder (output_req .output_folder )
90
90
return {"message" : f"Output folder set to { output_req .output_folder } " }
91
91
except ValueError as e :
92
+ logger .error (e )
92
93
raise HTTPException (status_code = 400 , detail = str (e ))
93
94
94
95
@app .post ("/set_speaker_folder/" )
@@ -97,6 +98,7 @@ def set_speaker_folder(speaker_req: SpeakerFolderRequest):
97
98
XTTS .set_speaker_folder (speaker_req .speaker_folder )
98
99
return {"message" : f"Speaker folder set to { speaker_req .speaker_folder } " }
99
100
except ValueError as e :
101
+ logger .error (e )
100
102
raise HTTPException (status_code = 400 , detail = str (e ))
101
103
102
104
@app .post ("/tts_to_audio/" )
@@ -114,19 +116,16 @@ async def tts_to_audio(request: SynthesisRequest):
114
116
language = request .language .lower ()
115
117
)
116
118
117
- def iterfile ():
118
- with open (output_file_path , mode = "rb" ) as file_like : # read the file as stream
119
- yield from file_like
120
-
121
- response = StreamingResponse (iterfile (), media_type = 'audio/wav' )
122
-
123
- # Set content disposition header to prompt download with proper filename
124
- response .headers ["Content-Disposition" ] = "attachment; filename=output.wav"
125
-
126
- return response
119
+ # Return the file in the response
120
+ return FileResponse (
121
+ path = output_file_path ,
122
+ media_type = 'audio/wav' ,
123
+ filename = "output.wav" ,
124
+ )
127
125
128
126
except Exception as e :
129
- raise HTTPException (status_code = 500 , detail = f"An eldritch error has occurred: { str (e )} " )
127
+ logger .error (e )
128
+ raise HTTPException (status_code = 500 , detail = f"Error: { str (e )} " )
130
129
131
130
132
131
@app .post ("/tts_to_file/" )
@@ -146,10 +145,11 @@ async def tts_to_file(request: SynthesisFileRequest):
146
145
language = request .language .lower (),
147
146
file_name_or_path = request .file_name_or_path # The user-provided path to save the file is used here.
148
147
)
149
- return {"message" : "The scroll of sound has been sealed and saved ." , "output_path" : output_file }
148
+ return {"message" : "The audio was successfully made and stored ." , "output_path" : output_file }
150
149
151
150
except Exception as e :
152
- raise HTTPException (status_code = 500 , detail = f"A sinister fault has slipped through: { str (e )} " )
151
+ logger .error (e )
152
+ raise HTTPException (status_code = 500 , detail = f"An error occurred: { str (e )} " )
153
153
154
154
if __name__ == "__main__" :
155
- uvicorn .run (app ,host = "0.0.0.0" ,port = 8001 )
155
+ uvicorn .run (app ,host = "0.0.0.0" ,port = 8002 )
0 commit comments