h-rand commited on
Commit
2522981
·
verified ·
1 Parent(s): f601e6c

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +45 -0
app.py ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from fastapi import FastAPI, Response
2
+ from fastapi.middleware.cors import CORSMiddleware
3
+ from pocket_tts import TTSModel
4
+ import scipy.io.wavfile
5
+ import io
6
+ import torch
7
+
8
+ app = FastAPI()
9
+
10
+ # IMPORTANT : Autoriser votre site web à accéder à ce serveur
11
+ app.add_middleware(
12
+ CORSMiddleware,
13
+ allow_origins=["*"],
14
+ allow_methods=["*"],
15
+ allow_headers=["*"],
16
+ )
17
+
18
+ # --- CHARGEMENT DU MODÈLE (Au démarrage) ---
19
+ print("⏳ Chargement de Kyutai Pocket TTS...")
20
+ try:
21
+ tts_model = TTSModel.load_model()
22
+ # On charge la voix "Alba" par défaut
23
+ voice_state = tts_model.get_state_for_audio_prompt("hf://kyutai/tts-voices/alba-mackenna/casual.wav")
24
+ print("✅ Modèle chargé !")
25
+ except Exception as e:
26
+ print(f"❌ Erreur au chargement du modèle: {e}")
27
+
28
+ @app.post("/tts")
29
+ async def generate_speech(data: dict):
30
+ text = data.get("text", "")
31
+
32
+ # Génération
33
+ audio_tensor = tts_model.generate_audio(voice_state, text)
34
+
35
+ # Conversion en fichier WAV en mémoire
36
+ buffer = io.BytesIO()
37
+ scipy.io.wavfile.write(buffer, tts_model.sample_rate, audio_tensor.numpy())
38
+ buffer.seek(0)
39
+
40
+ return Response(content=buffer.read(), media_type="audio/wav")
41
+
42
+ @app.get("/")
43
+ def home():
44
+ return {"status": "Pocket TTS is running"}
45
+