Textspeak 1.4 – more features

This tool makes you create mp3 audio from text with gtts, tkinter and pygame

1: hear the word whily you type and record it; 2: write a sentence and then you hear it when you hit enter and save the sentence; the mp3 will be saved in a folder called audio

github repository with the code

# create the mp3 letters audio files
import os
from gtts import gTTS
import tkinter as tk
from pygame import mixer
import tkinter.ttk as ttk
from time import sleep

def speak(word):
    print("looking for word in dictionary")
    # print(os.listdir("audio/"))
    word = word.lower()
    if f"{word}.mp3" not in os.listdir("audio/"):
        if word != "":
            print("This is not present... creating")
            t = gTTS(word, "it")
            t.save(f"audio/{word}.mp3")
            sleep(1)
            play(word)
            print("created " + word)
            show_list()
            lbx.focus(word)
    else:
        play(word)


def show_list():
    global lbx

    lbx.delete("0", "end")
    elenco = os.listdir("audio")
    elenco.sort(reverse=False)
    for file in elenco:
        if len(file[:-4]) == 1:
            lbx.insert("end", f"")
            lbx.insert("end", f"=== [ {file[:-4]} ] ====")
        else:
            lbx.insert("end", file)

def delete(evt):
    "with control+d it deletes the sound selected"
    global Lbx

    name = lbx.get(lbx.curselection())
    print(name)
    os.remove("audio/" + name)
    lbx.delete("anchor")

def play(word):
    mixer.music.load("audio/" + word + ".mp3")
    mixer.music.play()

def start():
    global word, lbx, text

    mixer.init()
    word = ""
    def audiokey(event):
        global word

        word = word.lower()
        print(event.char)
        # mixer.music.load("audio/" + str(event.char) + ".mp3")
        # mixer.music.play()
        try:
            if event.char  in " ,.!?\n":
                speak(word)
                play(word)
                word = ""
            else:
                word += str(event.char)

        except:
            word=""

    def indietro(event):
        global word
        
        word = word[:-1]
      
    root = tk.Tk()
    root.title("Type to hear the pc reading the text when press space")
    root.geometry("600x400+200+400")
    
    # text widget where you write
    lbx = tk.Listbox(
        root,
        bg="black",
        fg="white"
        )
    lbx.pack(side="left", fill="both")
    lbx.bind("<Double-Button>", add_word_to_text)
    lbx.bind("<Control-d>", delete)
    scrollbar = ttk.Scrollbar(root, orient=tk.VERTICAL, command=lbx.yview)
    scrollbar.pack(side="left", fill=tk.Y)
    lbx.config(yscrollcommand=scrollbar.set)
    show_list()

    lab = tk.Label(root, text="write and press return").pack()
    e = tk.Entry(root)
    e.pack()
    e.bind("<Return>", lambda evt: save_text(e.get()))

    text = tk.Text(root)
    text.pack()


    text.focus()
    text.bind("<Key>", audiokey)
    text.bind("<BackSpace>", indietro)
    # text.bind("<Return>", _return)
    root.mainloop()

def save_text(text):
    speak(text)

def add_word_to_text(evt):
    global lbx, text

    word = lbx.get(lbx.curselection())
    word = word[:-4]
    text.insert("end", word)
    mixer.music.load("audio/" + word + ".mp3")
    mixer.music.play()
    text.insert("end", " ")


start()

github


Subscribe to the newsletter for updates
Tkinter templates
Avatar My youtube channel

Twitter: @pythonprogrammi - python_pygame

Videos

Speech recognition game

Pygame's Platform Game

Other Pygame's posts

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.