准备

我测试使用的Python版本为2.7.10,如果你的版本是Python3.5的话,这里就不太适合了。

使用Speech API

原理

我们的想法是借助微软的语音接口,所以我们肯定是要进行调用 相关的接口。所以我们需要安装pywin32来帮助我们完成这一个底层的交互。

示例代码

import win32com.client

speaker = win32com.client.Dispatch("SAPI.SpVoice")

speaker.Speak("Hello, it works!")

小总结

是的,调用接口来实现语音功能就是这么简单,但是我们不得不来聊一聊这种方式的缺点。

对中文支持的不够好,仅仅是这一点,估计在中国没几个用它的了。

还有就是语速不能很好的控制

pyttsx方式

原理

pyttsx 是Python的一个关于文字转语音方面的很不错的库。我们还可以借助pyttsx来实现在线朗读rfc文件或者本地文件等等,最为关键的是,它对中文支持的还是不错的。

示例代码

# 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()

小总结

使用pyttsx,我们可以借助其强大的API来实现我们基本的业务需求。很酷吧。

pyttsx深入研究

做完上面的小实验,你肯定会觉得怎么这么不过瘾呢?

别担心,下面我们就一起走进pyttsx的世界,深入的研究一下其工作原理吧。

语音引擎工厂

类似于设计模式中的“工厂模式”,pyttsx通过初始化来获取语音引擎。当我们第一次调用init操作的时候,会返回一个pyttsx的engine对象,再次调用的时候,如果存在engine对象实例,就会使用现有的,否则再重新创建一个。

pyttsx.init([driverName : string, debug : bool]) → pyttsx.Engine

从方法声明上来看,第一个参数指定的是语音驱动的名称,这个在底层适合操作系统密切相关的。如下:

1.drivename:由pyttsx.driver模块根据操作系统类型来调用,默认使用当前操作系统可以使用的最好的驱动

sapi5 - SAPI5 on Windows

nsss - NSSpeechSynthesizer on Mac OS X

espeak - eSpeak on every other platform

2.debug:这第二个参数是指定要不要以调试状态输出,建议开发阶段设置为True

引擎接口

要想很好的运用一个库,不了解其API是不行的。下面来看看pyttsx。engine.Engine的引擎API。

方法签名

参数列表

返回值

简单释义

connect(topic : string, cb : callable)

topic:要描述的事件名称;cb:回调函数

→ dict

在给定的topic上添加回调通知

disconnect(token : dict)

token:回调失联的返回标记

Void

结束连接

endLoop()

None

→ None

简单来说就是结束事件循环

getProperty(name : string)

name有这些枚举值“rate, vioce,vioces,volumn

→ object

获取当前引擎实例的属性值

setProperty(name : string)

name有这些枚举值“rate, vioce,vioces,volumn

→ object

设置当前引擎实例的属性值

say(text : unicode, name : string)

text:要进行朗读的文本数据; name: 关联发音人,一般用不到

→ None

预设要朗读的文本数据,这也是“万事俱备,只欠东风”中的“万事俱备”

runAndWait()

None

→ None

这个方法就是“东风”了。当事件队列中事件全部清空的时候返回

startLoop([useDriverLoop : bool])

useDriverLoop:是否启用驱动循环

→ None

开启事件队列

元数据音调

在pyttsx.voice.Voice中,处理合成器的发音。

age

发音人的年龄,默认为None

gender

以字符串为类型的发音人性别: male, female, or neutral.默认为None

id

关于Voice的字符串确认信息. 通过 pyttsx.engine.Engine.setPropertyValue()来设置活动发音签名. 这个属性总是被定义。

languages

发音支持的语言列表,如果没有,则为一个空的列表。

name

发音人名称,默认为None.

更多测试

朗读文本

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()

事件监听

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()

打断发音

import pyttsx

def onWord(name, location, length):

print 'word', name, location, length

if location > 10:

engine.stop()

engine = pyttsx.init()

engine.say('The quick brown fox jumped over the lazy dog.')

engine.runAndWait()

更换发音人声音

engine = pyttsx.init()

voices = engine.getProperty('voices')

for voice in voices:

engine.setProperty('voice', voice.id)

engine.say('The quick brown fox jumped over the lazy dog.')

engine.runAndWait()

语速控制

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()

音量控制

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()

执行一个事件驱动循环

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()

使用一个外部的驱动循环

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()

总结

