转摘请说明出处:http://www.cnblogs.com/luochengor/p/3511165.html以及作者,谢谢。

eSpeak是最为流行的开源跨平台的文本转语音程序。这两天进行了简单的研究。

先去网站看看吧! http://espeak.sourceforge.net/,网站很简洁,了解大概后下载需要的东西。这里下载两个包,分别是:

espeak-1.47.11-win.zip

espeak-1.47.11-source.zip

前者是一个完整的安装包,可以进行演示用,后者猜是开发要用的包。

通过阅读文档发现需要另一个开源软件的支持,PortAudio库:免费开源的跨平台音频播放库,支持Windows, Macintosh, Unix, SGI and BeOS等平台,以下工程都是在Microsoft Visual Studio 2008下完成编译。

一、 准备

1、PortAudio开源库 :本人用的是 pa_stable_v19_20111121.tgz

官方主页:http://www.portaudio.com/

2、依赖ASIO库:用于异步处理

3、依赖DirectX库:用于驱动声卡

二、步骤

1、将ASIO库 拷贝到 portaudio\src\hostapi\asio\目录下,即整个ASIOSDK文件夹放到portaudio\src\hostapi\asio\目录下。

2、安装DirectX库。

3、 用VS2008打开portaudio\build\msvc\portaudio.dsw (打开portaudio.sln)

4、可选:

官方说明:http://www.portaudio.com/trac/wiki/TutorialDir/Compile/Windows(参照设置)

http://www.portaudio.com/trac/wiki/TutorialDir/Compile/WindowsASIOMSVC(参照检查文件)

注:Finally, open the "pa_win_hostapis.c" file. Add the following:

#define PA_NO_WMME

#define PA_NO_DS

在Win32环境中是需要WMME和DS的。这两个define语句是需要加的。

DirectX库的安装目录默认为:C:\Program Files\Microsoft DirectX SDK (June 2010)

需要在工程内分别添加对DirectX SDK的头文件和lib的引用,即:

C:\Program Files\Microsoft DirectX SDK (June 2010)\include

lib根据自己需要有32位的和64位的,本人用的是32位的

C:\Program Files\Microsoft DirectX SDK (June 2010)\lib\X86

不然会提示,找不到dsound.h这个文件的错误。

编译生成的动态链接库portaudio_x86.dll、portaudio_x86.libportaudio.h是我们在eSpeak中可能要用到的。

解压espeak-1.47.11-source.zip,espeak-1.47.11-source\platforms\windows\目录下包含了windows_cmd、windows_dll、windows_sapi和espeakedit工程目录,里边都含有VC工程项目文件。

windows_cmd是生成espeak.exe命令行程序。

windows_dll是生成espeak_lib.dll动态链接库(本人主要想使用这个,通过函数调用实现文本转语音功能)。

windows_sapi是通过SAPI实现的动态链接库(需要Microsoft Speech SDK的支持)。

espeakedit生成espeakedit.exe

先从windows_cmd开始,阅读目录下的!ReadMe.txt,espeak-1.47.11-source\src下的文件全部拷贝到,espeak-1.47.11-source\platforms\windows\windows_cmd\src,不包括speech.h、stdint.h,将上面生成的portaudio_x86.dll、portaudio_x86.lib和portaudio.h,加入到工程内,如果没有意外的话这样编译就通过了,将生成的EXE和portaudio_x86.dll,拷贝到一个单独的文件夹下如C:\espeak-1. 47.11-source,现在可以在cmd模式下运行命令测试了:

C:\Documents and Settings\Administrator>cd C:\espeak-1. 47.11-source

C:\espeak-1.40.02-source> espeak --path="." -v en "hello"

Can't read data file: '\espeak-data\phontab'

Failed to load espeak-data

不要慌,看下提示说找不到文件,将espeak-1.47.11-source目录下的dictsource和espeak-data这两个文件夹复制到C:\espeak-1. 47.11-source目录下即可。

编译windows_dll工程,这是文章的重点,因为我们要使用它编译出来的动态链接库来进行编程开发。同样将espeak-1.47.11-source\src下的文件拷贝到espeak-1.47.11-source\platforms\windows\windows_dll\src下不覆盖speak_lib.h、speech.h、StdAfx.h、stdint.h文件。将上面生成的portaudio_x86.dll、portaudio_x86.lib和portaudio.h,加入到工程内(需要在附加依赖项中添加portaudio_x86.lib),进行编译,编译通过,生成了espeak_lib.dll、espeak_lib.lib,这样就可以写一个测试程序看看劳动成果。

通过阅读windows_dll工程目录下的!ReadMe.txt知道Windows下面eSpeak只支持AUDIO_OUTPUT_SYNCHRONOUS模式,使用 AUDIO_OUTPUT_SYNCHRONOUS模式要设置回调函数。新建一个空的控制台工程,当然了也需要将speak_lib.h、espeak_lib.dll、espeak_lib.lib加入到工程内,代码如下:

#include <iostream>
#include <string>
#include "speak_lib.h" using namespace std; #pragma comment(lib,"espeak_lib.lib") static int synthCallback(short *wav, int numsamples, espeak_EVENT *events) {
// 可以根据源码程序编写这部分代码实现生成语音文件功能。
return ;
} int main()
{
char text[] = "hello";
//包含espeak_data的目录
string path = "E:\\workspace\\Microsoft Visual Studio 2008\\09.EspeakDemo\\Debug"; espeak_Initialize(AUDIO_OUTPUT_SYNCH_PLAYBACK, , path.c_str(), ); // 设置回调函数
espeak_SetSynthCallback(synthCallback); // 设置中文
espeak_SetVoiceByName("zh+f2"); // 发音
espeak_Synth(text, , , POS_CHARACTER, , espeakCHARS_UTF8, NULL, NULL); // 等待发音结束
espeak_Synchronize(); espeak_Terminate(); return ;
}

