注意:语音播报的时候,其他程序暂停,只有播报完成了才继续执行下面的程序,要解决这个可能就需要多线程了
windows 下可以说汉语
anaconda自带下列的包
import pythoncom
from win32com import client
pythoncom.CoInitialize()
engine = client.Dispatch("SAPI.SpVoice")
engine.Speak('高才师兄 好帅')
Ubuntu下 中文声音很古怪,老外说的
# coding:utf-8
import sys
# 下面这两行语句不太清楚是什么,但是没有这两个,就无法播报中文,但是可以播报英文
reload(sys)
sys.setdefaultencoding('utf8')
import pyttsx
engine = pyttsx.init()
voices = engine.getProperty('voices')
for item in voices:
# 打印
print item.id,item.languages
engine.setProperty('voice', 'zh') # 设置中文播报,同时英文也好使
# engine.say('hello world')
# engine.say(u'前方五百米左转,敌人将五分钟后到达战场')
engine.say(u'中船航海公司您好您好,大连海事大学您好您好!')
engine.runAndWait()
# 朗读一次
# engine.endLoop()
变成类的形式-Python2 Python3是pyttsx3这个包
# coding:utf-8
import sys
# 下面这两行语句不太清楚是什么,但是没有这两个,就无法播报中文,但是可以播报英文
reload(sys)
sys.setdefaultencoding('utf8')
import pyttsx
class Voice(object):
def __init__(self):
self.engine = pyttsx.init()
# voices = self.engine.getProperty('voices')
self.engine.setProperty('voice', 'zh')
def say(self,s):
self.engine.say(s)
self.engine.runAndWait()
if __name__ == '__main__':
engine=Voice()
engine.say('中船航海公司您好您好,大连海事大学您好您好!')
多线程类形式
# coding:utf-8
import threading
import time
class Voice(threading.Thread):
def __init__(self):
super(Voice, self).__init__()
import sys
reload(sys)
sys.setdefaultencoding('utf8')
import pyttsx
self.engine = pyttsx.init()
# voices = self.engine.getProperty('voices')
self.engine.setProperty('voice', 'zh')
def setmassage(self,s):
self.s = s
def run(self):
self.engine.say(self.s)
self.engine.runAndWait()
if __name__ == '__main__':
engine=Voice()
engine.setmassage('中船航海公司您好您好,大连海事大学您好您好!')
engine.start()
# engine.say('中船航海公司您好您好,大连海事大学您好您好!')
for i in range(10):
time.sleep(0.1)
print 'aassf'