XSify commited on
Commit
97a0e01
·
verified ·
1 Parent(s): 2c22f19

Upload 2 files

Browse files
Files changed (2) hide show
  1. app.py +52 -0
  2. requirements.txt +6 -0
app.py ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import torch
3
+ import numpy as np
4
+ from fastapi import FastAPI, UploadFile, Form
5
+ from fastapi.responses import FileResponse
6
+ from TTS.api import TTS
7
+ import tempfile
8
+ import soundfile as sf
9
+
10
+ # Forzar consentimiento de licencia
11
+ os.environ["COQUI_TOS_AGREED"] = "1"
12
+
13
+ # Monkey patch temporal de torch.load
14
+ original_torch_load = torch.load
15
+
16
+ def patched_torch_load(f, *args, **kwargs):
17
+ kwargs["weights_only"] = False
18
+ return original_torch_load(f, *args, **kwargs)
19
+
20
+ torch.load = patched_torch_load
21
+
22
+ # Cargar modelo XTTS
23
+ tts = TTS(model_name="tts_models/multilingual/multi-dataset/xtts_v2")
24
+
25
+ app = FastAPI()
26
+
27
+ @app.post("/generate-audio/")
28
+ async def generate_audio(
29
+ text: str = Form(...),
30
+ language: str = Form(...),
31
+ speaker_wav: UploadFile = Form(...)
32
+ ):
33
+ # Guardar archivo temporalmente
34
+ with tempfile.NamedTemporaryFile(delete=False, suffix=".wav") as tmp:
35
+ contents = await speaker_wav.read()
36
+ tmp.write(contents)
37
+ tmp_path = tmp.name
38
+
39
+ # Generar audio
40
+ audio = tts.tts(
41
+ text=text,
42
+ speaker_wav=tmp_path,
43
+ language=language,
44
+ split_sentences=True,
45
+ emotion="Angry"
46
+ )
47
+
48
+ # Guardar output
49
+ out_path = tempfile.mktemp(suffix=".wav")
50
+ sf.write(out_path, audio, 24000)
51
+
52
+ return FileResponse(out_path, media_type="audio/wav", filename="output.wav")
requirements.txt ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ fastapi
2
+ uvicorn
3
+ torch
4
+ numpy
5
+ soundfile
6
+ TTS