运行测试吧,这回你一定有惊喜。说的是英文!想要说中文的话还用进行一些修改

char text[] = "hello"

改成

wchar_t text[] = L"你好";
espeak_Synth(text, , , POS_CHARACTER, , espeakCHARS_UTF8, NULL, NULL);

改成

espeak_Synth(text, , , POS_CHARACTER, , espeakCHARS_WCHAR, NULL, NULL);

虽然声音难听一点,但是也算可以。

参考文章:

1、http://cool.worm.blog.163.com/blog/static/6433900620097535713944/

2、http://wenku.baidu.com/view/52edd773f46527d3240ce00d.html?qq-pf-to=pcqq.c2c

转摘请说明出处:http://www.cnblogs.com/luochengor/p/3511165.html以及作者,谢谢。

跨平台TTS eSpeak Windows开发的更多相关文章

  1. 跨平台C/C++集成开发环境-Code::Blocks-内置GCC

    Code::Blocks 是一个开放源码的全功能的跨平台C/C++集成开发环境. 相比于基于Delphi的Dev-C++共享C++IDE,Code::Blocks是开放源码软件.Code::Block ...

  2. 我的windows开发环境设定与日常使用指南

    目录 开发相关的软件包安装.设定 Visual Studio 默认设定 鼠标右键添加"在此处打开cmd"选项 git gvim notepad++ VSCode-Insider C ...

  3. 一.1搭建跨平台的统一python开发环境

    搭建跨平台的统一python开发环境: 使用开发环境的好处: 可不用在服务器上直接修改源代码---写的代码首先得入版本库(放git或giitlab中),在本地写代码提交到git中.然后在服务器上git ...

  4. 【windows开发实现记事本程序——逻辑篇1】

    1. 主要内容 从本节开始介绍windows开发实现记事本程序的逻辑实现部分.本节的主要内容有以下3点: 1. 主窗口定义  -- 主要介绍记事本主界面窗口对应的窗口类及实现方案 2. RichEdi ...

  5. Windows开发中一些常用的辅助工具

    经常有人问如何快速的定位和解决问题,很多时候答案就是借助工具, 记录个人Windows开发中个人常用的一些辅助工具.   (1) Spy++ 相信windows开发中应该没人不知道这个工具, 我们常用 ...

  6. 跨平台移动框架iMAG开发入门

    iMAG是一个非常简洁高效的移动跨平台开发框架,开发一次能够同一时候兼容Android和iOS平台,有点儿Web开发基础就能非常快上手.当前移动端跨平台开发的框架有非常多,但用iMAG另一个优点,就是 ...

  7. Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例【附详细代码】

    http://blog.csdn.net/xiefu5hh/article/details/51707529 Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例[附 ...

  8. 虚拟机运行docker后映射端口到windows开发机

    1.运行容器(以Oracle-xe-11g为例) 运行容器时先在虚拟机内映射端口 docker run -d -p 9090:8080 -p 1521:1521 wnameless/oracle-xe ...

  9. gcc for Windows 开发环境介绍

    导读: 在Windows操作系统下的gcc 第一节 GCC家族概览 GCC是一个原本用于Unix-like系统下编程的编译器. 只是,如今GCC也有了很多Win32下的移植版本号.所以,或许对于很多W ...

随机推荐

  1. CMDB初步了解

    本节内容 浅谈ITIL CMDB介绍 Django自定义用户认证 Restful 规范 资产管理功能开发 浅谈ITIL TIL即IT基础架构库(Information Technology Infra ...

  2. 兼容获取元素当前样式 currentStyle || getComputedStyle

    function getStyle(ele, attr) { return ele.currentStyle ? ele.currentStyle[attr] : window.getComputed ...

  3. Python(数据库之表操作)

    一.修改表 1. 修改表名 ALTER TABLE 表名 RENAME 新表名; #mysql中库名.表名对大小写不敏感 2. 增加字段 ALTER TABLE 表名ADD 字段名 数据类型 [完整性 ...

  4. Diango思维图

    1,http 2,Django生命周期 3,Django部分命令 4,待续...

  5. Tomcat WEB站点部署

    上线的代码有两种方式, 第一种方式是直接将程序目录放在webapps目录下面 第二种方式是使用开发工具将程序打包成war包,然后上传到webapps目录下面.下面让我们见识一下这种方式 这个网站里面已 ...

  6. ionic真机调试Android报错 - could not read ok from ADB Server * failed to start daemon * error: cannot connect to daemon

    在使用真机调试Android程序时,报错如下: could not read ok from ADB Server * failed to start daemon error: cannot con ...

  7. PHP引用符&的用法详细解析

    本文转自:http://blog.csdn.net/vip_linux/article/details/10206091PHP中引用符&的用法.关于php的引用(就是在变量或者函数.对象等前面 ...

  8. 解释一下python中的逻辑运算符

    python中有三个逻辑运算符:and.or.not print(False and True)#False print(7<7 or True)#True print(not 2==2)#Fa ...

  9. 在U盘上安装Damn Small Linux

    Damn Small Linux 是一个袖珍Linux发行版,整个系统只有50M左右,所以可以放到U盘中,从而可以在支持U盘启动的电脑上使用Linux,功能与LiveCD相当.   有很多种方法可以将 ...

  10. Saltstack sls文件:批量安装服务

    一.使用saltstack 批量安装nginx 1.创建salt目录 mkdir /srv/{salt,pillar} 2.再/srv/salt/下创建sls文件 vim nginx_install. ...