Another Tuesday and another tool to add to your Python toolkit.
This time we take a look at a Python library that can provide exceptional text to speech. I used this library in Linux Format issue 222 to create an "Information Butler" powered by Raspberry Pi, which retrieved weather and news headlines from BBC news just by waving my hand over the box.
So what is it?
gTTS, Google Text-To-Speech is a Python library from Pierre-Nick Durette that converts a string into an audio file. It does not automatically speak, rather it creates an mp3 file that we can then play.
So how can I install it?
On Mac and Linux
sudo pip3 install gtts
pip3.exe install gtts
You will also need to install the VLC app, which can be found via their website for Windows users. but for Linux users it is best to install using your package manager / software centre.
So how can I use it?
The most basic test is to say hello world! So in your favourite Python3 editor, write the following code.
from gtts import gTTS tts = gTTS("hello world") tts.save("hello_world.mp3")
This code will import the
gTTS library, then we create an object called
tts which will store the string that we wish to "speak". The final line saves the string as an audio file called
hello_world.mp3 in the same directory as where the code is ran.
Is that it?
Well no as we can also provide an argument when using the library, that will change the accent and language of the speaker. Note: This does not translate the text from say English to French, rather you get a French voice reading English text. But it is different for numbers, for example the time, as it will read the text in the chosen language.
To use another accent / language, we pass the language as an argument when calling the object.
So before we did this
tts = gTTS("hello world")
But to have the text read in an American accent we use
tts = gTTS("hello world", lang="en-us")
Note: The input library requires running as root / sudo on Linux as it needs to access the keyboard directly. So I ran the code in a terminal, rather than the IDLE Python shell.
The goal of the project is to speak the time when the user presses the space bar. So let's start by importing the libraries needed.
- gTTS for the Google Text-To-Speech.
- get_key from inputs for detecting when a key is pressed.
- gmtime, strftime to get the current time and format so that we can read it.
- vlc to play the audio file.
from gtts import gTTS from inputs import get_key from time import gmtime, strftime import vlc
To continuously run the code we need a loop, and for this basic test
while True will do the job. The first line of code in the loop will store the key presses into a variable called
while True: events = get_key()
Still inside the loop and we next create a variable called
current_time which stores the current time, but only the Hours and Minutes
current_time = strftime("%H:%M", gmtime())
So now we use a
for loop to check for a key press event, i.e we press a key! If the event is
KEY_SPACE which is how inputs refers to the space bar, and the
event.state == 1 which means the key has been pressed, then it activates the code indented below it.
for event in events: if event.code == "KEY_SPACE" and event.state == 1:
So inside the
for loop and we start by printing the current time to the Python shell, for debug.
Then we use gTTS to read the current time in a UK voice / accent (in the video I change it to American, UK, Italian and French.)
tts = gTTS(current_time,lang="en-uk")
Then I save the audio to my home directory.
The next step is to tell VLC where to the audio file is, and we save that information to an object called
media = vlc.MediaPlayer("/home/les/current_time.mp3")
The last step is to play the
Complete Code Listing
from gtts import gTTS from inputs import get_key from time import gmtime, strftime import vlc while True: events = get_key() current_time = strftime("%H:%M", gmtime()) for event in events: if event.code == "KEY_SPACE" and event.state == 1: print(current_time) tts = gTTS(current_time,lang="en-uk") tts.save("/home/les/current_time.mp3") media = vlc.MediaPlayer("/home/les/current_time.mp3") media.play()
For Linux users, you will need to run the code from the Terminal using
sudo. Windows users can run from their Python editor.
There we go!
So that was gTTS an interesting tool for your Python toolkit