Andro0s commited on
Commit
83b64d5
·
verified ·
1 Parent(s): d289451

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +34 -66
app.py CHANGED
@@ -1,77 +1,45 @@
1
- import torch
2
  import gradio as gr
 
 
3
  import numpy as np
4
- import os
5
-
6
- # IMPORTANTE: Para Kokoro necesitas el archivo models.py del repo oficial en tu carpeta
7
- # Si no lo tienes, el import fallará.
8
- try:
9
- from models import build_model
10
- except ImportError:
11
- # Si estás en un Space, podrías necesitar instalarlo o tener el script local
12
- raise ImportError("No se encontró 'models.py'. Asegúrate de que los archivos de arquitectura de Kokoro estén en la raíz.")
13
-
14
- # ---- Configuración de Dispositivo ----
15
- device = "cuda" if torch.cuda.is_available() else "cpu"
16
-
17
- # ---- Cargar modelo correctamente (Aliah-Plus Analysis) ----
18
- def get_model():
19
- # 1. Construimos la estructura de la red
20
- model = build_model().to(device)
21
-
22
- # 2. Cargamos los pesos (el diccionario que te daba error)
23
- checkpoint = torch.load("kokoro-v1_0.pth", map_location=device)
24
-
25
- # 3. Inyectamos los pesos en la estructura
26
- # Usamos strict=False por si hay ligeras variaciones en las versiones
27
- model.load_state_dict(checkpoint, strict=False)
28
-
29
- # 4. Ahora sí, modo evaluación (esto ya no fallará)
30
- model.eval()
31
- return model
32
-
33
- # Inicializamos el modelo globalmente
34
- model = get_model()
35
-
36
- # ---- Cargar voces ----
37
- def load_voice(name):
38
- # Nota: Asegúrate de que la carpeta 'voices/' exista
39
- path = f"voices/{name}.pt"
40
- if os.path.exists(path):
41
- return torch.load(path, map_location=device)
42
- return None
43
 
44
- voices_names = ["af_bella", "af_alloy", "af_nova", "af_sarah"]
45
- voices = {n: load_voice(n) for n in voices_names}
 
46
 
47
- # ---- Inferencia (Simplificada para el arranque) ----
48
- def tts(text, voice_name):
49
- if not text.strip():
50
  return None
51
 
52
- voice = voices.get(voice_name)
53
- if voice is None:
54
- return None, None
55
-
56
- # Aquí iría el pipeline de Kokoro (phonemizer + model forward)
57
- # Por ahora, un placeholder para que la interfaz sea funcional:
58
- sr = 24000
59
- t = np.linspace(0, 1, sr)
60
- audio = (np.sin(2 * np.pi * 440 * t) * 0.1).astype(np.float32)
61
 
62
- return (sr, audio)
63
-
64
- # ---- Interfaz ----
65
- with gr.Blocks() as demo:
66
- gr.Markdown("# Kokoro TTS - Aliah Plus Optimized")
67
- with gr.Row():
68
- text_input = gr.Textbox(label="Texto a convertir", placeholder="Escribe algo aquí...")
69
- voice_opt = gr.Dropdown(choices=list(voices.keys()), label="Selecciona Voz", value="af_bella")
70
-
71
- btn = gr.Button("Generar Voz")
72
- audio_out = gr.Audio(label="Resultado")
73
 
74
- btn.click(fn=tts, inputs=[text_input, voice_opt], outputs=audio_out)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
75
 
76
  if __name__ == "__main__":
77
  demo.launch()
 
 
1
  import gradio as gr
2
+ from kokoro import KPipeline
3
+ import soundfile as sf
4
  import numpy as np
5
+ import torch
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6
 
7
+ # El Pipeline de Kokoro ya sabe leer el archivo .pth si tienes la librería instalada
8
+ # 'a' corresponde a voces en inglés (como las que tienes: af_bella, af_sarah)
9
+ pipeline = KPipeline(lang_code='a')
10
 
11
+ def tts_pro(text, voice_name):
12
+ if not text:
 
13
  return None
14
 
15
+ # Generamos el audio usando la estructura de Kokoro
16
+ generator = pipeline(text, voice=voice_name, speed=1)
 
 
 
 
 
 
 
17
 
18
+ # Recolectamos los fragmentos de audio
19
+ audio_segments = []
20
+ for gs, ps, audio in generator:
21
+ audio_segments.append(audio)
 
 
 
 
 
 
 
22
 
23
+ if not audio_segments:
24
+ return None
25
+
26
+ final_audio = np.concatenate(audio_segments)
27
+ return (24000, final_audio)
28
+
29
+ # --- Interfaz de Gradio ---
30
+ demo = gr.Interface(
31
+ fn=tts_pro,
32
+ inputs=[
33
+ gr.Textbox(label="Texto para Kokoro", placeholder="Escribe aquí..."),
34
+ gr.Dropdown(
35
+ ["af_bella", "af_alloy", "af_nova", "af_sarah", "af_sky"],
36
+ label="Voz",
37
+ value="af_bella"
38
+ )
39
+ ],
40
+ outputs=gr.Audio(label="Audio Generado"),
41
+ title="Kokoro TTS - Modo Directo"
42
+ )
43
 
44
  if __name__ == "__main__":
45
  demo.launch()