Woziii commited on
Commit
3612cc7
·
verified ·
1 Parent(s): ca49200

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +33 -42
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 traiter un projet complet
44
- def process_project(project_name, sections, speaker):
45
- results = []
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
- # Titre principal
60
- gr.Markdown("# 🎙️ Synthèse Vocale Margaux")
 
 
61
 
62
- # Introduction et explication globale
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. 🔄 **Écoutez et ajustez** : Régénérez les audios si nécessaire, indépendamment des autres.
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.Box():
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
- create_project_btn = gr.Button("Créer le Projet 🚀")
83
 
84
  # Étape 2 : Gestion des Sections
85
- with gr.Box():
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
- sections = gr.State([]) # Liste des sections dynamiques
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
- # Étape 3 : Validation des Sections et Génération des Audios
99
- with gr.Box():
100
- gr.Markdown("### 🎧 Étape 3 : Génération des Audios")
 
 
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
- validate_conditions(agree)
 
 
 
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
- create_project_btn.click(create_project, inputs=[project_name, speaker, agree], outputs=[])
 
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