在安装SDK以后,可以在D:\Program Files\Common Files\Microsoft Shared\Speech\目录下面找到SAPI.dll,这里面定义了SAPI的COM对象,用Tlbimp.exe工具将该dll转换成.net平台下的Assembly---DotNetSpeech.dll,转换的过程会提示不少的警告(warning),但这部影响我们的开发,可以忽略。最后,我们可以用ildasm查看DotnetSpeech.dll里面的对象。

用Tlbimp.exe工具将该dll转换成.net平台下的Assembly---DotNetSpeech.dll

解决:

Tlbimp.exe工具的使用,可以百度。所支持的平台好像没有wince。所以打包生成的DLL wince 用不了。可以应用与其他windows平台。


​​​http://msdn.microsoft.com/zh-cn/library/tt0cf3sx(VS.80).aspx​​这个是使用帮助.

tlbimp  SAPI.dll  /out:DotNetSpeech.dll

注意SAPI.dll 放在和tlbimp 一个目录下,生成的DotNetSpeech.dll也会在那个目录下,然后你就可以添加引用"DotNetSpeech.dll"到程序中使用了.


VS2005 调用DLL规范

1.显式调用

将生成的DLL和当前工程生成的exe放到同一路径

typedef int(*pAdd)(int a,int b);
typedef int(*pSub)(int a,int b);
CString str1("aaaaaa"); 
CString str2("dLL加载失败");
HMODULE hDLL;
hDLL=LoadLibrary("Dll.dll");//加载动态链接库MyDll.dll文件;
if(hDLL == NULL)
{
   ::AfxMessageBox(str2);
   return;
}
pAdd Add = (pAdd)GetProcAddress(hDLL,"Add");;
str1.Format(_T("5+8 = %d"),Add(5,8));
AfxMessageBox(str1);
FreeLibrary(hDLL);//卸载MyDll.dll文件;

2.隐式调用

将生成xx.lib和xx.h放在当前工程目录下

将生成xx.lib和xx.dll放在当前工程生成的exe同目录

如图添加xxx.lib路径


wince SAPI 学习3_语音合成


添加lib文件名

wince SAPI 学习3_语音合成_02

添加头文件#include "XXX.h"

CString str1("aaaaaa");

str1.Format(_T("5+8 = %d"),Add(5,8));
AfxMessageBox(str1);



语音引擎

​http://support.microsoft.com/kb/318741/zh-cn​

WinXP系统下边可以运行TTS5.1和语音识别,并且带有多语言。
Vista下边则运行的是TTS5.3和语音识别,据说进步明显,并且在.net framework3.0下边有所支持。
看起来TTS5.3似乎是更好的选择,并且WinXP可能很快就不被支持了,Vista或者Win7将会是以后的主流。

但是(总会有但是),Vista(Home版)所支持的TTS是和安装语言是相关的,他只支持所安装语言的识别和发音将只支持该安装语言。比如,如果安装的是中文版,那么将不能使用英文发音和识别---不像是XP,可以直接安装其他的语言包。除非是,安装vista的其他版本,比如企业版(多花百多美金)。

Vista下的TTS虽然还可以安装其他第三方发音库(比如NeoSpeech),但是语音识别很难安装其他库了。

那么,WinXP下边是不是可以运行TTS5.3呢?非得是Vista才可以用这些功能么?
当然不是,WinXP安装.net framework 3.0之后,也可以运行TTS5.3(其实运行的是5.1,只不过接口是5.3的),这样做的好处是
1:可以使用友好一点的接口
2:多语言支持
缺点是
TTS5.3并没有扩展什么功能,只是提供了接口,5.1不支持的功能,即使安装了.net 3.0也还是不支持。
TTS5.1和TTS5.3的bug
1:TTS5.1的语音识别不能运行在其他thread中,TTS5.3可以。
2:TTS5.3的发音和识别都不能运行在低级别的宿主程序的线程中,因为他的资源不能被释放。
3:TTS5.3的识别功能的SetInputToDefaultAudioDevice不能运行在XP中

winCE系统下只是提供了sapi的接口,但是没有提供tts语音合成引擎以及语音库,所以如果只是用wince下的sapi接口的话是不能进行语音的识别(也没有语音识别的引擎)和合成的。本人多天查阅验证得到的结论!!!求解。