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

2023-05-16

准备

我测试使用的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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python在线发音-Python如何实现文本转语音 的相关文章

  • HTTP协议状态码的含义

    1 xff1a 请求收到 xff0c 继续处理 2 xff1a 操作成功收到 xff0c 分析 接受 3 xff1a 完成此请求必须进一步处理 4 xff1a 请求包含一个错误语法或不能完成 5 xff1a 服务器执行一个完全有效请求失败
  • oracle客户端访问服务器端

    oracle客户端访问服务器端 xff0c 在本地是很容易的 xff0c 但是要实现远程访问却有一点小麻烦 xff0c 主要是如何连接远程服务器的问题 xff0c 关于这个问题请参照上一篇转载的文章 xff0c 本文主要讲解 xff0c 如
  • classpath , path , java_home的作用

    CLASSPATH是什么 xff1f 它的作用是什么 xff1f 它是javac编译器的一个环境变量 它的作用与import package关键字有关 当你写下improt java util 时 xff0c 编译器面对import关键字时
  • HQL

    hql HQL查询 xff1a Criteria查询对查询条件进行了面向对象封装 xff0c 符合编程人员的思维方式 xff0c 不过HQL Hibernate Query Language 查询提供了更加丰富的和灵活的查询特性 xff0c
  • HDFS操作常用的Shell命令;

    向HDFS中上传任意本地文件 hadoop fs copyFromLocal URI f 如果文件存在 xff0c 则覆盖 从本地文件系统考贝到集群上 向一个已经存在的HDFS中的文本文件中 xff0c 追加本地文件的内容到HDFS原有文件
  • JS如何使用多个相同ID

    39 id 61 39 43 xff49 xff44 43 39 39 show 即可
  • 【开源硬件篇】STM32F103C8T6核心板

    STM32F103C8T6核心板 文章目录 STM32F103C8T6核心板一 STM32F103C8T6芯片1 1 STM32F103C8T6简介1 2 芯片引脚说明 二 去耦电路2 1 原理图设计2 2 原理分析2 2 1 结论2 2
  • python-markdown语法

    python的markdown扩展 xff0c 功能较为丰富 xff0c 里面甚至集成了一些 rST style 的命令 极大的扩展了文章的表现力 也有第三方扩展 64 Officially Supported Extensions Ext
  • 请求方式为post时SpringMVC无法直接跳转页面

    2020年3月24日补充 这种问题不存在于thymeleaf模板 使用thymeleaf模板后再后台直接跳转也是可以的 html页面 错误示范 报错 正确示范 起因 今天在学如何搭建简单的SpringSecurity时准备先搭建一个简单的s
  • Ubuntu 20使用devstack快速安装openstack最新版

    OpenStack介绍 openstack详细介绍及常用命令请查看此文 通过devstack部署OpenStack xff0c 官方文档点击此处查看 安装环境 工具 xff1a VMware Workstation 16 Pro 操作系统
  • windows 10 内置ubuntu 开启以及应用

    刚到新公司最不习惯的就是公司用的windows xff0c 用了两年的linux 突然之间用windows 是件很痛苦的事情 xff0c 不过win 10 很好的解决了我的问题 xff0c 最新版的 Windows 10 Insider P
  • python中exp函数如何实现指数计算?

    之前小编向大家介绍过python中的对数函数log函数 xff08 https www py cn jishu jichu 21780 html xff09 xff0c 对于有点复杂的计算 xff0c 我们是可以通过计算机来帮我们解决的 例
  • 1、stf二次开发-环境配置-node8安装

    1 stf二次开发 环境配置 node8安装 Contes7 X64 linux系统 stf二次开发 环境配置 node8安装 1 新建一个node文件夹用于安装node span class token function mkdir sp
  • 0、stf二次开发-解决CentOS网络问题

    0 stf二次开发 解决CentOS网络问题 stf二次开发 解决CentOS网络问题 转载 xff1a https www cnblogs com zhouheblog p 10442274 html
  • 32、取一个整数a从右端开始的4~7位

    32 取一个正整数a从右端开始的4 xff5e 7位 程序分析代码实现 程序分析 可以考虑两种实现方法 方法1 将合理的整数转换为字符串 span class token comment 方法1 转换为字符串处理 span span cla
  • 0、stf二次开发-CentOS-环境变量如何配置

    stf二次开发 CentOS 环境变量如何配置 需要root用户下执行以下代码 打开环境配置文件 gedit etc profil 在文本最下边添加需要配置的环境 span class token builtin class name ex
  • 1、stf二次开发-环境配置-adb安装

    1 stf二次开发 环境配置 adb安装 1 进入到想要安装adb的目录 span class token builtin class name cd span 想要安装的的目录 新建一个android目录并进入 span class to
  • 1、stf二次开发-环境配置-rethinkdb安装

    1 stf二次开发 环境配置 rethinkdb安装 此篇针对CentOS7的安装 xff0c 其他系统请参考rethinkdb官网 参考官网 span class token function sudo span span class t
  • 0、stf二次开发-CentOS-基础配置

    0 stf二次开发 CentOS 基础配置 使用centOS时需要用到命令 configure make make install 使用以上命令需要安装make vim gcc 即C 43 43 yum y span class token
  • 1、stf二次开发-环境配置-GraphicsMagick安装

    1 stf二次开发 环境配置 GraphicsMagick安装 1 下载GraphicsMagick tar gz压缩包 xff0c 放到自己要安装的目录 2 解压压缩包 GraphicsMagick 1 3 26 tar gz根据自己的压

