Script Python Text-to-Speech con GUI

Lo script Python fornisce un’interfaccia grafica per convertire il testo in file audio utilizzando gTTS (Google Text-to-Speech). Offre funzionalità per selezionare la lingua, dividere il testo in più parti, e salvare l’audio in file separati.

Struttura e Funzionalità

Interfaccia Grafica (GUI): Costruita con tkinter e migliorata con ttkthemes per un aspetto più elegante.

Generazione Audio: La funzione genera_audio converte il testo in file audio, gestendo la suddivisione del testo e la barra di avanzamento.

Selezione Lingua: L’utente può selezionare la lingua tramite un menù a tendina.

Salvataggio dei File: I file audio vengono salvati in una directory scelta dall’utente.

import tkinter as tk
from tkinter import ttk
from tkinter import filedialog
from tkinter import messagebox
from ttkthemes import ThemedStyle
from gtts import gTTS
import webbrowser

# Funzione per generare l'audio
def genera_audio():
    testo = text_entry.get("1.0", "end-1c")  # Ottiene il testo dal campo di testo
    if not testo.strip():  # Se il testo è vuoto...
        tk.messagebox.showerror("Errore", "Inserisci del testo.")
        return  # termina la funzione

    lingua = language_combo.get()
    parti = testo.split('|')

    progress_bar["maximum"] = len(parti)  # Imposta il massimo valore della barra di avanzamento
    progress_bar["value"] = 0  # Resetta il valore della barra di avanzamento

    # Dialogo di selezione della cartella di destinazione
    dir_path = filedialog.askdirectory()

    for i, parte in enumerate(parti, start=1):
        tts = gTTS(parte.strip(), lang=lingua)
        file_path = f"{dir_path}/output{i}.mp3"
        if file_path:
            tts.save(file_path)

        progress_bar["value"] = i  # Aggiorna il valore della barra di avanzamento
        window.update()  # Aggiorna l'interfaccia
        
# Funzione per aprire la finestra delle informazioni        
def open_info():
    info_window = tk.Toplevel(window)
    info_window.title("Informazioni")
    info_label = tk.Label(info_window, text="Separando il vostro testo con l'elemento | il programma provvederà a generare diversi file audio in base agli elementi | inseriti. Per esempio il testo 'Ciao!| Come Stai?' creerà 2 file audio uno con l'audio relativo a 'Ciao!' l'altro con l'audio relativo a ' Come Stai?'.")
    info_label.pack(padx=10, pady=10)

# Creazione della GUI
window = tk.Tk()
window.title("Text to Speech - By Piergiorgio Concari")
window.resizable(False, False)  # Impedisci il ridimensionamento della finestra

# Carica l'immagine di sfondo
background_image = tk.PhotoImage(file="sfondo.png")
background_label = tk.Label(window, image=background_image)
background_label.place(x=0, y=0, relwidth=1, relheight=1)

# Applica un tema personalizzato
style = ThemedStyle(window)
style.set_theme("elegance")  # Scegli il tema desiderato, ad esempio "arc"

# Campo di inserimento del testo
text_label = ttk.Label(window, text="Inserisci il testo:")
text_label.grid(row=0, column=0, padx=10, pady=10)
text_entry = tk.Text(window, width=50, height=10)  # Campo di testo più ampio
text_entry.grid(row=0, column=1, padx=10, pady=10)

# Menu a tendina per selezionare la lingua
languages = ['it', 'en', 'es', 'fr', 'de']  # Puoi aggiungere altre lingue qui
language_label = ttk.Label(window, text="Seleziona la lingua:")
language_label.grid(row=1, column=0, padx=10, pady=10)
language_combo = ttk.Combobox(window, values=languages)
language_combo.set('it')  # Lingua predefinita
language_combo.grid(row=1, column=1, padx=10, pady=10)

# Bottone per generare l'audio
button = ttk.Button(window, text="Genera audio", command=genera_audio)
button.grid(row=2, column=0, columnspan=2, padx=10, pady=10)

# Barra di avanzamento
progress_bar = ttk.Progressbar(window, mode="determinate")
progress_bar.grid(row=3, column=0, columnspan=2, padx=10, pady=10)

# Link a sito web
def open_web():
    webbrowser.open('https://www.yellowcreativemedia.com')

link_label = tk.Label(window, text="Realizzato da Piergiorgio Concari", fg="#000", cursor="hand2")
link_label.grid(row=4, column=0, columnspan=2, padx=10, pady=10)
link_label.bind("<Button-1>", lambda e: open_web())

# Bottone per aprire le informazioni
info_button = ttk.Button(window, text="Informazioni", command=open_info)
info_button.grid(row=5, column=0, columnspan=2, padx=10, pady=10)

# Ciclo principale della GUI
window.mainloop()

Valutazione Tecnica

Usabilità: L’interfaccia è intuitiva e facile da usare, con controlli chiari per l’input dell’utente.

Funzionalità: Lo script combina utilmente la generazione di testo-parlato con una GUI interattiva.

Estetica: L’uso di ttkthemes migliora l’aspetto visivo dell’applicazione.

Gestione Errori: Vi è una verifica basilare per il testo vuoto, ma potrebbero essere necessari ulteriori controlli per errori (es. selezione directory non valida).

Conclusioni

Lo script è un esempio pratico di come integrare la tecnologia Text-to-Speech in un’applicazione Python con GUI. È ben strutturato e facile da utilizzare, rendendolo adatto sia per utenti finali che per scopi educativi. Tuttavia, l’inclusione di una gestione degli errori più robusta migliorerebbe la resilienza dell’applicazione.