弄了一整天总算成功使用espeak说出中文了,现在做下记录:

1、当然我们得从官网中下载源代码http://espeak.sourceforge.net/download.html 我下载的是espeak-1.48.04-source.zip
2、找了下资料并且看了下官方提供的文档发现espeak库是依赖portAudio库的之前没仔细看吃了大亏了,编译后怎么样都无法播出声音。现在我也介绍下portAudio库的编译吧省得大家再去找了:
在其官网上http://www.portaudio.com/download.html下载源代码pa_stable_v190600_20161030.tgz或者其他版本就看各位心情了,这时候发现portAudio又依赖着两个库DirectX和ASIO 。至于DirectX SDK还是很方便安装的,只要到微软的网站下载就好https://www.microsoft.com/en-us/download/details.aspx?id=6812具体怎么下载就不说了。
至于ASIO库到这边http://www.steinberg.net/en/company/developer.html去下载就好,将获取到的压缩包解压后得到ASIOSDK2.3或ASIOSDK2.2之类的文件夹将其复制到src\hostapi\asio(当然这是在portAudio解压后的目录下啦不要找错了)下改变文件名为ASIOSDK。
接下来用VS2010 打开build\msvc 下的portaudio.sln选取编译的版本后编译就好啦。这样我们就能得到portaudio_x86.dll portaudio_x86.lib 当然还有include目录下的portaudio.h是我们需要的。
3、现在我们才要真正进入espeak库的编译了,解压下载的espeak压缩包后进入platforms\windows\windows_dll目录下用VC6打开espeak.dsw,将之前编译的portAudio_x86.lib拷贝到该目录下, 把portaudio.h文件拷贝到src目录下覆盖之前的,在VC6中将portAudio_x86.lib加入库的支持(这个不知道怎么弄就百度吧)。然后还有很重要的一步就是将解压后根目录下的src中的所有文件拷贝到platforms\windows\windows_dll目录中src下记得不要覆盖之前的文件。使用VC6编译后得到espeak_lib.dll espeak_lib.lib.
4、接下来就是将此行目的了,使用VS2010或者其他什么版本创建一个win32应用程序,将espeak_lib.lib加入依赖库支持,然后记得引用speak_lib.h文件(在解压后的espeak源代码中的src目录下)。拷贝下面的代码编译就好啦:

#include "stdafx.h"
#include "include\speak_lib.h"
#include <string.h>
#include <Windows.h>
#include <string>

using namespace std; 

static int synthCallback(short *wav, int numsamples, espeak_EVENT *events)

{
    // 可以根据源码程序编写这部分代码实现生成语音文件功能。
    return 0;
}

int main()
{
    wchar_t text[] = L"你好你好你好你好你好";
    //包含espeak_data的目录
    std::string path = ".";
    espeak_Initialize(AUDIO_OUTPUT_SYNCH_PLAYBACK, 0, path.c_str(), 0); 
    // 设置回调函数
    espeak_SetSynthCallback(synthCallback); 
    // 设置中文
    espeak_SetVoiceByName("zh+m10");
    // 发音
    for(int i=0;i<1;i++){
    int ret=espeak_Synth(text,0, 0, POS_CHARACTER, 0, espeakCHARS_WCHAR, NULL, NULL); 
    printf("%d\n",ret);
    }
    // 等待发音结束
    espeak_Synchronize(); 
    espeak_Terminate();
    return 0;
}

最后记得将espeak_lib.dll、portaudio_x86.dll以及espeak源代码目录的文件夹espeak-data拷贝到编译出来的exe文件目录下就可以啦。记得使用中文要使用wchar_t类型的字符串不然运行会出错,我就吃了大亏。
今天就这样了,刚开始写博客记录写东西文笔不是很好有什么写的不好的还望见谅。

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