rick commited on
Commit
63a6090
·
unverified ·
1 Parent(s): beaeaa8

amelioration des lectures TTS en mode traduction a selections multiples.

Browse files
Files changed (1) hide show
  1. app.py +45 -5
app.py CHANGED
@@ -6,6 +6,7 @@ import tempfile
6
  import base64
7
  from pydub import AudioSegment
8
  import os
 
9
 
10
  # Configuration du client OpenAI avec la clé API
11
  client = OpenAI(api_key=getenv("OPENAI_API_KEY"))
@@ -89,6 +90,10 @@ def language_detection(input_text, temperature=0.01):
89
  )
90
  return response.choices[0].message.content
91
 
 
 
 
 
92
  # Fonction pour convertir du texte en parole
93
  def text_to_speech(text):
94
  response = client.audio.speech.create(
@@ -104,11 +109,35 @@ def text_to_speech(text):
104
  # Lire le contenu du fichier audio
105
  with open(temp_audio.name, "rb") as audio_file:
106
  audio_bytes = audio_file.read()
 
 
 
 
 
 
 
 
 
107
 
108
- return audio_bytes
 
 
 
 
 
 
 
 
 
 
 
 
 
109
 
110
  # Fonction pour traiter les messages de l'utilisateur et générer une réponse
111
- def process_message(message, operation_prompt="", tts_enabled=False):
 
 
112
  payload_content = f'{operation_prompt} :\n\"\"\"\n{message}\n\"\"\"'
113
 
114
  st.session_state.messages.append({"role": "user", "content": payload_content})
@@ -131,8 +160,10 @@ def process_message(message, operation_prompt="", tts_enabled=False):
131
  st.session_state.messages.append({"role": "assistant", "content": full_response})
132
 
133
  if tts_enabled:
134
- tts_audio = text_to_speech(full_response)
135
- st.audio(tts_audio, format="audio/mp3", autoplay=True)
 
 
136
 
137
 
138
  # Classe pour stocker les prompts système globaux
@@ -234,6 +265,7 @@ def main():
234
  if None == st.session_state.language_detected:
235
  st.session_state.language_detected = language_detection(input_text=user_input, temperature=0.01)
236
 
 
237
  for cursor_selected_lang in st.session_state.selected_languages:
238
  st.session_state.target_language = cursor_selected_lang["iso-639-1"]
239
 
@@ -241,9 +273,17 @@ def main():
241
  init_process_mode()
242
 
243
  # Traitement du message de l'utilisateur pour la langue cible actuelle
244
- process_message(user_input,
245
  operation_prompt=f"{OP_PROMPT}",
246
  tts_enabled=st.session_state.enable_tts_for_input_from_text_field)
 
 
 
 
 
 
 
 
247
 
248
  # #################################################################
249
  # Affichage de l'historique des messages (sauf le message système)
 
6
  import base64
7
  from pydub import AudioSegment
8
  import os
9
+ import io
10
 
11
  # Configuration du client OpenAI avec la clé API
12
  client = OpenAI(api_key=getenv("OPENAI_API_KEY"))
 
90
  )
91
  return response.choices[0].message.content
92
 
93
+ def get_duration_pydub(audio_file):
94
+ audio = AudioSegment.from_file(audio_file)
95
+ return audio.duration_seconds
96
+
97
  # Fonction pour convertir du texte en parole
98
  def text_to_speech(text):
99
  response = client.audio.speech.create(
 
109
  # Lire le contenu du fichier audio
110
  with open(temp_audio.name, "rb") as audio_file:
111
  audio_bytes = audio_file.read()
112
+
113
+ # Lire la durée de l'audio en secondes
114
+ audio_duration = get_duration_pydub(temp_audio.name)
115
+
116
+ return audio_bytes, audio_duration
117
+
118
+ def concatenate_audio_files(audio_list):
119
+ # Créer un segment audio vide
120
+ final_audio = AudioSegment.empty()
121
 
122
+ # Silence de 5 secondes
123
+ silence = AudioSegment.silent(duration=5000) # 5000 ms = 5 secondes
124
+
125
+ for audio_bytes, _ in audio_list:
126
+ # Convertir les bytes en un segment audio
127
+ segment = AudioSegment.from_mp3(io.BytesIO(audio_bytes))
128
+
129
+ # Ajouter le segment et le silence au final_audio
130
+ final_audio += segment + silence
131
+
132
+ # Convertir le segment audio final en bytes
133
+ buffer = io.BytesIO()
134
+ final_audio.export(buffer, format="mp3")
135
+ return buffer.getvalue()
136
 
137
  # Fonction pour traiter les messages de l'utilisateur et générer une réponse
138
+ def process_message(message,
139
+ operation_prompt="",
140
+ tts_enabled=False):
141
  payload_content = f'{operation_prompt} :\n\"\"\"\n{message}\n\"\"\"'
142
 
143
  st.session_state.messages.append({"role": "user", "content": payload_content})
 
160
  st.session_state.messages.append({"role": "assistant", "content": full_response})
161
 
162
  if tts_enabled:
163
+ tts_audio, tts_duration = text_to_speech(full_response)
164
+ return tts_audio, tts_duration
165
+ return None, None
166
+ #st.audio(tts_audio, format="audio/mp3", autoplay=True)
167
 
168
 
169
  # Classe pour stocker les prompts système globaux
 
265
  if None == st.session_state.language_detected:
266
  st.session_state.language_detected = language_detection(input_text=user_input, temperature=0.01)
267
 
268
+ audio_list = []
269
  for cursor_selected_lang in st.session_state.selected_languages:
270
  st.session_state.target_language = cursor_selected_lang["iso-639-1"]
271
 
 
273
  init_process_mode()
274
 
275
  # Traitement du message de l'utilisateur pour la langue cible actuelle
276
+ tts_audio, tts_duration = process_message(user_input,
277
  operation_prompt=f"{OP_PROMPT}",
278
  tts_enabled=st.session_state.enable_tts_for_input_from_text_field)
279
+ if tts_audio is not None:
280
+ audio_list.append((tts_audio, tts_duration))
281
+
282
+ if audio_list:
283
+ final_audio = concatenate_audio_files(audio_list)
284
+ st.audio(final_audio,
285
+ format="audio/mp3",
286
+ autoplay=True)
287
 
288
  # #################################################################
289
  # Affichage de l'historique des messages (sauf le message système)