随机推荐

  • github加速接口

    https github com
  • 交叉编译libX11

    0 前言 本文探索如何将libX11移植到ARM开发板 1 源码 从参考资料 1 或这里下载相关源码 xff0c 本文下载源码为 xff1a libX11 1 5 0 tar bz2 新建一个src目录 xff0c 并且将源码解压到其中 x
  • 2021-03-14

    题目描述 This past fall Farmer John took the cows to visit a corn maze But this wasn t just any corn maze it featured severa
  • java工具类 文件zip压缩 base64 加密,base64解密 zip解压

    代码 xff1a package com cfam utils import java io BufferedOutputStream import java io ByteArrayInputStream import java io B
  • Deno编译踩坑记(Mac环境)

    前言 最近入坑Deno xff0c 第一步肯定是从编译开始 xff0c 然后踩坑了 xff0c 记录一下 xff5e 常规编译 xff1a 1 安装rust curl proto 39 61 https 39 tlsv1 2 sSf htt
  • Debian下磁盘挂载及开机启动设置教程

    检查磁盘空间即剩余情况 本文是在实际使用过程中真实操作 xff0c 用于交流和学习 xff1b 1 使用fdisk l 命令查看当前磁盘的大小 xff0c 其中 dev sda磁盘发现并未使用 xff1b 使用时 xff0c 需要切换到ro
  • HC-06蓝牙模块

    主机 xff1a 用于向从机下发指令 xff0c 能够搜索从机并主动建立连接的一方 从机 xff1a 用于接收主机下发的命令 xff0c 不能主动建立连接 xff0c 只能等别人连接自己 xff08 HC 06只能工作在从机模式下 xff0
  • JAVA回文数的判断

    回文数 xff1a 如121 xff0c 1221这样正着和倒着读都一样的数叫做回文数 xff0c 代码的主要思路是先将用户输入的数字倒过来后再与原来的数进行判断 难点 xff1a 将用户输入的数字倒过来 上代码 xff1a package
  • IOS+openfire 即时通讯

    最近看到很多人在琢磨ios即时通讯这块 xff0c 于是出去好奇 xff0c 决定动手试试 xff0c 今天就先从xmpp这个框架来尝试 其实xmpp也就一个协议而已 xff0c 更多人还是喜欢把它叫做Jabber 首先还是提供一下下载地址
  • webpack进行js打包,引入js

    node中html引入jquery可以用webpack进行打包 webpack 3可以打包 xff0c webpack 4 打包需要安装webpack cli xff0c 否则会报错 直接引入js会报错 语法错误 xff0c 浏览器不支持E
  • iOS中UICollectionView(集合视图)的使用

    1 简单介绍与说明 简介 UICollectionView提供了一种自定义布局展示试图内容的方式 说明 涉及到的必须的基本类型与基本代理类型有UICollectionView UICollectionViewCell UICollectio
  • iOS表视图之增删单元格

    要进行单元格的修改 xff0c 首先我们要删除原来的视图并从对象库中拖曳一个Navigation Controller视图 xff08 导航控制器 xff09 到设计页面 xff0c 添加Navigation Controller视图的同时
  • 史上最全IOS的touch事件手势使用方法

    以下内容源于本人整理 部分来源于网络 如有侵权行为或错误之处还望指正 请联系邮箱huiyutianshi 64 qq com 关于touch事件的 手势和事件都是基于UIRrsponder的 UIResponder包含所有的响应事件 触摸
  • vtk 显示效果设置

    在vtk中 xff0c 显示样式的显示 xff0c 是通过vtkProperty来控制的 xff0c 这里介绍三种基本的属性设置方式 xff0c 点方式 xff0c 网格方式和面方式 xff0c 这里以 头像三角网格的显示为例介绍其显示 其
  • Qt 线程(一) Qt 多线程实现的两种方式 线程实现详解

    简述两种实现方式 Qt提供了一个管理线程的类 xff1a QThread 子类化QThread并重新实现run 使用worker object通过QObject moveToThread将它们移动到线程中 简介QThread类 一 公共槽函
  • 1000以内的完数

    题目 xff1a 一个数如果恰好等于它的因子之和 xff0c 这个数就称为 完数 例如 xff0c 6的因子为1 2 3 xff0c 而6 61 1 43 2 43 3 xff0c 因此6是 完数 编程找出1000之内的所有完数 xff0c
  • 自适应参数的DE算法——JADE,L-SHADE

    目录 JADELSHADE参考文献 最近复写一个DE 1 xff08 差分进化算法 xff09 参数的自适应策略的变体L SHADE 2 xff08 CEC冠军算法 xff09 的matlab版本 xff0c 发现其提出的自适应策略对DE改
  • 转:基于科大讯飞语音API语音识别开发详解

    原文来自于 xff1a http www 52wulian org android voice 最近项目需要用到android语音识别 xff0c 立马就想到科大讯飞 xff0c 结合官方实例及阅读API文档 xff0c 初步的完成了And
  • 离线语音识别_离线语音识别库_离线语音识别sdk - 云+社区 - 腾讯云

    广告关闭 2017年12月 xff0c 云 43 社区对外发布 xff0c 从最开始的技术博客到现在拥有多个社区产品 未来 xff0c 我们一起乘风破浪 xff0c 创造无限可能 是的 xff0c 录音文件识别服务就是离线语音识别服务 录音
  • python在线发音-Python如何实现文本转语音

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