Woziii commited on
Commit
e078f8d
·
verified ·
1 Parent(s): dcf642b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +13 -57
app.py CHANGED
@@ -1,12 +1,4 @@
1
  import subprocess
2
-
3
- # Run the setup.py install command
4
- try:
5
- subprocess.run(['python', 'setup.py', 'install', '--user'], check=True)
6
- print("Installation successful.")
7
- except subprocess.CalledProcessError as e:
8
- print(f"Installation failed with error: {e}")
9
-
10
  import gradio as gr
11
  from TTS.api import TTS
12
  import os
@@ -15,94 +7,62 @@ import torch
15
  from torch.serialization import add_safe_globals
16
  from TTS.tts.configs.xtts_config import XttsConfig
17
 
18
- # Ajouter XttsConfig comme "safe global" pour éviter les erreurs de désérialisation
19
  add_safe_globals([XttsConfig])
20
 
21
- # Charger le modèle XTTS
22
  tts = TTS("tts_models/multilingual/multi-dataset/xtts_v2", gpu=True)
23
 
24
- # Créer le dossier de sortie
25
  output_folder = "output_audio"
26
  os.makedirs(output_folder, exist_ok=True)
27
 
28
  def predict(prompt, speaker, agree, subfolder_name, file_name):
29
  if not agree:
30
  raise gr.Error("Veuillez accepter les conditions d'utilisation.")
31
-
32
- # Utiliser le nom fourni pour le sous-dossier ou en générer un par défaut
33
  subfolder_name = subfolder_name.strip() or f"session_{int(time.time())}"
34
  session_folder = os.path.join(output_folder, subfolder_name)
35
  os.makedirs(session_folder, exist_ok=True)
36
 
37
- # Utiliser le nom fourni pour le fichier ou un nom par défaut
38
  file_name = file_name.strip() or "output.wav"
39
  if not file_name.endswith(".wav"):
40
  file_name += ".wav"
41
-
42
  output_path = os.path.join(session_folder, file_name)
43
 
44
- # Charger tous les fichiers WAV du speaker sélectionné
45
  speaker_wav_paths = [os.path.join("examples", f) for f in os.listdir("examples") if f.startswith(speaker) and f.endswith(".wav")]
46
-
47
  if not speaker_wav_paths:
48
  raise gr.Error(f"Aucun fichier audio trouvé pour le speaker : {speaker}")
49
 
50
- # Synthèse vocale
51
  tts.tts_to_file(
52
  text=prompt,
53
  file_path=output_path,
54
- speaker_wav=speaker_wav_paths, # Liste de fichiers .wav
55
  language="fr"
56
  )
57
 
58
- # Générer une forme d'onde à partir de l'audio
59
- waveform = gr.make_waveform(audio=output_path)
60
-
61
- return 100, waveform, output_path
62
 
63
- # Interface utilisateur
64
  custom_css = """
65
- .gradio-container {
66
- font-family: 'Arial', sans-serif;
67
- background-color: #f0f4f8;
68
- }
69
- .gr-form {
70
- background-color: white;
71
- border-radius: 10px;
72
- padding: 20px;
73
- box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
74
- }
75
- .gr-button {
76
- background-color: #4a90e2;
77
- border: none;
78
- }
79
- .gr-button:hover {
80
- background-color: #3a7bc8;
81
- }
82
  """
83
 
84
  title = "Synthèse Vocale XTTS 🎙️"
85
-
86
  description = """
87
  <h3>Bienvenue sur notre outil de synthèse vocale XTTS !</h3>
88
- <p>Cet outil vous permet de générer une voix naturelle à partir d'un texte en français.
89
- Choisissez une voix, entrez votre texte, et écoutez le résultat !</p>
90
  """
91
-
92
  article = """
93
  <div style='margin:20px auto; text-align: center;'>
94
- <p>En utilisant cette démo, vous acceptez les conditions d'utilisation du modèle Coqui Public disponibles sur
95
- <a href='https://coqui.ai/cpml' target='_blank'>https://coqui.ai/cpml</a></p>
96
  </div>
97
  """
98
 
99
- # Générer la liste des speakers à partir des fichiers WAV dans le dossier examples
100
  available_speakers = list(set([f.split('_')[0] for f in os.listdir("examples") if f.endswith(".wav")]))
101
 
102
  with gr.Blocks(css=custom_css) as demo:
103
  gr.Markdown(f"<h1 style='text-align: center;'>{title}</h1>")
104
  gr.Markdown(description)
105
-
106
  with gr.Row():
107
  with gr.Column(scale=2):
