Lorenzob commited on
Commit
ed5e263
·
verified ·
1 Parent(s): f1cf03f

Soluzione specifica per Aurora-1.6b-complete con caricamento manuale

Browse files
Files changed (1) hide show
  1. app.py +5 -66
app.py CHANGED
@@ -20,17 +20,12 @@ torch.manual_seed(42)
20
  MODEL_REPO = "Lorenzob/aurora-1.6b-complete" # Repository del modello
21
  CACHE_DIR = "./model_cache" # Directory per la cache del modello
22
  SAMPLE_RATE = 24000 # Frequenza di campionamento
23
- AUDIO_DIR = "./audio_cache" # Directory per salvare gli audio generati
24
 
25
  # Cache per componenti del modello
26
  processor = None
27
  model = None
28
  speaker_embeddings_cache = {}
29
 
30
- # Assicurati che le directory esistano
31
- os.makedirs(CACHE_DIR, exist_ok=True)
32
- os.makedirs(AUDIO_DIR, exist_ok=True)
33
-
34
  def download_file(url, save_path):
35
  """Scarica un file da un URL"""
36
  response = requests.get(url, stream=True)
@@ -80,6 +75,9 @@ def fix_aurora_config():
80
  config_url = f"https://huggingface.co/{MODEL_REPO}/resolve/main/config.json"
81
  local_config_path = os.path.join(CACHE_DIR, "config.json")
82
 
 
 
 
83
  try:
84
  # Scarica il file di configurazione
85
  print(f"Scaricamento della configurazione da {config_url}...")
@@ -189,24 +187,6 @@ def load_aurora_model_manually():
189
 
190
  return model, processor
191
 
192
- def save_audio_to_file(audio_array, sample_rate):
193
- """Salva l'audio in un file e restituisce il percorso"""
194
- try:
195
- import soundfile as sf
196
- import time
197
-
198
- # Crea un nome univoco per il file
199
- timestamp = int(time.time())
200
- audio_path = os.path.join(AUDIO_DIR, f"audio_{timestamp}.wav")
201
-
202
- # Salva l'audio come file WAV
203
- sf.write(audio_path, audio_array, sample_rate)
204
-
205
- return audio_path
206
- except Exception as e:
207
- print(f"Errore nel salvare l'audio: {e}")
208
- return None
209
-
210
  def text_to_speech(text, language="it", speaker_id=0, speed=1.0, show_log=True):
211
  """Converte testo in voce utilizzando Aurora-1.6b-complete"""
212
  if not text.strip():
@@ -291,12 +271,6 @@ def text_to_speech(text, language="it", speaker_id=0, speed=1.0, show_log=True):
291
  if show_log:
292
  print(f"✅ Audio generato con successo! Lunghezza: {len(speech_array)} campioni")
293
 
294
- # Salva l'audio in un file per evitare problemi di perdita
295
- audio_path = save_audio_to_file(speech_array, sample_rate)
296
- if audio_path and show_log:
297
- print(f"Audio salvato in {audio_path}")
298
-
299
- # Restituisci l'audio come tupla (sample_rate, speech_array)
300
  return (sample_rate, speech_array), None
301
  except Exception as e:
302
  error_msg = f"Errore nella generazione dell'audio: {str(e)}"
@@ -305,31 +279,6 @@ def text_to_speech(text, language="it", speaker_id=0, speed=1.0, show_log=True):
305
  print(f"❌ {detailed_error}")
306
  return None, detailed_error
307
 
308
- # Funzione di cleanup per rimuovere file vecchi
309
- def cleanup_old_audio_files():
310
- """Rimuove i file audio vecchi per risparmiare spazio"""
311
- try:
312
- import time
313
- import glob
314
-
315
- # Trova tutti i file audio
316
- audio_files = glob.glob(os.path.join(AUDIO_DIR, "*.wav"))
317
-
318
- # Ottieni il tempo attuale
319
- current_time = time.time()
320
-
321
- # Rimuovi i file più vecchi di 1 ora
322
- for file in audio_files:
323
- file_time = os.path.getmtime(file)
324
- if current_time - file_time > 3600: # 3600 secondi = 1 ora
325
- os.remove(file)
326
- print(f"Rimosso file audio vecchio: {file}")
327
- except Exception as e:
328
- print(f"Errore nel cleanup dei file audio: {e}")
329
-
330
- # Esegui il cleanup all'avvio
331
- cleanup_old_audio_files()
332
-
333
  # Esempi predefiniti per l'interfaccia
