本文主要讲解如何使用python来实现将文本转为语音,以一个小例子为例,写了一下用pyTTS来朗读本地方件或在线朗读RFC文档,当然也可以修改一下,做成在线朗读新闻之类的,另本来想实现一个读中文小说的小程序,目前没有发现对中文支持得非常好的,且是免费的语音处理引擎,只能使用TTS实现一个英文的了,就当是用来练习听力了。
1、准备:
a. 下载pyTTS, [http://sourceforge.net/projects/uncassist/files/pyTTS/pyTTS%203.0/](http://sourceforge.net/projects/uncassist/files/pyTTS/pyTTS%203.0/)
b. 下载SpeechSDK51:[下载](http://download.microsoft.com/download/B/4/3/B4314928-7B71-4336-9DE7-6FA4CF00B7B3/SpeechSDK51.exe)
c. 下载SpeechSDK51 patch,支持中文和日文,本例没有使用,[下载](http://download.microsoft.com/download/B/4/3/B4314928-7B71-4336-9DE7-6FA4CF00B7B3/SpeechSDK51LangPack.exe)。
2、实现:
代码:
~~~
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#程序说明:此程序实现了通过TTS将文本内容读出来,提供了两种方式,一种是读本地文本文件,
#另一种方式为在线读RFC文档,要属入rfc编号,会将其内容逐行读出来打印到终端,其中音量
#大小,语速,朗读者可能过配置文件来设置,测试了下基本还算清楚,发现免费的TTS引擎对中文
#的支持均不是很好,所以本程序暂时没有处理对中文文件的阅读
import pyTTS
import ConfigParser
def read_local_file(tts):
'''
Function:朗读本地文件
Input:TTS对象
Output: NONE
Author: socrates
Blog:http://blog.csdn.net/dyx1024
Date:2012-02-19
'''
#输入要朗读的文本文件名
file_name = raw_input("please input a text file name (for example: rfc4960.txt)").strip()
try:
fobj = open(file_name, 'r')
except IOError, err:
print('file open error: {0}'.format(err))
return
else:
#逐行输出并朗读的文本内容
for eachLine in fobj:
print(eachLine)
tts.Speak(eachLine)
fobj.close()
def read_online_rfc(tts):
'''
Function:在线朗读RFC文档
Input:TTS对象
Output: NONE
Author: socrates
Blog:http://blog.csdn.net/dyx1024
Date:2012-02-19
'''
import urllib
#输入要朗读的RFC编号
rfc_id = raw_input("please input a rfc number (for example: 4960):")
#打开RCF文档
try:
pager = urllib.urlopen("http://tools.ietf.org/rfc/rfc%s.txt" % rfc_id)
except Exception, err:
print("open url failed, ret = %s" % err.args[0])
return
#逐行读取
while True:
if len(pager.readline()) == 0:
break
else:
strtmp = pager.readline()
print strtmp
tts.Speak(strtmp)
def Init_tts():
'''
Function:初始化TTS引擎
Input:NONE
Output: NONE
Author: socrates
Blog:http://blog.csdn.net/dyx1024
Date:2012-02-19
'''
tts_config = ConfigParser.ConfigParser()
#读取TTS相关配置文件
try:
tts_config.readfp(open('tts_config.ini'))
except ConfigParser.Error:
print 'read tts_config.ini failed.'
#创建TTS对象
tts = pyTTS.Create()
#设置语速
tts.Rate = int(tts_config.get("ttsinfo", "TTS_READ_RATE"))
#设置音量
tts.Volume = int(tts_config.get("ttsinfo", "TTS_READ_VOLUME"))
#设置朗读者
tts.SetVoiceByName(tts_config.get("ttsinfo", "TTS_READ_READER"))
return tts
def show_menu():
'''
Function:系统菜单
Input:NONE
Output: NONE
Author: socrates
Blog:http://blog.csdn.net/dyx1024
Date:2012-02-19
'''
prompt = '''
l. read local file.
2. read rfc online.
3. exit
please input your choice (1 or 2):
'''
command_name = {'1':read_local_file, '2':read_online_rfc}
while True:
while True:
try:
choice = raw_input(prompt).strip()[0]
except (EOFError, KeyboardInterrupt, IndexError):
choice = '3'
if choice not in '123':
print 'error input, try again'
else:
break
if choice == '3':
break
command_name[choice](Init_tts())
if __name__ == '__main__':
show_menu()
~~~
配置文件tts_config.ini:
~~~
[ttsinfo]
TTS_READ_RATE=-2 ;语速,默认为0,大于0表示快,小于0表示慢
TTS_READ_VOLUME=100 ;音量,0-100之间
TTS_READ_READER=MSMike ;朗读者,取值MSSam、MSMary、MSMike
~~~
测试一:
~~~
l. read local file.
2. read rfc online.
3. exit
please input your choice (1 or 2):
1
please input a text file name (for example: rfc4960.txt)english.txt
China says it condemns all acts of violence against innocent civilians
BEIJING - China's negative vote on a draft resolution on Syria at the United Nations General Assembly on Thursday was consistent with China's independent foreign policy of peace and in the best interests of the Syrian situation, officials and experts said.
China opposes armed intervention or forcing a so-called regime change in Syria, China's deputy permanent representative to the UN Wang Min said in explanatory remarks.
"We condemn all acts of violence against innocent civilians and urge the government and all political factions of Syria to immediately and fully end all acts of violence, and quickly restore stability and the normal social order," Wang said.
~~~
测试二:<>标记对中的内容仅打印,不朗读,各协议文档编号可从[http://tools.ietf.org/rfc/](http://tools.ietf.org/rfc/)中查询。
~~~
l. read local file.
2. read rfc online.
3. exit
please input your choice (1 or 2):
2
please input a rfc number (for example: 4960):330
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head>
<meta http-equiv="Content-Style-Type" content="text/css" />
<!-- JavaScript -->
<script language="javascript1.1" src="/js/updated.js" type="text/javascript"></script>
<link rel="icon" href="/ietf.ico" />
<title>IETF Tools</title>
<style type="text/css" >
/* HTML element styles */
background-color: white;
padding: 0;
}
font-family: "Times New Roman", times, serif;
margin: 0;
h1 { font-size: 150%; }
h4 { margin: 0.45em 0 0 0; }
.menu form { margin: 0; }
input.frugal,textarea.frugal {
border-left: groove 2px #ccc;
~~~
此博客上传不了音频文件,有兴趣的朋友可以自己运行一下收听。
- 前言
- Python:实现文件归档
- Pyhon:按行输出文件内容
- Python:读文件和写文件
- Python:实现一个小算法
- Python:通过命令行发送新浪微博
- Python:通过摄像头实现的监控功能
- Python:通过摄像头抓取图像并自动上传至新浪微博
- Python:简单的摄像头程序实现
- Python:日志模块logging的应用
- Python:操作嵌入式数据库SQLite
- Python:将句子中的单词全部倒排过来,但单词的字母顺序不变
- Python:语音处理,实现在线朗读RFC文档或本地文本文件
- Python:通过计算阶乘来学习lambda和reduce这两个函数的使用
- Python:通过执行100万次打印来比较C和python的性能,以及用C和python结合来解决性能问题的方法
- Python:使用matplotlib绘制图表
- Python:使用pycha快速绘制办公常用图(饼图、垂直直方图、水平直方图、散点图等七种图形)
- Python:使用pycha快速绘制办公常用图二(使用样式定制个性化图表)
- Python:监控键盘输入、鼠标操作,并将捕获到的信息记录到文件中
- Python:通过获取淘宝账号和密码的实验,来看登陆方式选择的重要性
- Python:通过获取淘宝账号和密码的实验,来看登陆方式选择的重要性(二)
- Python:通过远程监控用户输入来获取淘宝账号和密码的实验(一)
- Python:通过远程监控用户输入来获取淘宝账号和密码的实验(二)
- Python:通过自定义系统级快捷键来控制程序运行
- Python:通过自定义系统级快捷键来控制程序开始或停止记录日志(使用小技巧解决一个貌似无解的问题)
- Python:一个多功能的抓图工具开发(附源码)
- Python:程序发布方式简介一(打包为可执行文件EXE)
- Python:新浪微博应用开发简介(认证及授权部分)
- Python:程序最小化到托盘功能实现
- Python:实用抓图工具开发介绍(含需求分析、设计、编码、单元测试、打包、系统测试、发布各环节)
- Python:桌面气泡提示功能实现
- Python:未来三个月的python学习计划
- Python:pygame模块及SDL库简介
- Python:获取新浪微博用户的收听列表和粉丝列表
- Python:pygame游戏编程之旅一(Hello World)
- Python:pygame游戏编程之旅二(自由移动的小球)
- Python:pygame游戏编程之旅三(玩家控制的小球)
- Python:pygame游戏编程之旅四(游戏界面文字处理)
- Python:pygame游戏编程之旅五(游戏界面文字处理详解)
- Python:pygame游戏编程之旅六(游戏中的声音处理)
- Python:pygame游戏编程之旅七(pygame基础知识讲解1)
- Python:编程“八荣八耻”之我见
- Python:脚本的几种执行方式
- wxPython:简单的wxPython程序
- wxPython:简单的wxPython程序的另一种写法
- wxPython:应用程序对象介绍
- wxPython:输出重定向
- wxPython:关闭wxPython程序
- wxPython:Frame类介绍
- wxPython:面板Panel的使用
- wxPython:工具栏、状态栏、菜单实现
- wxPython:消息对话框MessageDialog
- wxPython:文本对话框TextEntryDialog
- wxPython:列表选择框SingleChoiceDialog
- wxPython:事件处理介绍一
- wxPython:事件处理介绍二
- wxPython: 简单的绘图例子
- wxPython:状态栏介绍
- wxPython:菜单介绍
- wxPython:文件对话框wx.FileDialog
- wxPython:颜色选择对话框wx.ColourDialog
- wxPython:布局管理器sizer介绍
- wxPython:启动画面SplashScreen介绍
- wxPython:绘画按钮BitmapButton介绍
- wxPython:进度条Gauge介绍
- Python: 发送新浪微博(使用oauth2)
- Python:读取新浪微博收听列表
- Python:DNS客户端实现