We can make the computer speak with Python.

Given a text string, it will speak the written words in the English language.
This process is called Text To Speech (TTS).

Related Course: The Complete Machine Learning Course with Python

Text to speech

Pyttsx text to speech

Pytsx is a cross-platform text-to-speech wrapper.
It uses different speech engines based on your operating system:

nsss - NSSpeechSynthesizer on Mac OS X 10.5 and higher

sapi5 - SAPI5 on Windows XP, Windows Vista, and (untested) Windows 7

espeak - eSpeak on any distro / platform that can host the shared library (e.g., Ubuntu / Fedora Linux)

Install with pip (using pyenv, pipenv or virtualenv):

sudo pip install pyttsx

Then run the example code:

import pyttsx
engine = pyttsx.init()
engine.say('Good morning.')

gTTS text to speech

gTTS is a module and command line utility to save spoken text to mp3.
It uses the Google Text to Speech (TTS) API.

Listen to the voice sample below:

Related Course: The Complete Machine Learning Course with Python

This module supports many languages and sounds very natural.

Install with the python package tool (pip):

sudo pip install gTTS


from gtts import gTTS
import os
tts = gTTS(text='Good morning', lang='en')
os.system("mpg321 good.mp3")

If you want to test it on the command line use:

gtts-cli.py "Hello" -l 'en' -o hello.mp3

iOS TTS and speech recognition

TTS in Pythonista for iOS:

import speech
speech.say('Hola mundo', 'es_ES')

To record sound:

import sound

r = sound.Recorder('audio.m4a')
r.record(3) # seconds

To recognize it as text:

text = speech.recognize('audio.m4a', 'en')[0][0]  # sent to Apple servers

Microsoft speech engine

If you use Microsoft Windows 10, it has a speech engine included.
Install the module win32com, then you can use this code:

import win32com.client as wincl
speak = wincl.Dispatch("SAPI.SpVoice")
speak.Speak("Hello World")

IBM Watson TTS

IBM has created an tts API, which is free for a limited amount of queries.

Their API has many languages including English, German, Spanish, French, Italian, Japanese and Portuguese. They also have different speakers.

You can listen to sample data on the Watson TTS page.

You can use the tts-watson module to interact.

pip install tts-watson

After registrating on the IBM watson site (generate keys there),
we can write our code:

from tts_watson.TtsWatson import TtsWatson

ttsWatson = TtsWatson('watson_user', 'watson_password', 'en-US_AllisonVoice')
ttsWatson.play("Hello World")

Alternatively you can use curl to directly fetch from the API.

Download Machine Learning examples