File size: 3,233 Bytes
70e5c60
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
# πŸ“ Estructura del proyecto generado para 'voice'

# πŸ“¦ voice/
# β”œβ”€β”€ README.md
# β”œβ”€β”€ requirements.txt
# β”œβ”€β”€ src/
# β”‚   β”œβ”€β”€ model.py
# β”‚   β”œβ”€β”€ train.py
# β”‚   └── inference.py
# β”œβ”€β”€ data/
# β”‚   └── samples/
# └── app_gradio.py

# ========================================
# βœ… README.md (inicial)

readme = '''
# 🐽 Kuchiuya Voice Synthesizer

Este proyecto permite entrenar e inferir voces sintΓ©ticas al estilo Kuchiuya.

## Requisitos
```bash
pip install -r requirements.txt
```

## Entrenamiento
```bash
python src/train.py
```

## Inferencia
```bash
python src/inference.py --text "El barro no miente."
```

## Demo Web
```bash
python app_gradio.py
```
'''

# ========================================
# βœ… requirements.txt

requirements = '''
torch
torchaudio
numpy
scipy
librosa
soundfile
gradio
pyttsx3
'''

# ========================================
# βœ… model.py

model_py = '''
import torch.nn as nn

class SimpleTTSModel(nn.Module):
    def __init__(self, input_dim=256, hidden_dim=512, output_dim=80):
        super(SimpleTTSModel, self).__init__()
        self.model = nn.Sequential(
            nn.Linear(input_dim, hidden_dim),
            nn.ReLU(),
            nn.Linear(hidden_dim, output_dim)
        )

    def forward(self, x):
        return self.model(x)
'''

# ========================================
# βœ… train.py

train_py = '''
import torch
import torch.nn as nn
import torch.optim as optim
from src.model import SimpleTTSModel
import numpy as np

print("🐷 Entrenando modelo Kuchiuya...")

# Datos simulados (para demostrar el flujo)
x = torch.randn((100, 256))
y = torch.randn((100, 80))

model = SimpleTTSModel()
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

for epoch in range(10):
    optimizer.zero_grad()
    outputs = model(x)
    loss = criterion(outputs, y)
    loss.backward()
    optimizer.step()
    print(f"Epoch {epoch+1}/10, PΓ©rdida: {loss.item():.4f}")

# Guardar modelo
torch.save(model.state_dict(), "tts_model.pth")
print("βœ… Modelo guardado como 'tts_model.pth'")
'''

# ========================================
# βœ… inference.py

inference_py = '''
import argparse
import pyttsx3

parser = argparse.ArgumentParser()
parser.add_argument('--text', type=str, required=True, help='Texto a sintetizar')
args = parser.parse_args()

engine = pyttsx3.init()
engine.setProperty('rate', 150)
engine.save_to_file(args.text, 'output.wav')
engine.runAndWait()

print(f"πŸ”Š Texto sintetizado: '{args.text}' β†’ guardado como 'output.wav'")
'''

# ========================================
# βœ… app_gradio.py

app_gradio_py = '''
import gradio as gr
import pyttsx3
import os

def sintetizar(texto):
    engine = pyttsx3.init()
    engine.setProperty('rate', 150)
    output_path = "voz_kuchiuya.wav"
    engine.save_to_file(texto, output_path)
    engine.runAndWait()
    return output_path

demo = gr.Interface(
    fn=sintetizar,
    inputs=gr.Textbox(lines=2, placeholder="Escribe tu frase Kuchiuya aquΓ­..."),
    outputs=gr.Audio(type="filepath"),
    title="Voz Kuchiuya",
    description="Convierte texto en una voz ritual cyberpunk del universo Ariplanteater."
)
demo.launch()
'''