Woziii commited on
Commit
729b788
·
verified ·
1 Parent(s): 11501d1

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +28 -62
app.py CHANGED
@@ -5,7 +5,6 @@ import os
5
  import time
6
  import torch
7
 
8
-
9
  # Initialisation du modèle TTS avec GPU désactivé
10
  tts = TTS("tts_models/multilingual/multi-dataset/xtts_v2", gpu=False)
11
 
@@ -41,89 +40,51 @@ def generate_section_audio(project_name, section_name, text, speaker):
41
  except Exception as e:
42
  return str(e) # Retourne l'erreur pour gestion dans l'interface
43
 
44
- # Fonction pour traiter un projet complet
45
- def process_project(project_name, sections, speaker):
46
- results = []
47
- for section in sections:
48
- section_name, text = section["name"], section["text"]
49
- result = generate_section_audio(project_name, section_name, text, speaker)
50
- results.append({"section": section_name, "result": result})
51
- return results
52
-
53
- # Fonction de validation des conditions d'utilisation
54
- def validate_conditions(agree):
55
- if not agree:
56
- raise gr.Error("❗ Veuillez accepter les conditions d'utilisation pour continuer.")
57
 
58
  # Interface Gradio
59
  with gr.Blocks() as demo:
60
- # Titre principal
61
- gr.Markdown("# 🎙️ Synthèse Vocale Margaux")
62
-
63
- # Introduction et explication globale
64
- gr.Markdown("""
65
- ## 👋 Bienvenue sur Margaux - Votre outil de synthèse vocale avancée
66
- Margaux vous permet de générer des voix off naturelles à partir de textes, structurées par sections pour une meilleure qualité audio.
67
- **Étapes principales :**
68
- 1. 🛠️ **Créer un projet** : Définissez le nom du projet et choisissez la voix.
69
- 2. ✍️ **Ajouter des sections** : Divisez votre texte en parties claires, chacune avec un nom unique.
70
- 3. 🎧 **Générer les audios** : Chaque section est transformée en fichier audio individuel.
71
- 4. 🔄 **Écoutez et ajustez** : Régénérez les audios si nécessaire, indépendamment des autres.
72
- 5. 📁 **Sauvegardez le projet** : Finalisez et récupérez les fichiers validés.
73
- """)
74
 
75
  # Étape 1 : Création du Projet
76
- with gr.Box():
77
  gr.Markdown("### 🛠️ Étape 1 : Création du Projet")
78
- gr.Markdown("**📂 Définissez les informations générales pour votre projet.**")
79
- gr.Markdown("Le nom du projet servira à organiser vos fichiers dans un dossier dédié.")
80
  project_name = gr.Textbox(label="Nom du Projet", placeholder="Exemple : Capsule_Video_PLU")
81
  speaker = gr.Dropdown(label="Voix 🎙️", choices=["Margaux"], value="Margaux") # Liste de voix
82
  agree = gr.Checkbox(label="✅ J'accepte les conditions d'utilisation")
83
- create_project_btn = gr.Button("Créer le Projet 🚀")
84
 
85
  # Étape 2 : Gestion des Sections
86
- with gr.Box():
87
  gr.Markdown("### ✍️ Étape 2 : Ajoutez vos Sections")
88
- gr.Markdown("""
89
- **📝 Divisez votre script en plusieurs sections pour une meilleure qualité.**
90
- Chaque section doit avoir :
91
- - Un **nom unique** 🏷️ qui servira à nommer le fichier audio.
92
- - Un **texte clair et concis** ✏️.
93
- """)
94
- sections = gr.State([]) # Liste des sections dynamiques
95
- sections_list = gr.Column() # Conteneur pour les sections ajoutées dynamiquement
96
  add_section_btn = gr.Button("+ Ajouter une Section ➕")
97
  remove_section_btn = gr.Button("- Supprimer la dernière Section ➖")
98
-
99
- # Étape 3 : Validation des Sections et Génération des Audios
100
- with gr.Box():
101
- gr.Markdown("### 🎧 Étape 3 : Génération des Audios")
102
- gr.Markdown("""
103
- **🎶 Générez un fichier audio pour chaque section.**
104
- - 🔄 Régénérez l’audio d’une section indépendamment si nécessaire.
105
- - ⚠️ En cas d’erreur, seuls les audios de sections valides seront disponibles.
106
- """)
107
  generate_btn = gr.Button("Générer les Audios ▶️")
108
  results_output = gr.Column() # Conteneur pour les audios générés
109
-
110
- # Étape 4 : Sauvegarde Finale
111
- with gr.Box():
112
- gr.Markdown("### 📁 Étape 4 : Sauvegarde Finale")
113
- gr.Markdown("""
114
- **💾 Une fois satisfait des résultats :**
115
- - Cliquez sur **Sauvegarder** pour conserver uniquement les fichiers validés.
116
- - Les fichiers seront organisés dans un dossier au nom de votre projet.
117
- """)
118
  save_project_btn = gr.Button("Sauvegarder le Projet ✅")
