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).
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):
Then run the example code:
import pyttsx engine = pyttsx.init() engine.say('Good morning.') engine.runAndWait()
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:
This module supports many languages and sounds very natural.
Install with the python package tool (pip):
from gtts import gTTS import os tts = gTTS(text='Good morning', lang='en') tts.save("good.mp3") os.system("mpg321 good.mp3")
If you want to test it on the command line use:
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') # 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.
You can listen to sample data on the Watson TTS page.
You can use the tts-watson module to interact.
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.