ernestmindres commited on
Commit
7d1c198
·
verified ·
1 Parent(s): b9f3a40

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +24 -29
app.py CHANGED
@@ -1,11 +1,13 @@
1
  # app.py
2
- from flask import Flask, render_template, request, send_file, redirect, url_for
 
3
  from werkzeug.utils import secure_filename
4
- from tts_engine import get_available_languages, text_to_audio_file, get_tts_engine # Import du moteur
 
5
  import os
6
  import io
7
  import tempfile
8
- # Note: Nous allons ignorer les autres imports inutilisés (config, auth, etc.) du Dockerfile pour simplifier.
9
 
10
  app = Flask(__name__)
11
 
@@ -30,27 +32,24 @@ def index():
30
 
31
  @app.route('/read', methods=['POST'])
32
  def read_text():
33
- """Route de traitement: Reçoit le texte/fichier et la langue, génère l'audio."""
34
 
35
- # 1. Récupération des données
36
- text_input = request.form.get('text_input', '').strip()
37
- voice_id = request.form.get('language_select')
38
- uploaded_file = request.files.get('file_input')
39
 
 
40
  text_to_speak = ""
41
-
42
- # 2. Logique de lecture de fichier/texte
43
- if uploaded_file and uploaded_file.filename != '':
44
  filename = secure_filename(uploaded_file.filename)
45
- # Gestion simple pour les fichiers .txt uniquement pour l'instant
46
  if filename.endswith('.txt'):
47
  try:
48
- # Lecture du contenu du fichier
49
- text_to_speak = uploaded_file.read().decode('utf-8')
50
  except Exception as e:
51
  return f"Erreur de lecture du fichier: {e}", 400
52
  else:
53
- # Le PDF nécessiterait l'installation de PyPDF2 et un traitement plus complexe.
54
  return "Type de fichier non supporté. Veuillez utiliser un fichier .txt.", 400
55
 
56
  elif text_input:
@@ -60,23 +59,19 @@ def read_text():
60
  return "Veuillez entrer du texte ou télécharger un fichier.", 400
61
 
62
  if not voice_id:
63
- # Fallback au cas où aucune voix n'est sélectionnée (devrait être géré par l'interface)
64
  voices = get_available_languages()
65
- voice_id = next(iter(voices.values()), None)
 
66
 
67
- # 3. Génération du fichier audio
68
  try:
69
- # Utiliser un fichier temporaire unique dans le conteneur
70
- temp_dir = tempfile.gettempdir()
71
- audio_path = os.path.join(temp_dir, TEMP_AUDIO_FILE)
72
 
73
- text_to_audio_file(text_to_speak, voice_id, audio_path)
74
-
75
- # 4. Envoi du fichier audio au client
76
- # Flask envoie le fichier et le supprime après (mieux que de le garder sur le disque)
77
- return send_file(audio_path, mimetype="audio/wav", as_attachment=False)
78
 
79
  except Exception as e:
80
- print(f"Erreur lors de la synthèse vocale: {e}")
81
- return f"Erreur lors de la génération de l'audio: {e}", 500
82
-
 
1
  # app.py
2
+
3
+ from flask import Flask, render_template, request, send_file, redirect, url_for, Response # Import de Response
4
  from werkzeug.utils import secure_filename
5
+ # Changement: On importe la fonction de streaming
6
+ from tts_engine import get_available_languages, stream_text_to_audio
7
  import os
8
  import io
9
  import tempfile
10
+ import sys # Import pour les logs
11
 
12
  app = Flask(__name__)
13
 
 
32
 
33
  @app.route('/read', methods=['POST'])
34
  def read_text():
35
+ """Route de traitement: Reçoit le texte/fichier et la langue, génère l'audio en streaming."""
36
 
37
+ # 1. Collecte des données (inchangé)
38
+ text_input = request.form.get('text_input')
39
+ voice_id = request.form.get('voice_id')
 
40
 
41
+ # Gérer l'upload de fichier
42
  text_to_speak = ""
43
+ # ... (Logique de lecture de fichier/texte - inchangée)
44
+ if 'file_upload' in request.files and request.files['file_upload'].filename != '':
45
+ uploaded_file = request.files['file_upload']
46
  filename = secure_filename(uploaded_file.filename)
 
47
  if filename.endswith('.txt'):
48
  try:
49
+ text_to_speak = uploaded_file.read().decode('utf-8')
 
50
  except Exception as e:
51
  return f"Erreur de lecture du fichier: {e}", 400
52
  else:
 
53
  return "Type de fichier non supporté. Veuillez utiliser un fichier .txt.", 400
54
 
55
  elif text_input:
 
59
  return "Veuillez entrer du texte ou télécharger un fichier.", 400
60
 
61
  if not voice_id:
 
62
  voices = get_available_languages()
63
+ # Fallback à la première voix disponible
64
+ voice_id = next(iter(voices.values()), None)
65
 
66
+ # 2. Génération de l'audio en streaming
67
  try:
68
+ # La fonction retourne un générateur de morceaux audio (bytes, incluant l'en-tête WAV)
69
+ audio_stream_generator = stream_text_to_audio(text_to_speak, voice_id)
 
70
 
71
+ # 3. Renvoie la réponse en streaming au client
72
+ # Le mimetype doit être 'audio/wav' pour que le navigateur lise le flux
73
+ return Response(audio_stream_generator, mimetype='audio/wav')
 
 
74
 
75
  except Exception as e:
76
+ print(f"Erreur de génération audio (eSpeak-NG): {e}", file=sys.stderr)
77
+ return f"Erreur de génération audio: {e}", 500