Saturday, March 1, 2014

Speech synthesis in Python with pyttsx

By Vasudev Ram

[ Click on the link below to hear a synthesized voice:
]

pyttsx is a library for cross-platform speech synthesis (a.k.a. text-to-speech) in Python. I saw it via this article on Dr. Dobbs Journal:

Voice Throwing with Python and Android.

I have an interest in speech synthesis and have tried out some tools for it in the past.

So I downloaded and installed pyttsx, and then tried it out a bit. Had to tweak the speech rate a bit, since the default "voice" was talking a bit too fast. Also, although going by its API, pyttsx seems to support more than one voice (if your underlying text-to-speech API supports that), the program only played the words in one voice (that of a woman), even though I ran it in a loop for all the voices. It could be that my OS doesn't support more than one voice, or maybe I need to use some other pyttsx option.

Here is the test program using pyttsx, test_pyttsx.py:
import pyttsx
engine = pyttsx.init()
engine.setProperty('rate', 70)

voices = engine.getProperty('voices')
for voice in voices:
    print "Using voice:", repr(voice)
    engine.setProperty('voice', voice.id)
    engine.say("Hi there, how's you ?")
    engine.say("A B C D E F G H I J K L M")
    engine.say("N O P Q R S T U V W X Y Z")
    engine.say("0 1 2 3 4 5 6 7 8 9")
    engine.say("Sunday Monday Tuesday Wednesday Thursday Friday Saturday")
    engine.say("Violet Indigo Blue Green Yellow Orange Red")
    engine.say("Apple Banana Cherry Date Guava")
engine.runAndWait()

You can run it with the command:
python test_pyttsx.py



- Vasudev Ram - Dancing Bison Enterprises

Contact Page



2 comments:

Matthias Freiburghaus said...

Does not work for me:

C:\Users\nestor>pip install pyttsx
Collecting pyttsx
Downloading pyttsx-1.1.tar.gz
Building wheels for collected packages: pyttsx
Running setup.py bdist_wheel for pyttsx ... done
Stored in directory: C:\Users\nestor\AppData\Local\pip\Cache\wheels\31\74\27\1
f1ce253da9c23e97517c9b178de32aabcdca96ac0d87fe9a1
Successfully built pyttsx
Installing collected packages: pyttsx
Successfully installed pyttsx-1.1

C:\Users\nestor>python test_pyttsx.py
Traceback (most recent call last):
File "test_pyttsx.py", line 2, in
engine = pyttsx.init()
File "C:\Users\nestor\Anaconda2\lib\site-packages\pyttsx\__init__.py", line 39
, in init
eng = Engine(driverName, debug)
File "C:\Users\nestor\Anaconda2\lib\site-packages\pyttsx\engine.py", line 45,
in __init__
self.proxy = driver.DriverProxy(weakref.proxy(self), driverName, debug)
File "C:\Users\nestor\Anaconda2\lib\site-packages\pyttsx\driver.py", line 66,
in __init__
self._driver = self._module.buildDriver(weakref.proxy(self))
File "C:\Users\nestor\Anaconda2\lib\site-packages\pyttsx\drivers\sapi5.py", li
ne 37, in buildDriver
return SAPI5Driver(proxy)
File "C:\Users\nestor\Anaconda2\lib\site-packages\pyttsx\drivers\sapi5.py", li
ne 56, in __init__
self.setProperty('voice', self.getProperty('voice'))
File "C:\Users\nestor\Anaconda2\lib\site-packages\pyttsx\drivers\sapi5.py", li
ne 98, in setProperty
self._tts.Voice = token
File "C:\Users\nestor\Anaconda2\lib\site-packages\win32com\client\dynamic.py",
line 549, in __setattr__
self._oleobj_.Invoke(entry.dispid, 0, invoke_type, 0, value)
pywintypes.com_error: (-2147352573, 'Mitglied nicht gefunden.', None, None)

C:\Users\nestor>

Vasudev Ram said...

Well, it worked for me, and for others, see the same code on my ActiveState Code page.
So something may be different / not suitable, at your end.