119
 
120
  # Actions des Boutons
121
  def create_project(project_name, speaker, agree):
122
- validate_conditions(agree)
 
 
 
123
  os.makedirs(os.path.join(output_folder, project_name), exist_ok=True)
124
- return f"✅ Projet '{project_name}' créé avec succès !"
125
 
126
- create_project_btn.click(create_project, inputs=[project_name, speaker, agree], outputs=[])
 
127
 
128
  def add_section(sections):
129
  section = {"name": f"Section_{len(sections) + 1}", "text": ""}
@@ -143,6 +104,11 @@ with gr.Blocks() as demo:
143
  results = process_project(project_name, sections, speaker)
144
  return results
145
 
 
 
 
 
 
146
  generate_btn.click(generate_audios, inputs=[project_name, sections, speaker], outputs=[results_output])
147
 
148
  # Lancement de l'interface
 
5
  import time
6
  import torch
7
 
 
8
  # Initialisation du modèle TTS avec GPU désactivé
9
  tts = TTS("tts_models/multilingual/multi-dataset/xtts_v2", gpu=False)
10
 
 
40
  except Exception as e:
41
  return str(e) # Retourne l'erreur pour gestion dans l'interface
42
 
43
+ # Fonction pour gérer l'état d'avancement de l'interface
44
+ def update_step(step):
45
+ return {"visible": step == 1}, {"visible": step == 2}, {"visible": step == 3}
 
 
 
 
 
 
 
 
 
 
46
 
47
  # Interface Gradio
48
  with gr.Blocks() as demo:
49
+ step = gr.State(value=1) # État pour suivre l'étape active
50
+ sections = gr.State(value=[]) # Liste dynamique des sections
 
 
 
 
 
 
 
 
 
 
 
 
51
 
52
  # Étape 1 : Création du Projet
53
+ with gr.Row(visible=True) as step1:
54
  gr.Markdown("### 🛠️ Étape 1 : Création du Projet")
 
 
55
  project_name = gr.Textbox(label="Nom du Projet", placeholder="Exemple : Capsule_Video_PLU")
56
  speaker = gr.Dropdown(label="Voix 🎙️", choices=["Margaux"], value="Margaux") # Liste de voix
57
  agree = gr.Checkbox(label="✅ J'accepte les conditions d'utilisation")
58
+ next_btn_1 = gr.Button("Suivant ➡️")
59
 
60
  # Étape 2 : Gestion des Sections
61
+ with gr.Row(visible=False) as step2:
62
  gr.Markdown("### ✍️ Étape 2 : Ajoutez vos Sections")
63
+ sections_list = gr.Column() # Conteneur pour les sections
 
 
 
 
 
 
 
64
  add_section_btn = gr.Button("+ Ajouter une Section ➕")
65
  remove_section_btn = gr.Button("- Supprimer la dernière Section ➖")
66
+ prev_btn_2 = gr.Button("⬅️ Précédent")
67
+ next_btn_2 = gr.Button("Suivant ➡️")
68
+
69
+ # Étape 3 : Génération des Audios et Sauvegarde
70
+ with gr.Row(visible=False) as step3:
71
+ gr.Markdown("### 🎧 Étape 3 : Génération et Sauvegarde")
 
 
 
72
  generate_btn = gr.Button("Générer les Audios ▶️")
73
  results_output = gr.Column() # Conteneur pour les audios générés
74
+ prev_btn_3 = gr.Button("⬅️ Précédent")
 
 
 
 
 
 
 
 
75
  save_project_btn = gr.Button("Sauvegarder le Projet ✅")
76
 
77
  # Actions des Boutons
78
  def create_project(project_name, speaker, agree):
79
+ if not agree:
80
+ return gr.Error("❗ Veuillez accepter les conditions d'utilisation.")
81
+ if not project_name:
82
+ return gr.Error("❗ Le nom du projet est obligatoire.")
83
  os.makedirs(os.path.join(output_folder, project_name), exist_ok=True)
84
+ return f"✅ Projet '{project_name}' créé avec succès !", 2
85
 
86
+ next_btn_1.click(create_project, inputs=[project_name, speaker, agree], outputs=[None, step])
87
+ step.change(update_step, inputs=step, outputs=[step1, step2, step3])
88
 
89
  def add_section(sections):
90
  section = {"name": f"Section_{len(sections) + 1}", "text": ""}
 
104
  results = process_project(project_name, sections, speaker)
105
  return results
106
 
107
+ next_btn_2.click(lambda: 3, inputs=None, outputs=step)
108
+ prev_btn_2.click(lambda: 1, inputs=None, outputs=step)
109
+ step.change(update_step, inputs=step, outputs=[step1, step2, step3])
110
+
111
+ prev_btn_3.click(lambda: 2, inputs=None, outputs=step)
112
  generate_btn.click(generate_audios, inputs=[project_name, sections, speaker], outputs=[results_output])
113
 
114
  # Lancement de l'interface