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