334
  examples = [
335
  ["Ciao, mi chiamo Aurora e sono un assistente vocale italiano.", "it", 0, 1.0, True],
@@ -342,9 +291,6 @@ examples = [
342
 
343
  # Definizione dell'interfaccia Gradio
344
  with gr.Blocks(title="Aurora-1.6b-complete TTS Demo", theme=gr.themes.Soft()) as demo:
345
- # Stato nascosto per memorizzare l'ultimo audio generato
346
- audio_state = gr.State(value=None)
347
-
348
  gr.Markdown("""
349
  # 🎙️ Aurora-1.6b-complete Text-to-Speech Demo
350
 
@@ -391,12 +337,7 @@ with gr.Blocks(title="Aurora-1.6b-complete TTS Demo", theme=gr.themes.Soft()) as
391
  submit_btn = gr.Button("Genera Audio", variant="primary")
392
 
393
  with gr.Column(scale=1):
394
- audio_output = gr.Audio(
395
- label="Audio generato",
396
- type="numpy", # Usa il tipo numpy per evitare problemi
397
- show_share_button=True,
398
- autoplay=True
399
- )
400
  error_output = gr.Textbox(label="Messaggi di errore", visible=True, lines=6)
401
 
402
  # Esempi
@@ -416,7 +357,6 @@ with gr.Blocks(title="Aurora-1.6b-complete TTS Demo", theme=gr.themes.Soft()) as
416
  - Puoi cambiare lo Speaker ID per ottenere voci con caratteristiche diverse
417
  - La velocità di generazione dipende dalle risorse disponibili sul server
418
  - Il checkbox "Mostra log di debug" è utile per diagnosticare eventuali problemi
419
- - **Gli audio generati vengono salvati automaticamente sul server** per evitare di perderli
420
 
421
  ## 🔗 Crediti
422
 
@@ -430,7 +370,6 @@ with gr.Blocks(title="Aurora-1.6b-complete TTS Demo", theme=gr.themes.Soft()) as
430
  fn=text_to_speech,
431
  inputs=[text_input, language_input, speaker_input, speed_input, debug_input],
432
  outputs=[audio_output, error_output],
433
- api_name=None # Disabilita l'API endpoint per questa funzione
434
  )
435
 
436
  # Precarica il modello all'avvio
@@ -441,4 +380,4 @@ except Exception as e:
441
  print(f"Errore nell'inizializzazione: {e}")
442
 
443
  # Avvia l'interfaccia
444
- demo.launch(share=False, show_error=True, prevent_thread_lock=True)
 
20
  MODEL_REPO = "Lorenzob/aurora-1.6b-complete" # Repository del modello
21
  CACHE_DIR = "./model_cache" # Directory per la cache del modello
22
  SAMPLE_RATE = 24000 # Frequenza di campionamento
 
23
 
24
  # Cache per componenti del modello
25
  processor = None
26
  model = None
27
  speaker_embeddings_cache = {}
28
 
 
 
 
 
29
  def download_file(url, save_path):
30
  """Scarica un file da un URL"""
31
  response = requests.get(url, stream=True)
 
75
  config_url = f"https://huggingface.co/{MODEL_REPO}/resolve/main/config.json"
76
  local_config_path = os.path.join(CACHE_DIR, "config.json")
77
 
78
+ # Crea la directory cache se non esiste
79
+ os.makedirs(CACHE_DIR, exist_ok=True)
80
+
81
  try:
82
  # Scarica il file di configurazione
83
  print(f"Scaricamento della configurazione da {config_url}...")
 
187
 
188
  return model, processor
189
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
190
  def text_to_speech(text, language="it", speaker_id=0, speed=1.0, show_log=True):
191
  """Converte testo in voce utilizzando Aurora-1.6b-complete"""
192
  if not text.strip():
 
271
  if show_log:
272
  print(f"✅ Audio generato con successo! Lunghezza: {len(speech_array)} campioni")
273
 
 
 
 
 
 
 
274
  return (sample_rate, speech_array), None
275
  except Exception as e:
276
  error_msg = f"Errore nella generazione dell'audio: {str(e)}"
 
279
  print(f"❌ {detailed_error}")
280
  return None, detailed_error
281
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
282
  # Esempi predefiniti per l'interfaccia
283
  examples = [
284
  ["Ciao, mi chiamo Aurora e sono un assistente vocale italiano.", "it", 0, 1.0, True],
 
291
 
292
  # Definizione dell'interfaccia Gradio
293
  with gr.Blocks(title="Aurora-1.6b-complete TTS Demo", theme=gr.themes.Soft()) as demo:
 
 
 
294
  gr.Markdown("""
295
  # 🎙️ Aurora-1.6b-complete Text-to-Speech Demo
296
 
 
337
  submit_btn = gr.Button("Genera Audio", variant="primary")
338
 
339
  with gr.Column(scale=1):
340
+ audio_output = gr.Audio(label="Audio generato", show_share_button=True)
 
 
 
 
 
341
  error_output = gr.Textbox(label="Messaggi di errore", visible=True, lines=6)
342
 
343
  # Esempi
 
357
  - Puoi cambiare lo Speaker ID per ottenere voci con caratteristiche diverse
358
  - La velocità di generazione dipende dalle risorse disponibili sul server
359
  - Il checkbox "Mostra log di debug" è utile per diagnosticare eventuali problemi
 
360
 
361
  ## 🔗 Crediti
362
 
 
370
  fn=text_to_speech,
371
  inputs=[text_input, language_input, speaker_input, speed_input, debug_input],
372
  outputs=[audio_output, error_output],
 
373
  )
374
 
375
  # Precarica il modello all'avvio
 
380
  print(f"Errore nell'inizializzazione: {e}")
381
 
382
  # Avvia l'interfaccia
383
+ demo.launch()