Creare file mp3 da file di testo con gtts

Un’altra versione del codice che usa gtts

Da poco abbiamo visto che occorre aggiornare la versione di gtts per far funzionare il nostro codice. Vi rimando a questo articolo per saperne di più.

Oggi vediamo il codice di uno script che ci permette di creare velocemente file audio con la voce di google translate. Ecco il codice:

from gtts import gTTS
import os

# qui inserisci i file di testo che vuoi trasformare in audio
names = ["esempio"]
# se vuoi trasformare tutti i file di testo in una cartella togli il seguente commento
# names = [f[:-4] for f in os.listdir if f.endswith('.txt')]

# qa è una lista di liste; ogni lista comprende stringhe di testo di un file dell'elenco names
# qa = [["prima riga del primo file","seconda"...],["prima riga del secondo file"...]...]


def genera():
    "Genera tanti file, quante sono le righe vuote in ogni file"
    global qa
    n = 1
    numfiletxt = 0
    # per ogni lista di stringhe (una per file) contenuta in qa
    for q in qa:
        # per ogni stringa di una lista q
        for speech in q:
            # salva un file mp3
            tts = gTTS(speech, lang='it')
            tts.save("./audio/" + names[numfiletxt] + str(n) + ".mp3")
            n += 1
        numfiletxt += 1


def onefile():
    "Tutto il testo in un file chiamato onefile.mp3"
    global qa
    x = ""
    # per ogni lista di stringhe (di ogni file)
    for q in qa:
        # per ogni stringa in ogni lista (di un file)
        for speech in q:
            # accumula le stringhe in x
            x += speech
    # crea l'audio delle stringhe
    tts = gTTS(x, lang='it')
    # salva il file
    tts.save("./audio/onefile.mp3")


def ascolta():
    "Fa partire il lettore audio e legge tutti i file nella cartella audio"
    n = 1
    for file in os.listdir("./audio"):
        print(n, file)
        n += 1
    for file in os.listdir("./audio"):
        os.system(os.getcwd() + "/audio/" + file)


def menu():
    "Crea il menu per la scelta tra creare vari file o un solo file"
    ans = input("1. Genera tanti file quante sono le righe vuote\n2.Crea un solo file\n3. Ascolta i file nella cartella audio\n>>>")
    if ans == "1":
        genera()
        ascolta()
    elif ans == "2":
        onefile()
        os.system(os.getcwd() + "/audio/onefile.mp3")
    else:
        ascolta()


def start():
    "create qa that contains the list with all the text to transform in mp3"
    global qa
    qa = []
    try:
        for name in names:
            with open(name + ".txt", 'r', encoding='utf-8') as file:
                qa.append(file.read().split("\n\n"))
        if not os.path.isdir("audio"):
            os.mkdir("audio")
        menu()
    except FileNotFoundError:
        print("Non ci sono i file della lista names o non ci sono file di testo")


start()

 

Published by pythonprogramming

Started with basic on the spectrum, loved javascript in the 90ies and python in the 2000, now I am back with python, still making some javascript stuff when needed.