以上就是Python如何实现文本转语音的全部内容,看完了上面的讲述,是不是感觉Python实现文本转语音还是蛮简单的?那么,大家快来尝试尝试吧。希望本文对大家学习Python有所帮助。

本文标题: Python如何实现文本转语音

本文地址: http://www.cppcns.com/jiaoben/python/159803.html

python电脑发音-Python如何实现文本转语音相关推荐

  1. python电脑发音-Python之父发声:我们能为“996”程序员做什么?

    4月7日,知名开发者,编程语言Python之父Guido van Rossum在Python讨论区针对国内程序员996工作制发声. Guido发文称,"我们能为中国的"996&qu ...

  2. python简单发音-Python如何实现文本转语音

    准备 我测试使用的Python版本为2.7.10,如果你的版本是Python3.5的话,这里就不太适合了. 使用Speech API 原理 我们的想法是借助微软的语音接口,所以我们肯定是要进行调用 相 ...

  3. python在线发音-Python如何实现文本转语音

    准备 我测试使用的Python版本为2.7.10,如果你的版本是Python3.5的话,这里就不太适合了. 使用Speech API 原理 我们的想法是借助微软的语音接口,所以我们肯定是要进行调用 相 ...

  4. python在线发音-python中文读法

    广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! 而python是测试过程中最为常用的语言之一,很多测试团队的自动化代码和用例都是使 ...

  5. python电脑配置-python电脑配置

    广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! selenium 自动化测试环境配置. 第一步.安装python 的开发环境包,选 ...

  6. python电脑版-python

    python官方版是一款面向对象的解释型计算机程序设计语言,python Mac版既可以兼容之前的版本,又带来了许多功能性更新,比如支持async/await异步编程,改进了对Python Zip应用 ...

  7. python电脑下载-python

    Python官方版是一款相当出色的通用型编程语言.PyCharm官方版适用性极广,被用户广泛应用于各种编程操作,软件还拥有丰富全面的模块,并支持sockets编程,Python便捷好用,可以让您快速地 ...

  8. python怎样发音_python在线发音_python翻译

    python的发音.怎么说python.听英语音频发音.了解更多.在英式免费创建并分享自己的单词列表和小测验! (一)python的起源python(发音类似"派森")这个英文单词 ...

  9. Python 实现文本转语音

    : Python 实现文本转语音 Python 是一种非常强大的脚本语言,可以用来实现各种复杂的应用,其中之一就是文本转语音,即把文字转换成声音来发出.在这里,我们将使用 Python 的 gTTS ...

最新文章

  1. 【目标检测】yolo系列:从yolov1到yolov5之YOLOv3详解及复现
  2. 清华大数据软件成果亮相第三届数字中国建设峰会成果展览
  3. Java进阶06 容器
  4. .Net IL代码研究
  5. Oracle报错TNS-12532: TNS:invalid argument
  6. Linux多进程拷贝fork,浅析linux中fork函数
  7. Gitee X Serverless Devs 邀你来“领赏”啦!
  8. Gensim初步使用和详细解释(该代码只能处理英文,处理中文不可用该代码)
  9. 排序算法之希尔排序(C/C++)
  10. 阿里巴巴美股股价大跌:创在美上市以来最大单日跌幅
  11. mysql如何进行数据透视_简单谈谈MySQL数据透视表
  12. 云原生发展趋势-2022
  13. win7c盘空间越来越小_你Windows10的C盘究竟多大才合适
  14. 2022无线蓝牙耳机选哪个?盘点超热门的蓝牙耳机品牌推荐
  15. Android打开第三方地图使用方法
  16. Spring Boot 2 精髓学习笔记(五)---Beetl 模板引擎(1)
  17. 从入门到精通:掌握Python核心知识,解锁编程新世界!
  18. HBase2.x(六)HBase API DML的操作
  19. 良心整理:PDF工具合集
  20. git ls-files:项目文件码数行数统计

热门文章

  1. 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)
  2. spring之Environment
  3. 2017暑假 第四周 学习总结(复习)
  4. .NET Core的日志[4]:将日志写入EventLog
  5. 0218 图片的添加
  6. 网站开发常用jQuery插件总结(15)上传插件blueimp
  7. KB001: 兼容性问题与浏览器的内核及渲染模式
  8. oracle1537,dataguard 出现ORA-16136错误
  9. java初始化实例化_Java 类初始化和实例化以及多态理解
  10. python拿什么做可视化界面好-python爬虫如何制作可视化界面?(pyqt5环境配置篇)...