Get ready
I tested a python version of 2.7.10, and if your version is Python3.5, it's not a good place to be.
Using the speech API
Principle
Our idea is to use Microsoft's voice interface, so we're definitely going to call the relevant interface. So we need to install Pywin32 to help us complete this bottom-up interaction.
Sample code
123 |
import win32com.client speaker = win32com.client.Dispatch( "SAPI.SpVoice" ) speaker.Speak( "Hello, it works!" ) |
Small summary
Yes, it's so easy to invoke the interface to implement speech, but we have to talk about the drawbacks of this approach.
The Chinese support is not good enough, just this point, it is estimated that few in China to use it.
And the speed is not very good control
PYTTSX Way
Principle
PYTTSX is a great library of Python for text-to-speech. We can also use PYTTSX to read the RFC files or local files, and so on, most crucially, it is still good for Chinese support.
Sample code
12345678910111213141516 |
# coding:utf-8
import sys
reload
(sys)
sys.setdefaultencoding(
‘utf8‘
)
# __author__ = ‘郭 璞‘
# __date__ = ‘2016/8/6‘
# __Desc__ = 文字转语音输出
import pyttsx
engine
= pyttsx.init()
engine.say(
‘hello world‘
)
engine.say(
‘你好,郭璞‘
)
engine.runAndWait()
# 朗读一次
engine.endLoop()
|
Small summary
With PYTTSX, we can use its powerful API to achieve our basic business needs. It's cool.
PYTTSX in-depth research
After doing the little experiment above, you will certainly feel how so not enjoyable?
Don't worry, let's go into Pyttsx's world together, and delve into how it works.
Voice engine Factory
Similar to "Factory mode" in design mode, PYTTSX is initialized to get the speech engine. When we call the init operation for the first time, we return a PYTTSX engine object, and when it is called again, if there is an Engine object instance, it will use the existing one, or else recreate it.
1 |
pyttsx.init([driverName : string, debug : bool ]) → pyttsx.Engine |
From a method declaration, the first parameter specifies the name of the voice driver, which is closely related to the underlying operating system. As follows:
1.drivename: called by the Pyttsx.driver module according to the operating system type, by default using the best driver that the current operating system can use
Sapi5-sapi5 on Windows
Nsss-nsspeechsynthesizer on Mac OS X
Espeak-espeak on every other platform
2.debug: This second parameter specifies whether you want to output in debug state, the recommended development stage is set to True
Engine interface
To use a library well, it is not possible to understand its API. Let's take a look at pyttsx. Engine. Engine API.
Method signature |
Parameter list |
return value |
Simple explanation |
Connect (topic:string, cb:callable) |
Topic: The name of the event to describe; CB: callback function |
→dict |
Adds a callback notification on a given topic |
Disconnect (token:dict) |
Token: Return token for callback mismatch |
Void |
End Connection |
Endloop () |
None |
→none |
In short, it's an end event loop. |
GetProperty (name:string) |
Name has these enumeration values "rate, vioce,vioces,volumn |
→object |
Gets the property value of the current engine instance |
SetProperty (name:string) |
Name has these enumeration values "rate, vioce,vioces,volumn |
→object |
Set property values for the current engine instance |
Say (Text:unicode, name:string) |
Text: The textual data to be read aloud; Name: Associated pronunciation people, generally not used |
→none |
Preset to read the text data, which is "Everything is ready, only the east wind" in the "Everything is ready" |
Runandwait () |
None |
→none |
This method is the "East Wind". Returns when all events in the event queue are emptied |
Startloop ([Usedriverloop:bool]) |
Usedriverloop: Whether drive cycle is enabled |
→none |
Turn on event queuing |
Meta data tones
In Pyttsx.voice.Voice, handle the pronunciation of the synth.
Age
Pronunciation of the age of the person, default to None
Gender
Pronunciation by String type human gender: Male, female, or neutral. Default is None
Id
String acknowledgment information about the voice. Use Pyttsx.engine.Engine.setPropertyValue () to set the active pronunciation signature. This property is always defined.
Languages
The list of languages supported by the pronunciation, if not, is an empty list.
Name
Pronunciation person name, default to None.
More Tests
Read aloud text
12345 |
import pyttsx engine = pyttsx.init() engine.say( ‘Sally sells seashells by the seashore.‘ ) engine.say( ‘The quick brown fox jumped over the lazy dog.‘ ) engine.runAndWait() |
Event Monitoring
12345678910 |
import pyttsx
def onStart(name):
print ‘starting‘
, name
def onWord(name, location, length):
print ‘word‘
, name, location, length
def onEnd(name, completed):
print ‘finishing‘
, name, completed
engine
= pyttsx.init()
engine.say(
‘The quick brown fox jumped over the lazy dog.‘
)
engine.runAndWait()
|
Interrupt pronunciation
12345678 |
import pyttsx def onword (name, location, length):   print ' word ' , name, location, length   if location > 10 :   engine.stop () engine = pyttsx.init () engine.say ( ) engine.runandwait () |
Change the voice of the Speaker
123456 |
engine = pyttsx.init () voices = engine.getproperty ( ' voices ' ) for voice in voices:   engine.setproperty ( , voice. id   engine.say ( Code class= "py string" > ' The quick brown fox jumped over the "the lazy dog. ' ) engine.runandwait () |
Speed control
12345 |
engine = pyttsx.init() rate = engine.getProperty( ‘rate‘ ) engine.setProperty( ‘rate‘ , rate + 50 ) engine.say( ‘The quick brown fox jumped over the lazy dog.‘ ) engine.runAndWait() |
Volume control
12345 |
engine = pyttsx.init() volume = engine.getProperty( ‘volume‘ ) engine.setProperty( ‘volume‘ , volume - 0.25 ) engine.say( ‘The quick brown fox jumped over the lazy dog.‘ ) engine.runAndWait() |
Perform an event-driven loop
1234567891011121314 |
engine
= pyttsx.init()
def onStart(name):
print ‘starting‘
, name
def onWord(name, location, length):
print ‘word‘
, name, location, length
def onEnd(name, completed):
print ‘finishing‘
, name, completed
if name
=
= ‘fox‘
:
engine.say(
‘What a lazy dog!‘
,
‘dog‘
)
elif name
=
= ‘dog‘
:
engine.endLoop()
engine
= pyttsx.init()
engine.say(
‘The quick brown fox jumped over the lazy dog.‘
,
‘fox‘
)
engine.startLoop()
|
Use an external drive loop
123456 |
engine = pyttsx.init() engine.say( ‘The quick brown fox jumped over the lazy dog.‘ , ‘fox‘ ) engine.startLoop( False ) # engine.iterate() must be called inside externalLoop() externalLoop() engine.endLoop() |
Summarize
The above is how Python implementation of text to speech all the content, read the above, is not the sense of Python to achieve text to speech or pretty simple? Well, let's try it. I hope this article will help you learn python.
Transferred from: http://www.jb51.net/article/90067.htm
How Python implements text-to-speech