108
  prompt = gr.Textbox(
@@ -129,20 +89,16 @@ with gr.Blocks(css=custom_css) as demo:
129
  label="Nom du fichier (facultatif)",
130
  placeholder="Nom du fichier audio généré"
131
  )
 
132
 
133
- generate_btn = gr.Button("Générer la voix", variant="primary")
134
-
135
-
136
- with gr.Row():
137
- audio_output = gr.Audio(label="Audio généré")
138
- waveform_output = gr.Video(label="Forme d'onde")
139
 
140
  generate_btn.click(
141
  predict,
142
  inputs=[prompt, speaker, agree, subfolder_name, file_name],
143
- outputs=[waveform_output, audio_output]
144
  )
145
 
146
  gr.Markdown(article)
147
 
148
- demo.launch(debug=True)
 
1
  import subprocess
 
 
 
 
 
 
 
 
2
  import gradio as gr
3
  from TTS.api import TTS
4
  import os
 
7
  from torch.serialization import add_safe_globals
8
  from TTS.tts.configs.xtts_config import XttsConfig
9
 
 
10
  add_safe_globals([XttsConfig])
11
 
 
12
  tts = TTS("tts_models/multilingual/multi-dataset/xtts_v2", gpu=True)
13
 
 
14
  output_folder = "output_audio"
15
  os.makedirs(output_folder, exist_ok=True)
16
 
17
  def predict(prompt, speaker, agree, subfolder_name, file_name):
18
  if not agree:
19
  raise gr.Error("Veuillez accepter les conditions d'utilisation.")
20
+
 
21
  subfolder_name = subfolder_name.strip() or f"session_{int(time.time())}"
22
  session_folder = os.path.join(output_folder, subfolder_name)
23
  os.makedirs(session_folder, exist_ok=True)
24
 
 
25
  file_name = file_name.strip() or "output.wav"
26
  if not file_name.endswith(".wav"):
27
  file_name += ".wav"
 
28
  output_path = os.path.join(session_folder, file_name)
29
 
 
30
  speaker_wav_paths = [os.path.join("examples", f) for f in os.listdir("examples") if f.startswith(speaker) and f.endswith(".wav")]
 
31
  if not speaker_wav_paths:
32
  raise gr.Error(f"Aucun fichier audio trouvé pour le speaker : {speaker}")
33
 
 
34
  tts.tts_to_file(
35
  text=prompt,
36
  file_path=output_path,
37
+ speaker_wav=speaker_wav_paths,
38
  language="fr"
39
  )
40
 
41
+ return output_path
 
 
 
42
 
 
43
  custom_css = """
44
+ .gradio-container { font-family: 'Arial', sans-serif; background-color: #f0f4f8; }
45
+ .gr-form { background-color: white; border-radius: 10px; padding: 20px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); }
46
+ .gr-button { background-color: #4a90e2; border: none; }
47
+ .gr-button:hover { background-color: #3a7bc8; }
 
 
 
 
 
 
 
 
 
 
 
 
 
48
  """
49
 
50
  title = "Synthèse Vocale XTTS 🎙️"
 
51
  description = """
52
  <h3>Bienvenue sur notre outil de synthèse vocale XTTS !</h3>
53
+ <p>Cet outil vous permet de générer une voix naturelle à partir d'un texte en français. Choisissez une voix, entrez votre texte, et écoutez le résultat !</p>
 
54
  """
 
55
  article = """
56
  <div style='margin:20px auto; text-align: center;'>
57
+ <p>En utilisant cette démo, vous acceptez les conditions d'utilisation du modèle Coqui Public disponibles sur <a href='https://coqui.ai/cpml' target='_blank'>https://coqui.ai/cpml</a></p>
 
58
  </div>
59
  """
60
 
 
61
  available_speakers = list(set([f.split('_')[0] for f in os.listdir("examples") if f.endswith(".wav")]))
62
 
63
  with gr.Blocks(css=custom_css) as demo:
64
  gr.Markdown(f"<h1 style='text-align: center;'>{title}</h1>")
65
  gr.Markdown(description)
 
66
  with gr.Row():
67
  with gr.Column(scale=2):
68
  prompt = gr.Textbox(
 
89
  label="Nom du fichier (facultatif)",
90
  placeholder="Nom du fichier audio généré"
91
  )
92
+ generate_btn = gr.Button("Générer la voix", variant="primary")
93
 
94
+ audio_output = gr.Audio(label="Audio généré")
 
 
 
 
 
95
 
96
  generate_btn.click(
97
  predict,
98
  inputs=[prompt, speaker, agree, subfolder_name, file_name],
99
+ outputs=[audio_output]
100
  )
101
 
102
  gr.Markdown(article)
103
 
104
+ demo.launch(debug=True)