Sometimes it’s nice to be able to provide output by speech rather than via the traditional console or some type of GUI. Text-to-speech with Python is actually a lot easier than you might expect.
I love Python, it is definitely my favorite and go-to language for smaller programs, or scripts. Python comes with many handy and easily available libraries and in this article, we are going to look at how we can output text-to-speech with Python. Depending on your OS it’s easier, than others so we will start out by looking at an example with MacOS where it’s arguably the easiest as no external libraries are required to be downloaded as MacOS provides a library called subprocess where text-to-speech is one of the functionalities.
MacOS
We will use the subprocess library to output text to speech, it is extremely easy to get going.
import subprocess
def say(text):
subprocess.call(['say', text])
say("Hello World!")
It’s that simple! However, sadly, not all operating systems make it as easy, so next, we are going to look at a library that is available cross-platform.
Cross-platform
In order to get it working on other platforms, we are going to need to install an external module called pyssx3 which is a library that works for both Python2 and Python3.
If you are new to Python and haven’t used pip before, I recommend reading up a bit on that before. It is a powerful package index for Python that makes it easy to find and install external modules that we later can import into our programs.
pip install pyttsx3
And then it’s as easy as the following to output text-to-speech with Python.
import pyttsx3
engine = pyttsx3.init();
def say(text):
engine.say(text)
engine.runAndWait()
say("Hello World!")
With no native OS support for and having to resort to external libraries more errors can sometimes occur. Below are a couple of known errors and solutions that have worked for others.
Known errors and possible solutions
ModuleNotFoundError: No module named ‘Foundation’
– pip install pyobjc
No module named win32com.client
No module named win32
No module named win32api
– pip install pypiwin32
Final Words
We have looked at how we can leverage text-to-speech on different operative systems. It really is surprisingly easy to do this with Python and you really can do some cool and fun stuff with it. So, why don’t you give it a try, and perhaps write in the comments below if you come up with some fun ideas to use it for.
Personally, I wrote a little program for my girlfriend that monitors a folder where pictures with text end up. When the program detects a new picture it reads the text inside the images and outputs it via text-to-speech with Python.